HalpDmaDequeueAdapter

_LIST_ENTRY *__stdcall HalpDmaDequeueAdapter(_HALP_DMA_MASTER_ADAPTER_OBJECT *MasterAdapter, INT64 ScatterGather){
  char v2; 
  _LIST_ENTRY *p_ScatterAdapterQueue; 
  _LIST_ENTRY *Flink; 
  _LIST_ENTRY *result; 
  _LIST_ENTRY *v7; 
  _LIST_ENTRY *v8; 
  _KLOCK_QUEUE_HANDLE LockHandle; 

  v2 = ScatterGather;
  memset(&LockHandle, 0, sizeof(LockHandle));
  KeAcquireInStackQueuedSpinLock(&MasterAdapter->AdapterObject.SpinLock, &LockHandle);
  p_ScatterAdapterQueue = &MasterAdapter->ScatterAdapterQueue;
  if( !v2 )
    p_ScatterAdapterQueue = &MasterAdapter->ContiguousAdapterQueue;
  Flink = p_ScatterAdapterQueue->Flink;
  if( p_ScatterAdapterQueue->Flink == p_ScatterAdapterQueue )
  {
    KeReleaseInStackQueuedSpinLockFromDpcLevel(&LockHandle);
    result = 0i64;
    __writecr8(LockHandle.OldIrql);
  }
  else
  {
    v7 = Flink->Flink;
    if( Flink->Blink != p_ScatterAdapterQueue || v7->Blink != Flink )
      __fastfail(3u);
    p_ScatterAdapterQueue->Flink = v7;
    v8 = Flink - 10;
    v7->Blink = p_ScatterAdapterQueue;
    KeReleaseInStackQueuedSpinLockFromDpcLevel(&LockHandle);
    __writecr8(LockHandle.OldIrql);
    return v8;
  }
  return result;
}

Referenced by:

HalpDmaProcessMapRegisterQueueV2
HalpDmaProcessMapRegisterQueueV3