VfFreeAdapterChannel
VOID __stdcall VfFreeAdapterChannel(_DMA_ADAPTER *DmaAdapter){
void(__fastcall *RealDmaOperation)(_DMA_ADAPTER *);
INT64 v3;
void(__fastcall *v4)(_DMA_ADAPTER *);
_LIST_ENTRY *AdapterInformationInternal;
_VF_WAIT_CONTEXT_BLOCK *v6;
_MAP_REGISTER_FILE *v7;
VF_ASSERT_IRQL(2u);
RealDmaOperation = (void(__fastcall *)(_DMA_ADAPTER *))ViGetRealDmaOperation((ULONG_PTR)DmaAdapter, 0x30ui64);
LOBYTE(v3) = 1;
v4 = RealDmaOperation;
AdapterInformationInternal = ViGetAdapterInformationInternal(DmaAdapter, v3);
v4(DmaAdapter);
if( AdapterInformationInternal )
{
_InterlockedExchange((volatile __int32 *)&AdapterInformationInternal[11].Blink + 1, 0);
v6 = ViRemoveChannelWcb((_ADAPTER_INFORMATION *)AdapterInformationInternal, 0i64, 0i64);
if( v6 )
{
DECREMENT_ADAPTER_CHANNELS((__int64)AdapterInformationInternal);
SUBTRACT_MAP_REGISTERS((_ADAPTER_INFORMATION *)AdapterInformationInternal, (unsigned int)v6[12]);
v7 = (_MAP_REGISTER_FILE *)*((_QWORD *)v6 + 12);
if( v7 )
ViFreeMapRegisterFile((_ADAPTER_INFORMATION *)AdapterInformationInternal, v7);
ExFreeToNPagedLookasideList(&ViHalWaitBlockLookaside, v6);
}
}
}Referenced by:
No references.