ke077
驱动牛犊
驱动牛犊
  • 注册日期2007-03-14
  • 最后登录2010-10-28
  • 粉丝1
  • 关注0
  • 积分362分
  • 威望134点
  • 贡献值0点
  • 好评度72点
  • 原创分0分
  • 专家分0分
阅读:3035回复:1

关于IoSetCompletionRoutine的问题,走过的路过的,帮忙看看

楼主#
更多 发布于:2007-06-15 14:57
帮忙看看,怎么就是进不去BulkUsb_ReadIrp_Complete()呢?
我的代码:
Open_Stream时调用的一段/***/
if (pStrmEx->StartBulkRead == START_BULK_READ)
{    pStrmEx->StartBulkRead = BULK_READING;
    Bulk_Read_Write(pHwDevExt->PDO->AttachedDevice,pSrb->Irp);//这里就是bulk读数据,是可以读到的。
    IoSetCompletionRoutine(pSrb->Irp,
                                                  BulkUsb_ReadIrp_Complete,
                                                  pSrb, //pass transfer object as Context
                                                  TRUE,  // Invoke on Success
                                                  TRUE,  // Invoke on Error
                                                  TRUE); // Invoke on Cancel
}
需要回调的函数:/***/
NTSTATUS
BulkUsb_ReadIrp_Complete(IN PDEVICE_OBJECT DeviceObject,IN PIRP Irp,IN PVOID Context)
{
    NTSTATUS status;
  
    IoSetCompletionRoutine(Irp,
            BulkUsb_ReadIrp_Complete,
            Irp->MdlAddress->MappedSystemVa, //pass transfer object as Context
            TRUE,  // Invoke on Success
            TRUE,  // Invoke on Error
            TRUE); // Invoke on Cancel

    status = Bulk_Read_Write(DeviceObject, Irp);
    return status;
}              
driverdance
驱动牛犊
驱动牛犊
  • 注册日期2007-04-18
  • 最后登录2007-08-13
  • 粉丝0
  • 关注0
  • 积分640分
  • 威望65点
  • 贡献值0点
  • 好评度64点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2007-06-16 12:24
ddk:
IoCompleteRequest函数会倒序依次调用上层的所有完成例程,除非其中某个IoCompletion例程返回了STATUS_MORE_PROCESSING_REQUIRED。
承接WDM和hook的项目。
游客

返回顶部