HalCancelAdapterChannelThin

NTSTATUS __stdcall HalCancelAdapterChannelThin(PDMA_ADAPTER DmaAdapter){
  __int64 v1; 
  NTSTATUS result; 
  __int64 v4; 
  CHAR v5; 

  _m_prefetchw((const void *)(v1 + 8));
  result = _InterlockedOr((volatile signed __int32 *)(v1 + 8), 2u);
  if( (result & 1) != 0 || (result & 4) == 0 )
    goto LABEL_15;
  v4 = *(_QWORD *)(v1 + 88);
  if( !v4 )
  {
    if( HalpDmaRemoveWcb((INT64)DmaAdapter, (_XSTATE_CONFIGURATION *)(v1 + 16)) )
    {
LABEL_9:
      LOBYTE(result) = 1;
      return result;
    }
    if( HalpDmaRemoveFromEmergencyLogicalAddressQueue((INT64)DmaAdapter, (_XSTATE_CONFIGURATION *)&DmaAdapter[37])
      || (result = HalpDmaRemoveAdapterFromMasterQueue((_ADAPTER_OBJECT *)DmaAdapter), (_BYTE)result)
      || !HIBYTE(DmaAdapter[27].Version)
      && (result = HalpDmaRemoveAdapterFromChannelQueue((_ADAPTER_OBJECT *)DmaAdapter), (_BYTE)result) )
    {
      *(_DWORD *)&DmaAdapter[15].Version = 0;
      IoFreeAdapterChannel(DmaAdapter);
      goto LABEL_9;
    }
LABEL_15:
    LOBYTE(result) = 0;
    return result;
  }
  v5 = HalpDmaRemoveFromEmergencyLogicalAddressQueue((INT64)DmaAdapter, *(_XSTATE_CONFIGURATION **)(v1 + 88));
  if( v5 )
  {
    if( *(_BYTE *)(v4 + 97) )
      result = (unsigned int)ExFreePoolWithTag(*(PVOID *)(v4 + 80), 0);
  }
  LOBYTE(result) = v5;
  return result;
}

Referenced by:

No references.