ViAllocateContiguousMemory
VOID __stdcall ViAllocateContiguousMemory(_ADAPTER_INFORMATION *AdapterInformation){
int v2;
_LARGE_INTEGER v3;
VOID **PoolWithTag;
unsigned int v5;
__int64 v6;
__int64 v7;
UINT64 Protect;
UINT64 PreferredNode;
_LARGE_INTEGER v10;
v10.anonymous_0.HighPart = 0;
v2 = 0xFFFF;
if( *((_BYTE *)AdapterInformation + 203) )
{
v3.QuadPart = -1i64;
}
else
{
if( *((_BYTE *)AdapterInformation + 200) )
{
v10.anonymous_0.LowPart = -1;
}
else
{
if( AdapterInformation[53] == 1 )
v2 = 0xFFFFFF;
v10.anonymous_0.LowPart = v2;
}
v3 = v10;
}
AdapterInformation[74] = 32;
*((_QWORD *)AdapterInformation + 38) = AdapterInformation + 72;
RtlClearAllBits((PRTL_BITMAP)(AdapterInformation + 74));
PoolWithTag = ExAllocatePoolWithTag(0x200ui64, 0x100ui64, 1449943368i64);
*((_QWORD *)AdapterInformation + 33) = PoolWithTag;
if( PoolWithTag )
{
v5 = 0;
v6 = 0i64;
do
{
LODWORD(PreferredNode) = 0x80000000;
LODWORD(Protect) = 4;
*(_QWORD *)(v6 + *((_QWORD *)AdapterInformation + 33)) = MmAllocateContiguousNodeMemory(
0x3000ui64,
0i64,
v3,
0i64,
Protect,
PreferredNode);
if( *(_QWORD *)(v6 + *((_QWORD *)AdapterInformation + 33)) )
{
v7 = 68i64;
}
else
{
RtlSetBits((_RTL_BITMAP *)(AdapterInformation + 74), v5, 1ui64);
v7 = 69i64;
}
_InterlockedIncrement(&AdapterInformation[v7]);
++v5;
v6 += 8i64;
}
while( v5 < 0x20 );
}
}Referenced by:
ViHookDmaAdapter