驱动文件操作学习与实践

http://blog.csdn.net/syf442/article/details/4562976

看了这篇文章,按照其讲述和代码,自己也再vs2010上编写了一个内核读写文件操作的小驱动。在这个过程中学习到其中用到的几个内核函数的用法,也发现了这个小教程中的一点小错误。花了2个晚上的时间调试,虽然很费时间,windows的函数都很复杂,调试起来又很费劲。所以记录一下,以后遇到类似问题也可以参考一下。

这个小驱动大概的流程是:

建立一个线程(用到PsCreateSystemThread函数) =》线程中定义了一个此线程首先调用的函数,自己写好这个函数,作为建立文件、写文件的入口函数

=》在此函数中创建新文件或者打开文件(参数FILE_OVERWRITE_IF)(都是用ZwCreateFile函数,每个参数很重要,需要时要仔细参考MSDN,好好分析。它关系到后面可以对这个文件所进行操作的权限)

KdPrint(("status:%08x\n",status));
在调试中可以加上这句,打印ZwCreateFile函数的返回值。返回值是用16进制表示的,其对应的含义(宏)可以参照

http://wenku.baidu.com/view/06a8444be45c3b3567ec8bcc.html通过英文含义可以了解错误所在。

=》建立或者打开了文件,要调用ZwWriteFile函数,这个函数相比上一个函数比较简单

=》最后掉用ZwClose函数关闭文件句柄

=》之后回到EntryDriver函数可以按照正常情况写个unload函数

这就是简单的文件操作流程

最后说一下上面那个帖子的错误:

第一个是它换行符写错了。。比较低级“\n”写成了“/n”。应该是回车上面的那个反斜线

第二个也是这个反斜线的问题,这个问题会使驱动不能正常运行,到不至于蓝屏。就是顶一文件路径的时候

	UNICODE_STRING ufile_name = RTL_CONSTANT_STRING(L"\\??\\C:\\test.txt");
这是正确的,注意斜线别写反了方向,参考的blog中就写反了。导致我调试了好久都不行,总是报错:STATUS_ACCESS_DENIED出现这个错误信息。

一直都没注意到这个斜线的问题,以后这个问题应该是记住了,自己写的时候肯定不会再出这种错误了。


再加点用到的windbg命令,这次调试主要用到了以下几种命令和视图:

1. r @esi  (r @寄存器名字) 返回结果是这个寄存器目前保存的值

2.lm命令,一个比较基础的命令。可以返回现在运行的符号链接库,包括现在正在调试的驱动的符号链接,pdb。

3.watch视图,以前用eclipse的watch视图一样,可以看变量的类型和值,还有local视图等等

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值