看了在filemon的DriverEntry例程中创建的设备对象类型是filemon自定义的,而sfilter的DriverEntry例程中创建的设备对象类型是FILE_DEVICE_DISK_FILE_SYSTEM。我把sfilter的DriverEntry例程中创建的设备对象改为自定义类型,编译后sfilter仍可以正常运行。
然后我就进一步试验,我把sfilter的DriverEntry例程中创建控制设备对象这部分代码注释掉,也就是说那个全局设备对象gSFilterControlDeviceObject为NULL,加载驱动后BugCheck,估计是在什么地方使用gSFilterControlDeviceObject作为参数,而此时gSFilterControlDeviceObject正好为NULL,于是在所有使用gSFilterControlDeviceObject之前加上if(gSFilterControlDeviceObject),编译并运行,一切正常。
所以 控制设备对象用来接受应用程序发送的控制用ioctl代码的.
然后我就进一步试验,我把sfilter的DriverEntry例程中创建控制设备对象这部分代码注释掉,也就是说那个全局设备对象gSFilterControlDeviceObject为NULL,加载驱动后BugCheck,估计是在什么地方使用gSFilterControlDeviceObject作为参数,而此时gSFilterControlDeviceObject正好为NULL,于是在所有使用gSFilterControlDeviceObject之前加上if(gSFilterControlDeviceObject),编译并运行,一切正常。
所以 控制设备对象用来接受应用程序发送的控制用ioctl代码的.