ExpAllocatePoolWithTagFromNode
VOID *__stdcall ExpAllocatePoolWithTagFromNode(
UINT64 PoolType,
ULONG_PTR BugCheckParameter1,
UINT64 Tag,
UINT64 IdealNode,
INT64 arg20){
unsigned int v5;
void *v6;
unsigned int v7;
int v8;
int v9;
unsigned int v10;
unsigned int NextNode;
VOID *result;
_QWORD *v13;
UINT64 v14;
UINT64 LookupIndex;
v5 = Tag;
v6 = *(void **)&BugCheckParameter1;
v7 = PoolType;
if( (IdealNode & 0x80000000) == 0i64 )
v8 = 1;
else
v8 = (unsigned __int16)KeNumberNodes;
v9 = arg20;
v10 = IdealNode & 0x7FFFFFFF;
LODWORD(LookupIndex) = 0;
if( (IdealNode & 0x80000000) == 0i64 )
v10 = IdealNode;
NextNode = v10;
while( 1 )
{
LODWORD(v14) = v9;
result = ExAllocateHeapPool(v7, (UINT64)v6, v5, NextNode, v14);
if( result )
break;
if( --v8 )
{
NextNode = MmGetNextNode(v10, &LookupIndex);
if( NextNode != -1 )
continue;
}
++ExPoolFailures;
if( (v7 & 2) != 0 )
{
v13 = (_QWORD *)qword_140C57E00[0];
if( (v7 & 0x200) != 0 )
v13 = (_QWORD *)qword_140C57E08;
KeBugCheckEx(
0x41u,
v6,
(PVOID)(unsigned int)v13[17],
(PVOID)((unsigned int)v13[21] + (unsigned int)v13[23]),
0i64);
}
if( (v7 & 0x10) != 0 )
RtlRaiseStatus(-1073741670);
return 0i64;
}
return result;
}Referenced by:
ExAllocateCacheAwarePushLock
ExAllocatePool2
ExAllocatePool3
ExAllocatePoolMm
ExAllocatePoolWithTagPriority
ExpSaBinaryArrayInsert
ExpSaInitialize
ExpSaPageGroupDescriptorAllocate
MiAllocatePool