阅读:3907回复:4
如何拦截 IOCTL_DISK_GET_DRIVE_LAYOUT_EX 的返回值?
我写了一个磁盘的 上层过滤驱动程序, 主要拦截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 ); |
|
沙发#
发布于:2004-03-24 17:49
我写了一个磁盘的 上层过滤驱动程序, 主要拦截IOCTL_DISK_GET_DRIVE_LAYOUT_EX, 但是上层过滤驱动程序仅仅只能得到应用层应用程序发出的DeviceIoControl,那时Irp->AssociatedIrp.SystemBuffer里面根本还没有填值, 我现在要修改里面的值, 上层过滤驱动程序不知道能不能做到, 我将它加载到 作一个上层过滤驱动程序拦截IOCTL_DISK_GET_DRIVE_LAYOUT_EX,然后在调用IoCallDriver将IRP传递到下一层之前调用IoSetCompletionRoutine安装一个完成例程。 |
|
|
板凳#
发布于:2004-03-24 18:56
现在的问题是, 我想修改IOCTL_DISK_GET_DRIVE_LAYOUT_EX里面得到的值, 但这时候上层过滤驱动程序根本得不到返回值,IRP处理完才有
返回? |
|
地板#
发布于:2004-03-25 08:36
现在的问题是, 我想修改IOCTL_DISK_GET_DRIVE_LAYOUT_EX里面得到的值, 但这时候上层过滤驱动程序根本得不到返回值,IRP处理完才有 所以才要安装一个完成例程呀,下层驱动在调用IoCompleteRequest完成IRP的时候,你的完成例程就会被调用…… |
|
|
地下室#
发布于:2004-03-27 16:14
谢了,谢谢!
|
|