ildee
驱动牛犊
驱动牛犊
  • 注册日期2003-01-16
  • 最后登录2005-01-24
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:2100回复:12

有没有办法解决重入问题???

楼主#
更多 发布于:2004-05-13 11:57
我想在IRP_MJ_CREATE里面,读取文件,调用zwcreatefile,然后,zwreadfile,调用完zwcreatefile后就会重入,怎么解决??非常着急,老大快帮帮忙!!

最新喜欢:

rhpengrhpeng
tooflat
论坛版主
论坛版主
  • 注册日期2002-07-08
  • 最后登录2014-03-11
  • 粉丝2
  • 关注0
  • 积分1007分
  • 威望551点
  • 贡献值3点
  • 好评度476点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2004-05-13 12:21
判断Irp->RequestorMode ???
if (Irp->RequestorMode == UserMode)
{
InitializeObjectAttributes(,OBJ_KERNEL_HANDLE,);
ZwCreateFile();
ZwReadFile();
ZwClose();
}
ildee
驱动牛犊
驱动牛犊
  • 注册日期2003-01-16
  • 最后登录2005-01-24
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2004-05-13 12:46
谢谢toofalt老大,我马上时时。。。
ildee
驱动牛犊
驱动牛犊
  • 注册日期2003-01-16
  • 最后登录2005-01-24
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2004-05-13 14:10
老大,搞定了,谢了。。
minsoft
驱动小牛
驱动小牛
  • 注册日期2001-07-30
  • 最后登录2007-03-06
  • 粉丝0
  • 关注0
  • 积分8分
  • 威望2点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2004-05-13 14:51
其实有一种更好的方法,在XP DDK以上有一个函数替代ZwCreate,不会重复进入本filter,而且它产生的句柄以后使用ZwRead/ZwWrite/ZwClose都不会再入进入而是直接发到下层的DeviceObject,它就是:
IoCreate......ByHint----十分抱歉,我忘了函数名全称这台电脑里又没有XP DDK/IFS Kit,对不起了各位在DDK HLP里用索引查一下就知道。它只能用于XP,不能用于2K。
少了e,就少了全部
slwqw
驱动大牛
驱动大牛
  • 注册日期2002-07-18
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分7分
  • 威望197点
  • 贡献值0点
  • 好评度147点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2004-05-13 18:05
判断Irp->RequestorMode ???
if (Irp->RequestorMode == UserMode)
{
InitializeObjectAttributes(,OBJ_KERNEL_HANDLE,);
ZwCreateFile();
ZwReadFile();
ZwClose();
}


这种方法是不可靠的,如果另外一个驱动调用ZwCreateFile()打开文件,这时候RequestMode同样是KernelMode,你怎么办?
deltali
驱动小牛
驱动小牛
  • 注册日期2002-10-25
  • 最后登录2010-07-06
  • 粉丝0
  • 关注0
  • 积分2分
  • 威望23点
  • 贡献值0点
  • 好评度11点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2004-05-13 18:11
还是自己创建irp往下传把。

实在想用zwxxx函数的话,本版以前有过非常详细的关于重入的讨论,自己搜索一下吧
我又来了,生命不息,驱动不止。
rayyang2000
管理员
管理员
  • 注册日期2001-03-23
  • 最后登录2012-09-13
  • 粉丝3
  • 关注0
  • 积分1036分
  • 威望925点
  • 贡献值3点
  • 好评度823点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2004-05-14 09:10
用shadow device object啊,osr推荐的
天天coding-debugging中----超稀饭memory dump file ======================================================== [b]Windows Device Driver Development and Consulting Service[/b] [color=blue][url]http://www.ybwork.com[/url][/color] ========================================================
ildee
驱动牛犊
驱动牛犊
  • 注册日期2003-01-16
  • 最后登录2005-01-24
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2004-05-14 09:44
请问楼上的老大,shadow device objects 是啥东东??能给点提示吗??
wowocock
VIP专家组
VIP专家组
  • 注册日期2002-04-08
  • 最后登录2016-01-09
  • 粉丝16
  • 关注2
  • 积分601分
  • 威望1651点
  • 贡献值1点
  • 好评度1227点
  • 原创分1分
  • 专家分0分
9楼#
发布于:2004-05-14 11:35
shadow好象只在XP以后有支持吧???
花开了,然后又会凋零,星星是璀璨的,可那光芒也会消失。在这样 一瞬间,人降生了,笑者,哭着,战斗,伤害,喜悦,悲伤憎恶,爱。一切都只是刹那间的邂逅,而最后都要归入死亡的永眠
tooflat
论坛版主
论坛版主
  • 注册日期2002-07-08
  • 最后登录2014-03-11
  • 粉丝2
  • 关注0
  • 积分1007分
  • 威望551点
  • 贡献值3点
  • 好评度476点
  • 原创分0分
  • 专家分0分
10楼#
发布于:2004-05-14 12:45
shadow device object有问题,导致在你之后attach的驱动不能收到mj_create
IoCreateFileSpecifyDeviceObjectHint同样会有这个问题

[编辑 -  5/14/04 by  tooflat]
tooflat
论坛版主
论坛版主
  • 注册日期2002-07-08
  • 最后登录2014-03-11
  • 粉丝2
  • 关注0
  • 积分1007分
  • 威望551点
  • 贡献值3点
  • 好评度476点
  • 原创分0分
  • 专家分0分
11楼#
发布于:2004-05-14 12:51
shadow device就是我们自己创建的一个设备(没有attach到任何设备上),比如symbol link为\"ShadowDevice\"

然后我们在mj_create(filter device的)中用\\\\.\\ShadowDevice\\...打开文件,就会把irp发送到我们的shadow device object,然后我们再把该irp下发给下面的device,这样该irp就不会发送给我们的filter device,从而避免重入,不知我理解的对不对,望大虾斧正

[编辑 -  5/14/04 by  tooflat]
rayyang2000
管理员
管理员
  • 注册日期2001-03-23
  • 最后登录2012-09-13
  • 粉丝3
  • 关注0
  • 积分1036分
  • 威望925点
  • 贡献值3点
  • 好评度823点
  • 原创分0分
  • 专家分0分
12楼#
发布于:2004-05-14 16:22
yes
天天coding-debugging中----超稀饭memory dump file ======================================================== [b]Windows Device Driver Development and Consulting Service[/b] [color=blue][url]http://www.ybwork.com[/url][/color] ========================================================
游客

返回顶部