HalCancelAdapterChannelThin

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

Referenced by:

No references.