阅读:2408回复:6
IoCreateFile?ObOpenObjectByName是否能避免重入?帖里详细说明,请大家帮我.感激!
首先,小弟先明确一下重入的概念,希望各位大牛能够帮我指正
我的理解是,当试图在IRP_MJ_CREATE消息的处理例程里再次打开文件时,会导致我们的例程接收到这个文件打开的消息,如此循环则发生重入了. 这是我的理解,不知道是否正确 关于向下层Driver发送Irp消息来避免重入的理解是: 此时,我们可以自己构造一个MJ_Create Irp然后传递到下层驱动.之所以这个IRP不会发生重入的原因是该IRP不再经过我们的Filter了. 关于使用ObOpenObjectByName是否能避免重入?. 首先它是通过一个OPEN_PACKET来打开文件的.在Filter中,我们自定义一个OPEN_PACKET结构并且填充它,通过ObOpenObjectByName来打开,以下是NT源码中打开文件时的参数传递: ObOpenObjectByName会将参数传递到ObLookUpObjectName函数,接着该函数会传递到lopParseDevice.lopParseDevice会正式开始组装Irp结构,并开始传递.这几天分析NT4Src很累.所以直接请问各位大牛,lopParseDevice中的IoCallDriver也就是Irp是传递到下层文件系统驱动还是传递后这个Irp还是会被我们自己的Filter捕获?简单点说就是lopParseDevice发送的IRP是否会被我们的Filter捕获? 我估计可能仍然会重入,因为我曾经尝试过IoCreateFile时重入了.WDK也明确指出IoCreateFile的MJ_CREATE消息会被捕捉到.而IoCreateFile函数所做的也就是填充一个OPEN_PACKET结构交给ObOpenObjectByName处理,接下来的工作上面说了.所以我在想,我使用ObOpenObjectByName打开可能会重入,不知道这个想法对吗? 解决办法的可行度: 在lopParseDevice中让IoCallDriver发送到下层设备. 这个解决办法可否解决问题, 请各位大牛帮我,谢谢.再次简洁的说明下问题. 第一:在MJ_CREATE例程中使用ObOpenObjectByName打开文件是否会重入? 第二:lopParseDevice函数将其构造的IRP发到过滤驱动的下层设备还是依然会经过过滤驱动? 第三:在lopParseDevice中让IoCallDriver发送到下层设备.这个方案是否可行,我所做的也是改变IoCallDriver的第一个参数而已. 第四:抄袭lopParseDevice中构造IRP的方法发送到下层设备要注意什么吗? !谢谢! 问题太多,不好意思.第一,第二个问题是最重要的.在线等 |
|
沙发#
发布于:2007-01-30 01:03
"在MJ_CREATE例程中使用ObOpenObjectByName打开文件是否会重入?"
I believe so since stack construction is done in IO Manager not Object Manager. Why not use the function IoCreateFileSpecifyDeviceObjectHint() ? |
|
板凳#
发布于:2007-01-30 03:19
IoCreateFileSpecifyDeviceObjectHint好像这个函数只支持xp以上的系统
|
|
地板#
发布于:2007-01-30 23:28
Re:IoCreateFile?ObOpenObjectByName是否能避免重入?帖里详
IoCreateFileSpecifyDeviceObjectHint is provided in W2K security update.Or you have to develop your own Shadow Device. This has been discussed in this forum before. |
|
地下室#
发布于:2007-01-31 09:11
自己创建一个内核线程,使用该线程来执行任何其他额外的操作(这样做的另一个好处是可以避开高中断级别的IRQL),在任何例程中通过检测线程ID来识别是否为自己的内核线程执行的操作以避免重入产生的问题;再有就是在一些参数中加入特需的标识来进行检测,需要注意的是其他用户也可能使用该标识
|
|
|
5楼#
发布于:2007-01-31 12:45
liang.xiao .我有用过这种方法,但是同步主线程好象有问题
|
|
6楼#
发布于:2007-02-01 01:11
To queue a context sensitive MJ_CREATE IRP in a system thread may have security issue.
Since evey directory and file must be opened before use, this system thead may become bottleneck of whole file system. |
|