首页
社区
课程
招聘
[旧帖] 异步读写设备出现的蓝屏问题,请帮忙看看,谢谢 0.00雪花
发表于: 2012-2-16 22:10 3953

[旧帖] 异步读写设备出现的蓝屏问题,请帮忙看看,谢谢 0.00雪花

2012-2-16 22:10
3953
我是初学者,正在学习异步读写设备,发现执行到KdPrint(("Other Diapatch!\n"))时,系统就会崩溃,windbug提示A fatal system error has occurred.
Debugger entered on first try; Bugcheck callbacks have not been invoked.经多次测试发现是由于派遣函数HelloDDKCleanUp中的ULONG ulReadOffset = (ULONG)stack->Parameters.Read.ByteOffset.QuadPart;语句引起的,删除这句话就没事,搞不清什么原因,猜测可能是非法访问造成的。烦请各位大牛帮忙看看,非常感谢.程序结构很简单,就是先将read、write的irp保存到设备扩展中,集中到设备关闭时异步处理.
NTSTATUS HelloDDKDispatchRoutine(IN PDEVICE_OBJECT pDeviceObject,IN PIRP pIrp)
{
  KdPrint(("Other Diapatch!\n"));  NTSTATUS status = STATUS_SUCCESS;
  pIrp->IoStatus.Status = status;
  pIrp->IoStatus.Information = 0;
  IoCompleteRequest(pIrp,IO_NO_INCREMENT);
  KdPrint(("Leave HelloDDKDispatchRoutine\n"));
  return status;
}
NTSTATUS HelloDDKCleanUp(IN PDEVICE_OBJECT pDevObj,
                 IN PIRP pIrp) 
{
  KdPrint(("Enter HelloDDKCleanUp\n"));

  PDEVICE_EXTENSION pDevExt = (PDEVICE_EXTENSION)
      pDevObj->DeviceExtension;
  
  //(1)将存在队列中的IRP逐个出队列,并处理

  PMY_IRP_ENTRY my_irp_entry;
  while(!IsListEmpty(pDevExt->pIRPLinkListHead))
  {
    PLIST_ENTRY pEntry = RemoveHeadList(pDevExt->pIRPLinkListHead);
    my_irp_entry = CONTAINING_RECORD(pEntry,
                              MY_IRP_ENTRY,
                              ListEntry);
    PIO_STACK_LOCATION stack = IoGetCurrentIrpStackLocation(my_irp_entry->pIRP);
    
    if (stack->MajorFunction == IRP_MJ_READ)
    {
      KdPrint(("Complete HelloDDKRead\n"));
      PDEVICE_EXTENSION pDevExt = (PDEVICE_EXTENSION)pDevObj->DeviceExtension;
      NTSTATUS status = STATUS_SUCCESS;
      ULONG ulReadLength = stack->Parameters.Read.Length;
      ULONG ulReadOffset = (ULONG)stack->Parameters.Read.ByteOffset.QuadPart;

[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费 0
支持
分享
最新回复 (4)
雪    币: 1
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
看得不是很懂,等楼下解答。
2012-2-16 22:35
0
雪    币: 36
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
最让我感到奇怪的是,一句语句的执行错误是由另一派遣函数中看似完全不相干的一句语句造成的
2012-2-20 19:45
0
雪    币: 139
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
难道是在read的时候找不到地址?
2012-2-21 10:13
0
雪    币: 36
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
注意,发生问题不是在read的时候,而是在kdprint的时候
2012-2-23 14:56
0
游客
登录 | 注册 方可回帖
返回
//