阅读:1611回复:5
tooflat请进,关于你发表的HookDrive函数
在驱网里,看到你的关于SHADOW的代码,其中用的是FILEMON中的HOOKDRIVE函数名字,如下:
HookDrive( IN PDRIVER_OBJECT DriverObject, IN WCHAR DriveLetter ) 那么 1:你修改的是FILEMON么?我这里他总是不稳定,兰屏,不爽。我试试在FILEMON中加入你这段SHADOW的代码,希望能OK。 2:是将FILEMON中的这个函数加到SFILTER中么?我正在试图这么做,初步结果也是兰屏,需要继续看。 谢谢指点。 |
|
沙发#
发布于:2005-06-30 13:18
我也记不清楚了
可能我当时测试的时候是用的FileMon,不过如果要加到sfilter,需要在SfFsControlMountVolume中创建设备的时候就创建ShadowDevice,并关联起来,如果动态加载,还要在SfEnumerateFileSystemVolumes中做同样的操作 |
|
板凳#
发布于:2005-06-30 14:05
这中间其实涉及到好多个细节。
1:我是需要WIN2K,XP,2003都能运行的。 2:动态加载。 你说的“如果动态加载,还要在SfEnumerateFileSystemVolumes中做同样的操作”,我不是很明白如何才能诱发SfEnumerateFileSystemVolumes这个动作(WIN2K,XP,2003)? 静态加载的过程,倒是比较明了,通过IoRegisterFsRegistrationChange注册SfFsNotification后,会自动调用SfAttachToFileSystemDevice及相关的SfEnumerateFileSystemVolumes。 |
|
地板#
发布于:2005-06-30 14:51
静态加载的过程,倒是比较明了,通过IoRegisterFsRegistrationChange注册SfFsNotification后,会自动调用SfAttachToFileSystemDevice及相关的SfEnumerateFileSystemVolumes。 在xp后的os中,在动态加载中 调用status = IoRegisterFsRegistrationChange( DriverObject, SfFsNotification );之后,对每个激活的fs,系统调用SfFsNotification。当对所有的fs都调用SfFsNotification 后,才执行 status = IoRegisterFsRegistrationChange( DriverObject, SfFsNotification );之后 的代码的。 |
|
|
地下室#
发布于:2005-06-30 15:02
除了那2个比较例外的
|
|
|
5楼#
发布于:2005-06-30 15:24
下面是引用wywwwl于2005-06-30 14:51发表的: 非常感谢这个提示啊! 我意识到,我现在修改的FILEMON中没有打开某文件的动作,因此不存在M_CREATE的重入问题。 看来FILEMON还有其他大大的BUG呀。 |
|