HalpDmaControllerCancelTransfer

VOID __stdcall HalpDmaControllerCancelTransfer(
        _HALP_DMA_CONTROLLER *DmaController,
        _DMA_TRANSFER_CONTEXT *TransferContext,
        _DMA_TRANSFER_CONTEXT *a3){
  unsigned int v3; 
  _HALP_DMA_CHANNEL *v6; 
  unsigned __int8 CurrentIrql; 
  char v8; 
  unsigned __int64 *p_Lock; 
  bool v10; 

  v3 = (unsigned int)TransferContext;
  v6 = &DmaController->Channels[(unsigned int)TransferContext];
  CurrentIrql = KeGetCurrentIrql();
  v8 = 0;
  if( CurrentIrql == 15 )
  {
    p_Lock = &DmaController->Lock;
  }
  else
  {
    CurrentIrql = KeGetCurrentIrql();
    __writecr8(DmaController->Irql);
    p_Lock = &DmaController->Lock;
    KxAcquireSpinLock(&DmaController->Lock);
    v8 = 1;
  }
  a3->V1.TransferState |= 1u;
  if( DmaController->Operations.CancelTransfer(DmaController->ExtensionData, v3) )
  {
    v10 = v6->CurrentCompletionRoutine == 0i64;
    v6->Complete = 1;
    v6->CurrentInterruptType = InterruptTypeCancelled;
    if( !v10 )
      KiInsertQueueDpc(&v6->Dpc, 0i64, 0i64, 0i64, 0);
  }
  if( v8 )
  {
    KxReleaseSpinLock(p_Lock);
    __writecr8(CurrentIrql);
  }
}

Referenced by:

HalCancelMappedTransfer