sy10302
驱动牛犊
驱动牛犊
  • 注册日期2003-03-21
  • 最后登录2009-04-07
  • 粉丝0
  • 关注0
  • 积分48分
  • 威望8点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
阅读:3907回复:4

如何拦截 IOCTL_DISK_GET_DRIVE_LAYOUT_EX 的返回值?

楼主#
更多 发布于:2004-03-24 09:51
我写了一个磁盘的 上层过滤驱动程序, 主要拦截IOCTL_DISK_GET_DRIVE_LAYOUT_EX, 但是上层过滤驱动程序仅仅只能得到应用层应用程序发出的DeviceIoControl,那时Irp->AssociatedIrp.SystemBuffer里面根本还没有填值, 我现在要修改里面的值, 上层过滤驱动程序不知道能不能做到, 我将它加载到
LowerFilters, 但那时IOCTL_DISK_GET_DRIVE_LAYOUT_EX已处理完了?

IOCTL_DISK_GET_DRIVE_LAYOUT_EX

The IOCTL_DISK_GET_DRIVE_LAYOUT_EX control code retrieves information about the number of partitions on a disk and the features of each partition.

To perform this operation, call the DeviceIoControl function with the following parameters.


BOOL DeviceIoControl(
  (HANDLE) hDevice,               // handle to device
  IOCTL_DISK_GET_DRIVE_LAYOUT_EX, // dwIoControlCode
  NULL,                           // lpInBuffer
  0,                              // nInBufferSize
  (LPVOID) lpOutBuffer,           // output buffer
  (DWORD) nOutBufferSize,         // size of output buffer
  (LPDWORD) lpBytesReturned,      // number of bytes returned
  (LPOVERLAPPED) lpOverlapped     // OVERLAPPED structure
);
seaquester
驱动大牛
驱动大牛
  • 注册日期2002-05-22
  • 最后登录2016-06-16
  • 粉丝0
  • 关注0
  • 积分500分
  • 威望115点
  • 贡献值0点
  • 好评度107点
  • 原创分0分
  • 专家分52分
沙发#
发布于:2004-03-24 17:49
我写了一个磁盘的 上层过滤驱动程序, 主要拦截IOCTL_DISK_GET_DRIVE_LAYOUT_EX, 但是上层过滤驱动程序仅仅只能得到应用层应用程序发出的DeviceIoControl,那时Irp->AssociatedIrp.SystemBuffer里面根本还没有填值, 我现在要修改里面的值, 上层过滤驱动程序不知道能不能做到, 我将它加载到
LowerFilters, 但那时IOCTL_DISK_GET_DRIVE_LAYOUT_EX已处理完了?

IOCTL_DISK_GET_DRIVE_LAYOUT_EX

The IOCTL_DISK_GET_DRIVE_LAYOUT_EX control code retrieves information about the number of partitions on a disk and the features of each partition.

To perform this operation, call the DeviceIoControl function with the following parameters.


BOOL DeviceIoControl(
  (HANDLE) hDevice,               // handle to device
  IOCTL_DISK_GET_DRIVE_LAYOUT_EX, // dwIoControlCode
  NULL,                           // lpInBuffer
  0,                              // nInBufferSize
  (LPVOID) lpOutBuffer,           // output buffer
  (DWORD) nOutBufferSize,         // size of output buffer
  (LPDWORD) lpBytesReturned,      // number of bytes returned
  (LPOVERLAPPED) lpOverlapped     // OVERLAPPED structure
);
 



作一个上层过滤驱动程序拦截IOCTL_DISK_GET_DRIVE_LAYOUT_EX,然后在调用IoCallDriver将IRP传递到下一层之前调用IoSetCompletionRoutine安装一个完成例程。
八风舞遥翩,九野弄清音。 鸣高常向月,善舞不迎人。
sy10302
驱动牛犊
驱动牛犊
  • 注册日期2003-03-21
  • 最后登录2009-04-07
  • 粉丝0
  • 关注0
  • 积分48分
  • 威望8点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2004-03-24 18:56
现在的问题是, 我想修改IOCTL_DISK_GET_DRIVE_LAYOUT_EX里面得到的值, 但这时候上层过滤驱动程序根本得不到返回值,IRP处理完才有
返回?
seaquester
驱动大牛
驱动大牛
  • 注册日期2002-05-22
  • 最后登录2016-06-16
  • 粉丝0
  • 关注0
  • 积分500分
  • 威望115点
  • 贡献值0点
  • 好评度107点
  • 原创分0分
  • 专家分52分
地板#
发布于:2004-03-25 08:36
现在的问题是, 我想修改IOCTL_DISK_GET_DRIVE_LAYOUT_EX里面得到的值, 但这时候上层过滤驱动程序根本得不到返回值,IRP处理完才有
返回?


所以才要安装一个完成例程呀,下层驱动在调用IoCompleteRequest完成IRP的时候,你的完成例程就会被调用……
八风舞遥翩,九野弄清音。 鸣高常向月,善舞不迎人。
sy10302
驱动牛犊
驱动牛犊
  • 注册日期2003-03-21
  • 最后登录2009-04-07
  • 粉丝0
  • 关注0
  • 积分48分
  • 威望8点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2004-03-27 16:14
谢了,谢谢!
游客

返回顶部