问题背景:修改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理论上讲是将过滤驱动附加到物理设备上,但该传入物理设备是什么?如何指定过滤某种或某个物理设备?
------解决方案--------------------
不懂,帮顶
------解决方案--------------------
windows api里磁盘操作函数
HANDLE diskh=CreateFile( "\\\\.\\PhysicalDriver0 ",
GENERIC_READ,
FILE_SHARE_READ,
NULL,
OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL,
NULL);
DWORD ret;
char buf[100];
DeviceIoControl(diskh,
IOCTL_DISK_PERFORMANCE,
NULL,
0,
buf,
100,
&ret,
(LPOVERLAPPED)NULL);
不知是否有用.