sjcode
驱动牛犊
驱动牛犊
  • 注册日期2005-05-11
  • 最后登录2011-03-16
  • 粉丝0
  • 关注0
  • 积分15分
  • 威望85点
  • 贡献值0点
  • 好评度19点
  • 原创分0分
  • 专家分0分
阅读:1125回复:1

想不懂一个问题,请大家帮忙解答一下

楼主#
更多 发布于:2007-12-21 18:34
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例程里却不存在.

请各位大虾帮忙看看.谢谢
sjcode
驱动牛犊
驱动牛犊
  • 注册日期2005-05-11
  • 最后登录2011-03-16
  • 粉丝0
  • 关注0
  • 积分15分
  • 威望85点
  • 贡献值0点
  • 好评度19点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2007-12-24 11:01
郁闷,都挂了三天了,还没有人回答.
游客

返回顶部