浅谈 “驱动中的文件操作”
2010-02-22 15:49
288 查看
对于文件操作:
我们的步骤应该是
1:---------------打开我们指定的文件(大部分是通过文件名的得到这个文件的操作句柄),可以使用 ZwOpenFile, ZwCreateFile....
当然,创建只能用第二个。。。
这是一个打开已知文件的例子:
NTSTATUS status;
OBJECT_ATTRIBUTES oa;
IO_STATUS_BLOCK iostatus;
HANDLE hfile; // the output from this process
PUNICODE_STRING pathname; // you've been given this
InitializeObjectAttributes(&oa, pathname, OBJ_CASE_INSENSITIVE, NULL, NULL);
status = ZwCreateFile(&hfile,
GENERIC_READ,
&oa,
&iostatus,
NULL,
0,
FILE_SHARE_READ,
FILE_OPEN,
FILE_SYNCHRONOUS_IO_NONALERT,
NULL,
0);
创建或重写文件
为了创建一个新文件,或打开一个已存在文件并截为 0 长度,用下面方式调用 ZwCreateFile 函数:
status = ZwCreateFile(&hfile,
GENERIC_WRITE,
&oa,
&iostatus,
NULL,
FILE_ATTRIBUTE_NORMAL,
0,
FILE_OVERWRITE_IF,
FILE_SYNCHRONOUS_IO_NONALERT,
NULL,
0);
2:---------------拿到我们想要的文件句柄后,我们将要对这个文件进行处理了,read 还是 write ,wdk 给我们提供了ZwReadFile 和
ZwWriteFile 这两个函数
读写的例子:
PVOID buffer;
ULONG bufsize;
status = ZwReadFile(hfile, NULL, NULL, NULL, &iostatus, buffer, bufsize, NULL, NULL);
status = ZwWriteFile(hfile, NULL, NULL, NULL, &iostatus, buffer, bufsize, NULL, NULL);
3:如果要对整个文件的内容进行读取:
那么我们应该首先知道这个文件的大小,然后在指定要读取这个文件的大小。。。
获取整个文件的大小:
FILE_STANDARD_INFORMATION si;
ZwQueryInformationFile(hfile, &iostatus, &si, sizeof(si), FileStandardInformation);
ULONG length = si.EndOfFile.LowPart;
4:当操作完后,我们应该关闭文件的句柄,不然,下次不能对这个文件进行其他的操作了。。。
我们的步骤应该是
1:---------------打开我们指定的文件(大部分是通过文件名的得到这个文件的操作句柄),可以使用 ZwOpenFile, ZwCreateFile....
当然,创建只能用第二个。。。
这是一个打开已知文件的例子:
NTSTATUS status;
OBJECT_ATTRIBUTES oa;
IO_STATUS_BLOCK iostatus;
HANDLE hfile; // the output from this process
PUNICODE_STRING pathname; // you've been given this
InitializeObjectAttributes(&oa, pathname, OBJ_CASE_INSENSITIVE, NULL, NULL);
status = ZwCreateFile(&hfile,
GENERIC_READ,
&oa,
&iostatus,
NULL,
0,
FILE_SHARE_READ,
FILE_OPEN,
FILE_SYNCHRONOUS_IO_NONALERT,
NULL,
0);
创建或重写文件
为了创建一个新文件,或打开一个已存在文件并截为 0 长度,用下面方式调用 ZwCreateFile 函数:
status = ZwCreateFile(&hfile,
GENERIC_WRITE,
&oa,
&iostatus,
NULL,
FILE_ATTRIBUTE_NORMAL,
0,
FILE_OVERWRITE_IF,
FILE_SYNCHRONOUS_IO_NONALERT,
NULL,
0);
2:---------------拿到我们想要的文件句柄后,我们将要对这个文件进行处理了,read 还是 write ,wdk 给我们提供了ZwReadFile 和
ZwWriteFile 这两个函数
读写的例子:
PVOID buffer;
ULONG bufsize;
status = ZwReadFile(hfile, NULL, NULL, NULL, &iostatus, buffer, bufsize, NULL, NULL);
status = ZwWriteFile(hfile, NULL, NULL, NULL, &iostatus, buffer, bufsize, NULL, NULL);
3:如果要对整个文件的内容进行读取:
那么我们应该首先知道这个文件的大小,然后在指定要读取这个文件的大小。。。
获取整个文件的大小:
FILE_STANDARD_INFORMATION si;
ZwQueryInformationFile(hfile, &iostatus, &si, sizeof(si), FileStandardInformation);
ULONG length = si.EndOfFile.LowPart;
4:当操作完后,我们应该关闭文件的句柄,不然,下次不能对这个文件进行其他的操作了。。。
相关文章推荐
- 浅谈 “驱动中的文件操作”
- Qt浅谈之十四:文件操作
- 浅谈Linux文件操作
- 浅谈iOS的文件操作
- windows.vbs.FSO.文件操作信息.磁盘驱动信息.文件夹操作信息全集
- 浅谈无缓存I/O操作和标准I/O文件操作区别
- 内核驱动的文件操作
- 浅谈无缓存I/O操作和标准I/O文件操作区别 (转载)
- 文件操作(驱动接口)
- Linux 内核驱动里对文件的操作
- 浅谈应用dom4j操作xml文件
- 驱动文件和注册表操作初始化路径字符串问题
- 驱动文件操作学习与实践
- 浅谈无缓存I/O操作和标准I/O文件操作区别
- 浅谈无缓存I/O操作和标准I/O文件操作区别(转)
- 数据驱动---Properties文件操作
- 驱动开发学习----文件操作
- linux驱动学习--第七天:第五章 Linux 文件系统与设备文件系统 之 linux文件操作
- Windows内核驱动中操作文件
- 浅谈无缓存I/O操作和标准I/O文件操作区别