转自:http://blog.csdn.net/cooblily/archive/2007/10/27/1848037.aspx

都好久沒上來写文章了,都不知道做什么好,結果还是学写了一下用Native API的程序,這些API的原型当然久在DDK里面找啦,不过因为NTDLL.DLL有导出啊,所以可以LoadLibrary调入这个动态连接文件,再GetProcAddress找到相应的API的地址,然后当然就可以调用啦.

整個过程最麻烦的就是要将DDK翻来翻去找到要用到的函数原型,函数所用到的結构,和一些宏.复制到程序裏面,好啦,以下是我学习的成果.

以下代码是在C:中创建一个ForZwFileTest.txt的文件并写入內容,然後删除.其实都沒什么用的,反正有微軟公开的API不用,而用這些沒公开的API來实现这个功能完全是因为无聊.嘻嘻.

  1. #include <windows.h>
  2. #include <stdio.h>
  3. #include <stdlib.h>
  4. typedef unsigned long NTSTATUS;
  5. typedef unsigned short USHORT;
  6. typedef unsigned long ULONG;
  7. typedef unsigned long DWORD;
  8. typedef long LONG;
  9. typedef __int64 LONGLONG;
  10. typedef struct UNICODE_STRING{
  11. USHORT Length;
  12. USHORT MaxLen;
  13. USHORT *Buffer;
  14. } UNICODE_STRING,*PUNICODE_STRING;
  15. #define OBJ_INHERIT             0x00000002L
  16. #define OBJ_PERMANENT           0x00000010L
  17. #define OBJ_EXCLUSIVE           0x00000020L
  18. #define OBJ_CASE_INSENSITIVE    0x00000040L
  19. #define OBJ_OPENIF              0x00000080L
  20. #define OBJ_OPENLINK            0x00000100L
  21. #define OBJ_KERNEL_HANDLE       0x00000200L
  22. #define OBJ_FORCE_ACCESS_CHECK  0x00000400L
  23. #define OBJ_VALID_ATTRIBUTES    0x000007F2L
  24. #define FILE_ATTRIBUTE_NORMAL               0x00000080
  25. #define FILE_SHARE_DELETE                   0x00000004
  26. #define FILE_OPEN_IF                        0x00000003
  27. #define FILE_SYNCHRONOUS_IO_NONALERT        0x00000020
  28. #define GENERIC_WRITE                       (0x40000000L)
  29. #define SYNCHRONIZE                         (0x00100000L)
  30. #define GENERIC_READ                        (0x80000000L)
  31. typedef struct _OBJECT_ATTRIBUTES{
  32. ULONG  Length;
  33. HANDLE  RootDirectory;
  34. PUNICODE_STRING  ObjectName;
  35. ULONG  Attributes;
  36. PVOID  SecurityDescriptor;
  37. PVOID  SecurityQualityOfService;
  38. } OBJECT_ATTRIBUTES, *POBJECT_ATTRIBUTES;
  39. typedef CONST OBJECT_ATTRIBUTES *PCOBJECT_ATTRIBUTES;
  40. typedef NTSTATUS (__stdcall *ZWDELETEFILE)(
  41. IN POBJECT_ATTRIBUTES  ObjectAttributes);
  42. typedef VOID (__stdcall *RTLINITUNICODESTRING)(
  43. IN OUT PUNICODE_STRING  DestinationString,
  44. IN PCWSTR  SourceString);
  45. typedef struct _IO_STATUS_BLOCK{
  46. DWORD Status;
  47. ULONG Information;
  48. } IO_STATUS_BLOCK, *PIO_STATUS_BLOCK;
  49. typedef NTSTATUS (__stdcall *ZWCREATEFILE)(
  50. OUT PHANDLE  FileHandle,
  51. IN ACCESS_MASK  DesiredAccess,
  52. IN POBJECT_ATTRIBUTES  ObjectAttributes,
  53. OUT PIO_STATUS_BLOCK  IoStatusBlock,
  54. IN PLARGE_INTEGER  AllocationSize  OPTIONAL,
  55. IN ULONG  FileAttributes,
  56. IN ULONG  ShareAccess,
  57. IN ULONG  CreateDisposition,
  58. IN ULONG  CreateOptions,
  59. IN PVOID  EaBuffer  OPTIONAL,
  60. IN ULONG  EaLength);
  61. typedef VOID (NTAPI *PIO_APC_ROUTINE) (
  62. IN PVOID ApcContext,
  63. IN PIO_STATUS_BLOCK IoStatusBlock,
  64. IN ULONG Reserved);
  65. typedef NTSTATUS (__stdcall *ZWWRITEFILE)(
  66. IN HANDLE  FileHandle,
  67. IN HANDLE  Event  OPTIONAL,
  68. IN PIO_APC_ROUTINE  ApcRoutine  OPTIONAL,
  69. IN PVOID  ApcContext  OPTIONAL,
  70. OUT PIO_STATUS_BLOCK  IoStatusBlock,
  71. IN PVOID  Buffer,
  72. IN ULONG  Length,
  73. IN PLARGE_INTEGER  ByteOffset  OPTIONAL,
  74. IN PULONG  Key  OPTIONAL);
  75. typedef NTSTATUS (__stdcall *ZWCLOSE)(
  76. IN HANDLE  Handle);
  77. int main()
  78. {
  79. HINSTANCE hNtDll;
  80. ZWDELETEFILE ZwDeleteFile;
  81. RTLINITUNICODESTRING RtlInitUnicodeString;
  82. ZWCREATEFILE ZwCreateFile;
  83. ZWWRITEFILE ZwWriteFile;
  84. ZWCLOSE ZwClose;
  85. hNtDll = LoadLibrary ("NTDLL");
  86. if (!hNtDll)
  87. return 0;
  88. ZwDeleteFile = (ZWDELETEFILE)GetProcAddress (hNtDll,"ZwDeleteFile");
  89. RtlInitUnicodeString = (RTLINITUNICODESTRING)GetProcAddress (hNtDll,"RtlInitUnicodeString");
  90. ZwCreateFile = (ZWCREATEFILE)GetProcAddress (hNtDll,"ZwCreateFile");
  91. ZwWriteFile = (ZWWRITEFILE)GetProcAddress (hNtDll,"ZwWriteFile");
  92. ZwClose = (ZWCLOSE)GetProcAddress (hNtDll,"ZwClose");
  93. UNICODE_STRING ObjectName;
  94. RtlInitUnicodeString(&ObjectName,L"//??//C://ForZwFileTest.txt");//記得這裏是要有//??//在前面的,DDK說的.
  95. OBJECT_ATTRIBUTES ObjectAttributes = {
  96. sizeof(OBJECT_ATTRIBUTES),          // Length
  97. NULL,                               // RootDirectory
  98. &ObjectName,                        // ObjectName
  99. OBJ_CASE_INSENSITIVE,               // Attributes
  100. 0,                                  // SecurityDescriptor
  101. NULL,                               // SecurityQualityOfService
  102. };
  103. HANDLE hFile;
  104. PVOID content = "ForZwFileTest";
  105. IO_STATUS_BLOCK IoStatusBlock;
  106. ZwCreateFile(&hFile,
  107. GENERIC_WRITE|SYNCHRONIZE|GENERIC_READ,
  108. &ObjectAttributes,
  109. &IoStatusBlock,
  110. 0,
  111. FILE_ATTRIBUTE_NORMAL,
  112. FILE_SHARE_DELETE,
  113. FILE_OPEN_IF,
  114. FILE_SYNCHRONOUS_IO_NONALERT,
  115. NULL,
  116. 0);
  117. ZwWriteFile(hFile, 0, 0, 0, &IoStatusBlock, content, 12, NULL, NULL);
  118. ZwClose(hFile);
  119. //  ZwDeleteFile(&ObjectAttributes);
  120. FreeLibrary (hNtDll);
  121. return 0;
  122. }

转自:http://blog.csdn.net/cooblily/archive/2007/10/27/1848037.aspx

关于在WIN32调用一些Zw系列的文件操作函数的更多相关文章

  1. python递归、collections系列以及文件操作进阶

    global log 127.0.0.1 local2 daemon maxconn log 127.0.0.1 local2 info defaults log global mode http t ...

  2. Python系列之文件操作、冒泡算法、装饰器、及递归

    文件处理 python对文件进行读写操作的方法与具体步骤,包括打开文件.读取内容.写入文件.文件中的内容定位.及关闭文件释放资源等 open().file(),这个两函数提供了初始化输入\输出(I\O ...

  3. Python学习系列之文件操作

    Pyhton文件打开方式 with= open('文件路径','打开模式') as f:#PS:python3提供了with语句来帮我们自动调用close方法,所以说无论打开文件是否出错都能自动正确的 ...

  4. 第6章 Overlapped I/O, 在你身后变戏法 ---Win32 文件操作函数 -2

    Win32 之中有三个基本的函数用来执行 I/O,它们是:        i CreateFile()        i ReadFile()        i WriteFile()    没有另外 ...

  5. Python系列-python文件操作

    原链接:https://blog.csdn.net/m0_37745438/article/details/79573414 python提供了一系列方法来对文件进行读取.写入等操作 一.打开文件的方 ...

  6. 《zw版·delphi与halcon系列原创教程》zw版_THOperatorSetX控件函数列表 v11中文增强版

    <zw版·delphi与halcon系列原创教程>zw版_THOperatorSetX控件函数列表v11中文增强版 Halcon虽然庞大,光HALCONXLib_TLB.pas文件,源码就 ...

  7. 《zw版·delphi与halcon系列原创教程》zw版_THImagex控件函数列表

    <zw版·delphi与halcon系列原创教程>zw版_THImagex控件函数列表 Halcon虽然庞大,光HALCONXLib_TLB.pas文件,源码就要7w多行,但核心控件就是两 ...

  8. zw量化交易·实盘操作·系列培训班

    参见: <zw量化交易·实盘操作·系列培训班> http://blog.sina.com.cn/s/blog_7100d4220102w0q5.html

  9. vs2010调用matlab2011下的.m文件

    很幸运在网上找到了采用引擎的方法,用vs2009调用matlab2008下的.m文件:但个人的环境是vs2010+matlab2011;想着二者差不多,故将s2010调用matlab2008拿来试试: ...

随机推荐

  1. (转)HttpHandler与HttpModule的理解与应用

    神秘的HttpHandler与HttpModule 大学时候我是从拖控件开始学习 asp.net的,对.net的很多类库对象都不是很了解.所以看到大家写一些个性的asp.net名词,就感觉asp.ne ...

  2. 通过修改ajaxFileUpload.js实现多图片动态上传并实现预览

    参考:http://smotive.iteye.com/blog/1903606 大部分我也是根据他的方法修改的,我也要根据name实现动态的多文件上传功能,但是有个问题使我一直无法实现多文件上传. ...

  3. 周末充电之WPF(一).初试牛刀

    追的剧已经赶上更新的速度了,突然觉得一下子就闲了.趁着这点时间,刚好学点 WPF .看到这边,好多人估计得感叹技术宅约等于单身狗,哈哈.好了,赶紧进入学习状态. 关注 WPF 或者说对它感兴趣其实多半 ...

  4. 下载和安装cocoaPods

    ios中一些三方的库用的cocoaPods管理.管理三方库非常的方便 简单说一下安装步骤 1.sudo gem install cocoapods2.gem sources --remove http ...

  5. vim 自動化配置

    Vim是Linux系統上常用的編輯器/Text Editor.不過很多人由於不瞭解如何配置,增加了很多煩惱. 今天介紹一個自動化的配置spf13,直接下載製作好的配置並進行自動設置. 1.官方的安裝步 ...

  6. php static 关键字在 函数中的用法

    至于在类中声明为 static 的属性和方法,这里不描述php中的变量作用范围的另一个重要特性就是静态变量(static 变量).静态变量仅在局部函数域中存在且只被初始化一次,当程序执行离开此作用域时 ...

  7. 在Apache下开启SSI配置支持include shtml html和快速配置服务器

    作为前端开发,使用Apache快速搭建服务器极为方便. 1.找到apach安装目录,找到conf目录下 的httpd.conf 使用SSI(Server Side Include)的html文件扩展名 ...

  8. sql日期函数

    1.sql常用日期函数 当我们在进行数据处理的时候,常常需要用到日期函数的计算,最难的任务恐怕是确保所插入的日期的格式,与数据库中日期列的格式相匹配.只要数据包含的只是日期部分,运行查询就不会出问题. ...

  9. php异步请求(可以做伪线程)

    $fp = fsockopen("www.baidu.com", 80, $errno, $errstr, 30); stream_set_blocking($fp,0);     ...

  10. 基于jquery实现的文字淡入淡出效果

    这篇文章介绍了jquery实现的文字淡入淡出效果实例,有需要的朋友可以参考一下 复制代码代码如下: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1 ...