IoFreeAdapterChannelV3
VOID __stdcall IoFreeAdapterChannelV3(PDMA_ADAPTER DmaAdapter){
unsigned __int8 CurrentIrql;
INT64 *NextWcb;
char v4;
int v5;
char DmaResourcesInternal;
CurrentIrql = KeGetCurrentIrql();
if( CurrentIrql == 2 && *(_DWORD *)&DmaAdapter[32].Version )
{
if( LOBYTE(DmaAdapter[13].DmaOperations) )
ExQueueWorkItem((PWORK_QUEUE_ITEM)&DmaAdapter[29].DmaOperations, CriticalWorkQueue);
}
else
{
IoFreeAdapterChannelV3Internal((INT64)DmaAdapter);
do
{
NextWcb = HalpDmaGetNextWcb((INT64)DmaAdapter);
if( !NextWcb )
break;
DmaAdapter[21].DmaOperations = (_DMA_OPERATIONS *)NextWcb;
v4 = 0;
*(_DWORD *)&DmaAdapter[15].Version = *((_DWORD *)NextWcb + 10);
v5 = *((_DWORD *)NextWcb + 4);
LODWORD(DmaAdapter[38].DmaOperations) = 0;
HIDWORD(DmaAdapter[23].DmaOperations) = v5;
if( CurrentIrql < 2u )
{
CurrentIrql = KeGetCurrentIrql();
__writecr8(2ui64);
v4 = 1;
}
DmaResourcesInternal = HalpAllocateDmaResourcesInternal(DmaAdapter);
if( v4 )
__writecr8(CurrentIrql);
}
while( DmaResourcesInternal );
}
}Referenced by:
IoFreeAdapterChannel
IoFreeAdapterChannelV3Passive