lyjyjj
驱动牛犊
驱动牛犊
  • 注册日期2003-10-24
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1176回复:2

请问DO_DIRECT_IO问题

楼主#
更多 发布于:2004-03-22 14:35
看一个访问pci读写的例子,是用DS生成框架后修改的。访问方式选择的是DO_DIRECT_IO。
在VOID PCI9054Device::Serial_PCI9054_IOCTL_800_ReadBase0_Handler(KIrp I)
{  ...
   PULONG  pOutBuffer= (PULONG) Mem.MapToSystemSpace();  //输出缓冲区
}    这里应是DO_DIRECT_IO的体现吧。

但接下来的
VOID PCI9054Device::Serial_PCI9054_IOCTL_801_WriteBase0_Handler(KIrp I)
{  ...
   PULONG  pInBuffer = (PULONG) I.IoctlBuffer();     //输入缓冲区
}  
这个I.IoctlBuffer应是返回AssociatedIrp.SystemBuffer的值,而AssociatedIrp.SystemBuffer是选择DO_BUFFERED_IO才创建的缓冲区。

请问是我理解有问题,还是这段程序别有其他的用法而我没看懂呢?谢谢高手指点
wowocock
VIP专家组
VIP专家组
  • 注册日期2002-04-08
  • 最后登录2016-01-09
  • 粉丝16
  • 关注2
  • 积分601分
  • 威望1651点
  • 贡献值1点
  • 好评度1227点
  • 原创分1分
  • 专家分0分
沙发#
发布于:2004-03-22 17:14
为什么你喜欢用C++来写驱动呢????
花开了,然后又会凋零,星星是璀璨的,可那光芒也会消失。在这样 一瞬间,人降生了,笑者,哭着,战斗,伤害,喜悦,悲伤憎恶,爱。一切都只是刹那间的邂逅,而最后都要归入死亡的永眠
John001
驱动牛犊
驱动牛犊
  • 注册日期2003-10-01
  • 最后登录2004-08-16
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2004-03-22 17:42
这个I.IoctlBuffer的确是由AssociatedIrp.SystemBuffer返回的。因为你选择的是DO_DIRECT_IO方式,所以输入缓冲区对应的是IoctlBuffer方式。如果你选择的是DO_BUFFER_IO方式的话,输入和输出都是用IoctlBuffer方式。
游客

返回顶部