阅读:3035回复:1
关于IoSetCompletionRoutine的问题,走过的路过的,帮忙看看
帮忙看看,怎么就是进不去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; } |
|
沙发#
发布于:2007-06-16 12:24
ddk:
IoCompleteRequest函数会倒序依次调用上层的所有完成例程,除非其中某个IoCompletion例程返回了STATUS_MORE_PROCESSING_REQUIRED。 |
|
|