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.