阅读:1538回复:2
sfilter的DriverEntry例程中创建的那个控制设备对象具体有什么作用呢?
我看了在filemon的DriverEntry例程中创建的设备对象类型是filemon自定义的,而sfilter的DriverEntry例程中创建的设备对象类型是FILE_DEVICE_DISK_FILE_SYSTEM。我把sfilter的DriverEntry例程中创建的设备对象改为自定义类型,编译后sfilter仍可以正常运行。
然后我就进一步试验,我把sfilter的DriverEntry例程中创建控制设备对象这部分代码注释掉,也就是说那个全局设备对象gSFilterControlDeviceObject为NULL,加载驱动后BugCheck,估计是在什么地方使用gSFilterControlDeviceObject作为参数,而此时gSFilterControlDeviceObject正好为NULL,于是在所有使用gSFilterControlDeviceObject之前加上if(gSFilterControlDeviceObject),编译并运行,一切正常。 所以我就想这个设备对象是不是主要用来跟用户程序进行交互的?不知道大家怎么认为? |
|
沙发#
发布于:2007-02-04 12:44
控制设备对象用来接受应用程序发送的控制用ioctl代码的.你不用上层控制的话,可以不用这个对象.
|
|
|
板凳#
发布于:2007-02-04 13:08
哈哈,老大这么一说我就放心了,我刚开始学习文件系统过滤驱动,光这个控制设备对象就把我看糊涂了,现在总算清楚了,谢谢!
|
|