sistwl
驱动牛犊
驱动牛犊
  • 注册日期2013-01-04
  • 最后登录2013-05-20
  • 粉丝0
  • 关注0
  • 积分2分
  • 威望11点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1910回复:1

帮忙看下驱动这个驱动蓝屏问题,用windbg分析过

楼主#
更多 发布于:2013-05-17 16:49
用windbg分下了dump,给出的解释如下:
NO_MORE_IRP_STACK_LOCATIONS (35)
A higher level driver has attempted to call a lower level driver through
the IoCallDriver() interface, but there are no more stack locations in the
packet, hence, the lower level driver would not be able to access its
parameters, as there are no parameters for it.  This is a disasterous
situation, since the higher level driver "thinks" it has filled in the
parameters for the lower level driver (something it MUST do before it calls
it), but since there is no stack location for the latter driver, the former
has written off of the end of the packet.  This means that some other memory
has probably been trashed at this point.
Arguments:
Arg1: 86428b58, Address of the IRP
Arg2: 00000000
Arg3: 00000000
Arg4: 00000000
FAULTING_SOURCE_CODE:  
   297:     KeInitializeEvent(&Event, NotificationEvent, FALSE);
   298:     IoCopyCurrentIrpStackLocationToNext(Irp);
   299:     IoSetCompletionRoutine(Irp, EPOSFsfCallNextDriverCompletion, &Event, TRUE, TRUE, TRUE);
   300:     status = IoCallDriver(DeviceObject, Irp);
>  301:     if (STATUS_PENDING == status)
   302:     {
   303:         KeWaitForSingleObject(&Event, Executive, KernelMode, FALSE, NULL);
   304:         status = Irp->IoStatus.Status;
   305:     }
   306:     return status;

我现在刚开始学习驱动,不知道怎么入手,希望大家帮忙看下,非常感谢
olivertang
驱动牛犊
驱动牛犊
  • 注册日期2009-03-31
  • 最后登录2013-07-15
  • 粉丝0
  • 关注0
  • 积分6分
  • 威望51点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2013-07-15 13:37
   300:     status = IoCallDriver(DeviceObject, Irp);

检查DeviceObject,应该是这个DO已经被释放了
游客

返回顶部