阅读:1086回复:5
再帮我看看,30分
我的驱动程序是DO_DIRECT_IO的
想在Write例程里面把IRP的MDL转成指针来访问传下来的数据,修改一下,然后传下去。 我现在就不知道如何把IRP里面的MDL转成指针。 NTSTATUS Bus_Write ( IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp ) { UCHAR *buffer; buffer = MmGetSystemAddressForMdlSafe(Irp->MdlAddress,NormalPagePriority); ... } 但是我一运行到MmGetSystemAddressForMdlSafe就蓝屏重启了。 我该怎么用MDL阿?难道驱动里面那到MDL都不能做处理直接付给下一个驱动吗? MmGetSystemAddressForMdlSafe里面说MmGetSystemAddressForMdlSafe Returns a system-space virtual address that maps the physical pages described by a given MDL for drivers whose devices must use PIO. If no virtual address exists, one is assigned。 PIO是什么意思?怎么设置自己的驱动是PIO的? |
|
沙发#
发布于:2002-12-05 11:59
PIO:
Programmed I/O ,A technique of making data transfers between a device and system memory using remapped system-space virtual addresses, rather than DMA. |
|
|
板凳#
发布于:2002-12-05 12:47
用MmGetMdlVirtualAddress代替试一下。
|
|
|
地板#
发布于:2002-12-05 13:11
但是PIO驱动和其他驱动有什么明显标志吗?比如初始化要设置什么吗?
|
|
地下室#
发布于:2002-12-05 13:16
硬件可以执行DMA,设置DO_DIRECT_IO方式。
|
|
|
5楼#
发布于:2002-12-06 15:49
还没解决啊?
|
|
|