onliner
驱动牛犊
驱动牛犊
  • 注册日期2007-03-30
  • 最后登录2007-07-11
  • 粉丝0
  • 关注0
  • 积分10分
  • 威望2点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
阅读:840回复:0

关于AddDevice和IRP_MJ_READ的问题

楼主#
更多 发布于:2007-04-09 13:03
  问题背景:修改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理论上讲是将过滤驱动附加到物理设备上,但该传入物理设备是什么?如何指定过滤某种或某个物理设备?
游客

返回顶部