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.