JungleBoy
驱动牛犊
驱动牛犊
  • 注册日期2002-10-17
  • 最后登录2009-09-07
  • 粉丝0
  • 关注0
  • 积分1分
  • 威望1点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1897回复:9

一个关于ZwReadFile的问题

楼主#
更多 发布于:2002-11-07 17:04
我在驱动中调用ZwCreateFile打开一个磁盘上的文件,然后start一个系统线程,此线程无限循环地KeWaitForSingleObject。当我想从该文件中读取内容的时候就会KeSetEvent触发线程调用ZwReadFile(该文件的句柄已经通过线程参数传递进来了)。
按道理讲应该是没有问题的,可我调用后老是返回STATUS_INVALID_DEVICE_REQUEST(0xc0000010)
为什么?希望高手指点。谢谢!
I'm upgrading……
fracker
驱动太牛
驱动太牛
  • 注册日期2001-06-28
  • 最后登录2021-03-30
  • 粉丝0
  • 关注0
  • 积分219分
  • 威望81点
  • 贡献值0点
  • 好评度23点
  • 原创分0分
  • 专家分1分
  • 社区居民
沙发#
发布于:2002-11-07 18:48
估计跟是否同步读有关系。
luxs200
驱动牛犊
驱动牛犊
  • 注册日期2001-07-23
  • 最后登录2015-03-31
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2002-11-08 08:43
检查调用ZwCreateFile和ZwReadFile是否在同一个进程里。
seaquester
驱动大牛
驱动大牛
  • 注册日期2002-05-22
  • 最后登录2016-06-16
  • 粉丝0
  • 关注0
  • 积分500分
  • 威望115点
  • 贡献值0点
  • 好评度107点
  • 原创分0分
  • 专家分52分
地板#
发布于:2002-11-08 08:56
最好把你的代码贴一部分出来才好判断
八风舞遥翩,九野弄清音。 鸣高常向月,善舞不迎人。
JungleBoy
驱动牛犊
驱动牛犊
  • 注册日期2002-10-17
  • 最后登录2009-09-07
  • 粉丝0
  • 关注0
  • 积分1分
  • 威望1点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于: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(...);            //就是这里出错的
……
}
}
I'm upgrading……
ysy
ysy
驱动中牛
驱动中牛
  • 注册日期2002-02-18
  • 最后登录2008-08-25
  • 粉丝0
  • 关注0
  • 积分201分
  • 威望29点
  • 贡献值0点
  • 好评度19点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2002-11-08 09:20
如果ZwCreateFile是在DriverEntry里调用的,那应该是没有问题,因为句柄位于系统进程空间。如果ZwCreateFile是通过IoControl打开可能会有问题,因为IoControl是当前用户进程空间,而你创建的进程位于系统进程空间,所以句柄是无效的。我是这么猜测,不敢肯定,你自己试验一下。
JungleBoy
驱动牛犊
驱动牛犊
  • 注册日期2002-10-17
  • 最后登录2009-09-07
  • 粉丝0
  • 关注0
  • 积分1分
  • 威望1点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2002-11-08 09:37
你说得对,我的确是在IoControl里面打开的文件
那应该怎么办?请指教
I'm upgrading……
JungleBoy
驱动牛犊
驱动牛犊
  • 注册日期2002-10-17
  • 最后登录2009-09-07
  • 粉丝0
  • 关注0
  • 积分1分
  • 威望1点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2002-11-08 09:51
想通了,我把ZwCreateFile也放在我的线程里不就得了。现在开始改
谢谢ysy!
I'm upgrading……
ysy
ysy
驱动中牛
驱动中牛
  • 注册日期2002-02-18
  • 最后登录2008-08-25
  • 粉丝0
  • 关注0
  • 积分201分
  • 威望29点
  • 贡献值0点
  • 好评度19点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2002-11-08 10:28
呵呵,不客气,等你调通了送点分就行了!
JungleBoy
驱动牛犊
驱动牛犊
  • 注册日期2002-10-17
  • 最后登录2009-09-07
  • 粉丝0
  • 关注0
  • 积分1分
  • 威望1点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
9楼#
发布于:2002-11-15 15:55
不好意思,居然忘了给分
现在补上
I'm upgrading……
游客

返回顶部