当前位置: 代码迷 >> 驱动开发 >> 关于AddDevice和IRP_MJ_READ的有关问题
  详细解决方案

关于AddDevice和IRP_MJ_READ的有关问题

热度:67   发布时间:2016-04-28 11:12:12.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理论上讲是将过滤驱动附加到物理设备上,但该传入物理设备是什么?如何指定过滤某种或某个物理设备?

------解决方案--------------------
不懂,帮顶
------解决方案--------------------
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);


不知是否有用.
  相关解决方案