ViHookDmaAdapter
_LIST_ENTRY *__fastcall ViHookDmaAdapter(PVOID Object, __int64 a2, int a3, char a4){
LIST_ENTRY *AdapterInformationInternal;
LIST_ENTRY *PoolWithTag;
UINT8 v10;
AdapterInformationInternal = ViGetAdapterInformationInternal((DMA_ADAPTER *)Object, 0i64);
if( !AdapterInformationInternal )
{
PoolWithTag = (LIST_ENTRY *)ExAllocatePoolWithTag(NonPagedPoolNx, 0x140ui64, 0x566C6148ui64);
AdapterInformationInternal = PoolWithTag;
if( !PoolWithTag )
return AdapterInformationInternal;
memset((INT64)PoolWithTag, 0i64);
AdapterInformationInternal[1].Flink = (_LIST_ENTRY *)Object;
ExInterlockedInsertHeadList(&ViAdapterList, AdapterInformationInternal, &qword_140D49088);
ObfReferenceObject(Object);
AdapterInformationInternal[4].Blink = 0i64;
AdapterInformationInternal[4].Flink = (LIST_ENTRY *)((char *)AdapterInformationInternal + 56);
AdapterInformationInternal[3].Blink = (LIST_ENTRY *)((char *)AdapterInformationInternal + 56);
AdapterInformationInternal[6].Flink = 0i64;
AdapterInformationInternal[5].Blink = AdapterInformationInternal + 5;
AdapterInformationInternal[5].Flink = AdapterInformationInternal + 5;
AdapterInformationInternal[7].Blink = 0i64;
AdapterInformationInternal[7].Flink = (LIST_ENTRY *)((char *)AdapterInformationInternal + 104);
AdapterInformationInternal[6].Blink = (LIST_ENTRY *)((char *)AdapterInformationInternal + 104);
AdapterInformationInternal[9].Flink = 0i64;
AdapterInformationInternal[8].Blink = AdapterInformationInternal + 8;
AdapterInformationInternal[8].Flink = AdapterInformationInternal + 8;
ViCopyDeviceDescription((DEVICE_DESCRIPTION *)&AdapterInformationInternal[12], (DEVICE_DESCRIPTION *)a2, v10);
LODWORD(AdapterInformationInternal[9].Blink) = a3;
if( *(_DWORD *)(a2 + 20) == 1 && *(_DWORD *)(a2 + 16) < 8u || !*(_BYTE *)(a2 + 4) )
BYTE2(AdapterInformationInternal[2].Flink) = 1;
AdapterInformationInternal[17].Blink = 0i64;
if( *(_BYTE *)(a2 + 4) && *(_BYTE *)(a2 + 5) )
ViAllocateContiguousMemory((INT64)AdapterInformationInternal);
else
BYTE1(AdapterInformationInternal[2].Flink) = 1;
AdapterInformationInternal[3].Flink = (_LIST_ENTRY *)*((_QWORD *)Object + 1);
*((_QWORD *)Object + 1) = &ViDmaOperations;
}
if( a4 )
_InterlockedIncrement((volatile signed __int32 *)&AdapterInformationInternal[2].Flink + 1);
return AdapterInformationInternal;
}Referenced by:
VfGetDmaAdapter