首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 嵌入开发 > 驱动开发 >

关于AddDevice和IRP_MJ_READ的有关问题

2012-02-24 
关于AddDevice和IRP_MJ_READ的问题问题背景:修改diskperf,开发磁盘过滤驱动,想要拦截IRP_MJ_READ问题现象:

关于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);


不知是否有用.

热点排行