阅读:841回复:0
关于AddDevice和IRP_MJ_READ的问题
问题背景:修改diskperf,开发磁盘过滤驱动,想要拦截IRP_MJ_READ
问题现象:读写和创建分发指向修改正常,AddDevice可以正常添加过滤驱动,PNP操作正常,也可正常卸载,但没有任何磁盘操作被拦截,IRP_MJ_READ/WRITE/CREATE的分发处理都没有被调用 问题: 1) DriverObject->MajorFunction[IRP_MJ_CREATE]= DiskCreate;//打开 DriverObject->MajorFunction[IRP_MJ_READ] = DiskRead;//读过滤 DriverObject->MajorFunction[IRP_MJ_WRITE] = DiskCacheWrite;//写过滤 为什么没有被调用?有哪些原因可以导致该现象? 2) NTSTATUS DiskAddDevice(IN PDRIVER_OBJECT DriverObject,IN PDEVICE_OBJECT PhysicalDeviceObject) {.... status = IoCreateDevice(DriverObject,//目标驱动对象 DEVICE_EXTENSION_SIZE,//设备扩展信息大小 NULL,//不详 FILE_DEVICE_DISK,//文件磁盘设备 0, FALSE, &filterDeviceObject);//获得的过滤设备对象 .... IoAttachDeviceToDeviceStack(filterDeviceObject, PhysicalDeviceObject); ....} IoCreateDevice如何创建一个过滤设备?有无详细参数说明?是选FILE_DEVICE_DISK还是FILE_DEVICE_UNKNOW? IoAttachDeviceToDeviceStack理论上讲是将过滤驱动附加到物理设备上,但该传入物理设备是什么?如何指定过滤某种或某个物理设备? |
|