阅读:1897回复:9
一个关于ZwReadFile的问题
我在驱动中调用ZwCreateFile打开一个磁盘上的文件,然后start一个系统线程,此线程无限循环地KeWaitForSingleObject。当我想从该文件中读取内容的时候就会KeSetEvent触发线程调用ZwReadFile(该文件的句柄已经通过线程参数传递进来了)。
按道理讲应该是没有问题的,可我调用后老是返回STATUS_INVALID_DEVICE_REQUEST(0xc0000010) 为什么?希望高手指点。谢谢! |
|
|
沙发#
发布于:2002-11-07 18:48
估计跟是否同步读有关系。
|
|
板凳#
发布于:2002-11-08 08:43
检查调用ZwCreateFile和ZwReadFile是否在同一个进程里。
|
|
地板#
发布于:2002-11-08 08:56
最好把你的代码贴一部分出来才好判断
|
|
|
地下室#
发布于:2002-11-08 09:19
To:luxs200
我的ZwCreateFile和ZwReadFile是在同样的context下面运行的。不然错误码不会是这个 To:fracker 你说的问题我没有考虑过。同步?肯定只有我一个去访问的,可否说的详细写?谢谢 To:seaquester 代码非常简单,但是因为启用了线程,所以怎么好贴。我写个伪代码 吧: //打开文件处 ZwCreateFile(....); PsCreateSystemThread(...);//Context里面有文件句柄 …… //需要读文件处 KeSetEvent(...); //线程处理函数 while(1) { KeWaitForSingleObject(...); if(request == read) ZwReadFile(...); //就是这里出错的 …… } } |
|
|
5楼#
发布于:2002-11-08 09:20
如果ZwCreateFile是在DriverEntry里调用的,那应该是没有问题,因为句柄位于系统进程空间。如果ZwCreateFile是通过IoControl打开可能会有问题,因为IoControl是当前用户进程空间,而你创建的进程位于系统进程空间,所以句柄是无效的。我是这么猜测,不敢肯定,你自己试验一下。
|
|
6楼#
发布于:2002-11-08 09:37
你说得对,我的确是在IoControl里面打开的文件
那应该怎么办?请指教 |
|
|
7楼#
发布于:2002-11-08 09:51
想通了,我把ZwCreateFile也放在我的线程里不就得了。现在开始改
谢谢ysy! |
|
|
8楼#
发布于:2002-11-08 10:28
呵呵,不客气,等你调通了送点分就行了!
|
|
9楼#
发布于:2002-11-15 15:55
不好意思,居然忘了给分
现在补上 |
|
|