ViHookDmaAdapter
_LIST_ENTRY *__fastcall ViHookDmaAdapter(_DMA_ADAPTER *Object, _DEVICE_DESCRIPTION *Source, INT64 a3, CHAR a4){
int v6;
_LIST_ENTRY *AdapterInformationInternal;
VOID **PoolWithTag;
UINT8 v10;
v6 = a3;
AdapterInformationInternal = ViGetAdapterInformationInternal(Object, 0i64);
if( !AdapterInformationInternal )
{
PoolWithTag = ExAllocatePoolWithTag(0x200ui64, 0x140ui64, 1449943368i64);
AdapterInformationInternal = (_LIST_ENTRY *)PoolWithTag;
if( !PoolWithTag )
return AdapterInformationInternal;
memset(PoolWithTag, 0i64, 0x140u);
AdapterInformationInternal[1].Flink = (_LIST_ENTRY *)Object;
ExInterlockedInsertHeadList((PLIST_ENTRY)&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], Source, v10);
LODWORD(AdapterInformationInternal[9].Blink) = v6;
if( Source->InterfaceType == Isa && Source->DmaChannel < 8 || !Source->Master )
BYTE2(AdapterInformationInternal[2].Flink) = 1;
AdapterInformationInternal[17].Blink = 0i64;
if( Source->Master && Source->ScatterGather )
ViAllocateContiguousMemory((_ADAPTER_INFORMATION *)AdapterInformationInternal);
else
BYTE1(AdapterInformationInternal[2].Flink) = 1;
AdapterInformationInternal[3].Flink = (_LIST_ENTRY *)Object->DmaOperations;
Object->DmaOperations = (_DMA_OPERATIONS *)&ViDmaOperations;
}
if( a4 )
_InterlockedIncrement((volatile signed __int32 *)&AdapterInformationInternal[2].Flink + 1);
return AdapterInformationInternal;
}Referenced by:
VfGetDmaAdapter