VOID STREAMAPI CompleteStreamSRB ( IN PHW_STREAM_REQUEST_BLOCK pSrb ) { DbgLogTrace(("TestCap: Completing Stream SRB %p\n", pSrb)); StreamClassStreamNotification( StreamRequestComplete, pSrb->StreamObject, pSrb); }
NTSTATUS DCamCancelOnePacketCR( IN PDEVICE_OBJECT DeviceObject, IN PIRP pIrp, PISOCH_DESCRIPTOR IsochDescriptor ) /*++ Routine Description: Completion routine for detach an isoch descriptor associate with a pending read SRB. Will cancel the pending SRB here if detaching descriptor has suceeded. Arguments: DriverObject - Pointer to driver object created by system. pIrp - Allocated locally, need to be free here. IsochDescriptor - Isoch descriptor containing the SRB to be cancelled. Return Value: None. --*/ { PHW_STREAM_REQUEST_BLOCK pSrbToCancel; PISOCH_DESCRIPTOR_RESERVED IsochDescriptorReserved; PDCAM_EXTENSION pDevExt; DeviceObject; if(STATUS_SUCCESS != pIrp->IoStatus.Status) { ERROR_LOG(("DCamCancelOnePacketCR: Detach buffer failed with pIrp->IoStatus.Status= %x (! STATUS_SUCCESS) \n", pIrp->IoStatus.Status)); ASSERT(STATUS_SUCCESS == pIrp->IoStatus.Status); } else { IsochDescriptorReserved = (PISOCH_DESCRIPTOR_RESERVED) &IsochDescriptor->DeviceReserved[0]; pSrbToCancel = IsochDescriptorReserved->Srb; pDevExt = (PDCAM_EXTENSION) pSrbToCancel->HwDeviceExtension; IsochDescriptorReserved->Flags |= STATE_SRB_IS_COMPLETE; pSrbToCancel->CommandData.DataBufferArray->DataUsed = 0; pSrbToCancel->ActualBytesTransferred = 0; pSrbToCancel->Status = pDevExt->bDevRemoved ? STATUS_DEVICE_REMOVED : STATUS_CANCELLED; DbgMsg2(("DCamCancelOnePacketCR: SRB %p, Status %x, IsochDesc %p, Reserved %p cancelled\n", pSrbToCancel, pSrbToCancel->Status, IsochDescriptor, IsochDescriptorReserved)); StreamClassStreamNotification( StreamRequestComplete, pSrbToCancel->StreamObject, pSrbToCancel); ExFreePool(IsochDescriptor); } // Allocated locally so free it. IoFreeIrp(pIrp); return STATUS_MORE_PROCESSING_REQUIRED; }