浅谈 “驱动中的文件操作”

对于文件操作:

我们的步骤应该是

 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:当操作完后,我们应该关闭文件的句柄,不然,下次不能对这个文件进行其他的操作了。。。

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值