阅读:1211回复:1
想不懂一个问题,请大家帮忙解答一下
2、 直接输入缓冲输出I/O(METHOD_IN_DIRECT)
I/O管理器首先检查调用者输入缓冲区的可访问性,并在物理内存中将其锁定。然后为该输入缓冲区创建一个MDL,并把指定该MDL的指针存放到IRP的MdlAddress域中。同时,I/O管理器还在非份页池中分配一输出缓冲区,并把这个缓冲区的地址存放在IRP的AssociatedIrp.SystemBuffer域中,并把IRP的UserBuffer域设置成调用者输出缓冲区的用户空间地址。当驱动程序完成IOCTL请求时,I/O管理器将非份页缓冲区中的数据拷贝到调用者的输出缓冲区。 这句话,我的理解是,我的InputBuffer被IO管理器锁定,并创建出了一个MDL,存于IRP的MdlAddress中. 但是,总是从 inputBuffer = MmGetSystemAddressForMdlSafe(Irp->MdlAddress,NormalPagePriority);得到的是OutputBuffer的地址. 我在fdo->Flag里已经设定成为直接IO,并且在IOCTL里也设定为METHOD_IN_DIRECT. 但是,这个问题在WriteFile例程里却不存在. 请各位大虾帮忙看看.谢谢 |
|
沙发#
发布于:2007-12-24 11:01
郁闷,都挂了三天了,还没有人回答.
|
|