阅读:2100回复:12
有没有办法解决重入问题???
我想在IRP_MJ_CREATE里面,读取文件,调用zwcreatefile,然后,zwreadfile,调用完zwcreatefile后就会重入,怎么解决??非常着急,老大快帮帮忙!!
|
|
最新喜欢:rhpeng |
沙发#
发布于:2004-05-13 12:21
判断Irp->RequestorMode ???
if (Irp->RequestorMode == UserMode) { InitializeObjectAttributes(,OBJ_KERNEL_HANDLE,); ZwCreateFile(); ZwReadFile(); ZwClose(); } |
|
板凳#
发布于:2004-05-13 12:46
谢谢toofalt老大,我马上时时。。。
|
|
地板#
发布于:2004-05-13 14:10
老大,搞定了,谢了。。
|
|
地下室#
发布于:2004-05-13 14:51
其实有一种更好的方法,在XP DDK以上有一个函数替代ZwCreate,不会重复进入本filter,而且它产生的句柄以后使用ZwRead/ZwWrite/ZwClose都不会再入进入而是直接发到下层的DeviceObject,它就是:
IoCreate......ByHint----十分抱歉,我忘了函数名全称这台电脑里又没有XP DDK/IFS Kit,对不起了各位在DDK HLP里用索引查一下就知道。它只能用于XP,不能用于2K。 |
|
|
5楼#
发布于:2004-05-13 18:05
判断Irp->RequestorMode ??? 这种方法是不可靠的,如果另外一个驱动调用ZwCreateFile()打开文件,这时候RequestMode同样是KernelMode,你怎么办? |
|
6楼#
发布于:2004-05-13 18:11
还是自己创建irp往下传把。
实在想用zwxxx函数的话,本版以前有过非常详细的关于重入的讨论,自己搜索一下吧 |
|
|
7楼#
发布于:2004-05-14 09:10
用shadow device object啊,osr推荐的
|
|
|
8楼#
发布于:2004-05-14 09:44
请问楼上的老大,shadow device objects 是啥东东??能给点提示吗??
|
|
9楼#
发布于:2004-05-14 11:35
shadow好象只在XP以后有支持吧???
|
|
|
10楼#
发布于:2004-05-14 12:45
shadow device object有问题,导致在你之后attach的驱动不能收到mj_create
IoCreateFileSpecifyDeviceObjectHint同样会有这个问题 [编辑 - 5/14/04 by tooflat] |
|
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] |
|
12楼#
发布于:2004-05-14 16:22
yes
|
|
|