VfFreeMapRegisters
VOID __stdcall VfFreeMapRegisters(_DMA_ADAPTER *DmaAdapter, PVOID MapRegisterBase, UINT64 NumberOfMapRegisters){
INT64 v4;
unsigned int v5;
char v7;
void(__fastcall *v8)(_DMA_ADAPTER *, PVOID, _QWORD);
INT64 v9;
void(__fastcall *v10)(_DMA_ADAPTER *, PVOID, _QWORD);
LIST_ENTRY *AdapterInformationInternal;
INT64 v12;
_QWORD *v13;
struct _SLIST_ENTRY *v14;
v4 = 0i64;
v5 = NumberOfMapRegisters;
v7 = 0;
LODWORD(v8) = ViGetRealDmaOperation(DmaAdapter, 0x38ui64);
LOBYTE(v9) = 1;
v10 = v8;
AdapterInformationInternal = ViGetAdapterInformationInternal(DmaAdapter, v9);
if( AdapterInformationInternal )
{
VF_ASSERT_IRQL(2u);
v4 = (INT64)MapRegisterBase;
if( MapRegisterBase == (PVOID)-559026163i64 )
{
MapRegisterBase = 0i64;
v7 = 1;
v4 = 0i64;
}
else if( MapRegisterBase && *(_DWORD *)MapRegisterBase == -1393569779 )
{
MapRegisterBase = (PVOID)*((_QWORD *)MapRegisterBase + 6);
}
}
v10(DmaAdapter, MapRegisterBase, v5);
if( AdapterInformationInternal )
{
if( v7 == 1 )
v4 = -559026163i64;
v12 = ViRemoveChannelWcb((INT64)AdapterInformationInternal, v4, 0i64);
v13 = (_QWORD *)v12;
if( v12 )
{
SUBTRACT_MAP_REGISTERS((INT64)AdapterInformationInternal, *(unsigned int *)(v12 + 48));
v14 = (struct _SLIST_ENTRY *)v13[12];
if( v14 )
ViFreeMapRegisterFile((__int64)AdapterInformationInternal, v14);
ExFreeToNPagedLookasideList((NPAGED_LOOKASIDE_LIST *)ViHalWaitBlockLookaside, v13);
}
}
}Referenced by:
No references.