MmAllocatePoolMemory
NTSTATUS __stdcall MmAllocatePoolMemory(INT64 *a1, UINT64 *a2, INT64 a3, UINT64 a4, CHAR a5){
int v6;
unsigned int v8;
unsigned int v9;
unsigned int v10;
int v11;
CHAR v12;
int v14;
VOID *v15;
UINT64 v16;
INT64 v17[10];
unsigned int v18;
v18 = a4;
v6 = a3;
memset(v17, 0i64, sizeof(v17));
v8 = v6 & 0x7F;
if( (v6 & 0x7F) == 0 || v8 > (unsigned __int16)KeNumberNodes )
return -1073741583;
v9 = v8 - 1;
v10 = v6 & 0xFFFFFF80;
if( (v10 & 0x2000) != 0 )
{
*a1 = 0i64;
if( (a5 & 1) != 0 )
v14 = (a5 & 0x20) != 0 ? 1 : 6;
else
v14 = 5;
v15 = MiReservePoolMemory(0i64, v14, *a2, v9);
if( !v15 )
return -1073741801;
*a1 = (INT64)v15;
}
v11 = 0;
if( (v10 & 0x1000) != 0 )
{
v12 = a5 & 0xDF;
if( (a5 & 1) != 0 )
v12 = a5;
LODWORD(v16) = v9;
v11 = MiInitializePoolCommitPacket(a1, a2, v10, v18, v12, v16, 0i64, (INT64)v17);
if( v11 < 0 || (v11 = MiCommitPoolMemory((INT64)v17), v11 < 0) )
{
if( (v10 & 0x2000) != 0 )
MmFreePoolMemory((UINT64 *)a1, a2);
*a1 = 0i64;
}
*a2 = (*a2 + 4095) & 0xFFFFFFFFFFFFF000ui64;
}
return v11;
}Referenced by:
RtlpHpEnvAllocVA