yang_zi_jiang
驱动牛犊
驱动牛犊
  • 注册日期2007-06-24
  • 最后登录2009-05-26
  • 粉丝0
  • 关注0
  • 积分4分
  • 威望30点
  • 贡献值0点
  • 好评度17点
  • 原创分0分
  • 专家分0分
阅读:2760回复:9

Irp的MdlAddress为0,怎么办?

楼主#
更多 发布于:2007-09-14 15:59
我的驱动中用的缓冲方式为DIRECT_IO的方式,应用程序中已经CreateFile成功,返回了正确的Handle.但是当我在用ReadFile函数的时候,进入到了驱动里的Read例程,发现Irp->MdlAddress的值为0,这样一执行MmGetSystemAddressForMdlSafe(Irp->MdlAddress, NormalPagePriority);就蓝屏。我不知道应用程序发送的IRP过来的Irp->MdlAddress为什么会是0啊?
yang_zi_jiang
驱动牛犊
驱动牛犊
  • 注册日期2007-06-24
  • 最后登录2009-05-26
  • 粉丝0
  • 关注0
  • 积分4分
  • 威望30点
  • 贡献值0点
  • 好评度17点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2007-09-17 08:53
大家碰到过这种情况的帮帮忙啊,我是初学者。我的读是这样用的ReadFile(handle_,  
    inputData,     sizeBuffer,     &length,   NULL),我看了下传进去IRP的用户缓冲区的地址和应用程序中inputData的地址是一致的。但就是Irp->MdlAddress是0,肯定就不对吧?
yang_zi_jiang
驱动牛犊
驱动牛犊
  • 注册日期2007-06-24
  • 最后登录2009-05-26
  • 粉丝0
  • 关注0
  • 积分4分
  • 威望30点
  • 贡献值0点
  • 好评度17点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2007-10-16 15:54
这两天再忙其他的,好些天没来看了,终于有人回复了。谢谢楼上的两位大哥。
这是我的代码
        deviceExtension = deviceObject->DeviceExtension;
        deviceObject->Flags |= DO_DIRECT_IO;
        deviceObject->Flags |= DO_POWER_PAGABLE;
代码肯定是执行到了,我用softice能单步运行到这里。没有写fdo->Flags &= ~DO_DEVICE_INITIALIZING这一句,不知道是不是这个原因,我再看看。
yang_zi_jiang
驱动牛犊
驱动牛犊
  • 注册日期2007-06-24
  • 最后登录2009-05-26
  • 粉丝0
  • 关注0
  • 积分4分
  • 威望30点
  • 贡献值0点
  • 好评度17点
  • 原创分0分
  • 专家分0分
地板#
发布于:2007-10-16 16:07
IoCreateDevice应该只使用了一个吧,就是创建设备对象吧?CreateDeviceObject(DriverObject, PhysicalDeviceObject, &deviceObject);
我用softice调试的时候,比如有时候明明知道IRP包或者驱动里面有些数据错了,这样一继续运行肯定系统就蓝屏,但不知道能不能在发现有错误时退出softice不继续运行这个驱动了,这样就不用重启电脑,直接F5不行啊,不知道大哥们怎么调试的?还有分数问题,我就70分,还不知道问了问题怎么给分大家,等我找找看,先只好说谢谢啦。
yang_zi_jiang
驱动牛犊
驱动牛犊
  • 注册日期2007-06-24
  • 最后登录2009-05-26
  • 粉丝0
  • 关注0
  • 积分4分
  • 威望30点
  • 贡献值0点
  • 好评度17点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2007-10-25 16:23
好的。谢谢
游客

返回顶部