阅读:1176回复:2
请问DO_DIRECT_IO问题
看一个访问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才创建的缓冲区。 请问是我理解有问题,还是这段程序别有其他的用法而我没看懂呢?谢谢高手指点 |
|
沙发#
发布于:2004-03-22 17:14
为什么你喜欢用C++来写驱动呢????
|
|
|
板凳#
发布于:2004-03-22 17:42
这个I.IoctlBuffer的确是由AssociatedIrp.SystemBuffer返回的。因为你选择的是DO_DIRECT_IO方式,所以输入缓冲区对应的是IoctlBuffer方式。如果你选择的是DO_BUFFER_IO方式的话,输入和输出都是用IoctlBuffer方式。
|
|