pastroal
驱动牛犊
驱动牛犊
  • 注册日期2002-03-06
  • 最后登录2005-09-30
  • 粉丝0
  • 关注0
  • 积分5分
  • 威望1点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1086回复:5

再帮我看看,30分

楼主#
更多 发布于:2002-12-05 10:56
我的驱动程序是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的?

ydyuse
驱动老牛
驱动老牛
  • 注册日期2002-07-25
  • 最后登录2005-03-26
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于: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.
生命驱动,活力无限!
ydyuse
驱动老牛
驱动老牛
  • 注册日期2002-07-25
  • 最后登录2005-03-26
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2002-12-05 12:47
用MmGetMdlVirtualAddress代替试一下。
生命驱动,活力无限!
pastroal
驱动牛犊
驱动牛犊
  • 注册日期2002-03-06
  • 最后登录2005-09-30
  • 粉丝0
  • 关注0
  • 积分5分
  • 威望1点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2002-12-05 13:11
但是PIO驱动和其他驱动有什么明显标志吗?比如初始化要设置什么吗?
ydyuse
驱动老牛
驱动老牛
  • 注册日期2002-07-25
  • 最后登录2005-03-26
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2002-12-05 13:16
硬件可以执行DMA,设置DO_DIRECT_IO方式。
生命驱动,活力无限!
ydyuse
驱动老牛
驱动老牛
  • 注册日期2002-07-25
  • 最后登录2005-03-26
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2002-12-06 15:49
还没解决啊?
生命驱动,活力无限!
游客

返回顶部