MmManagePartitionInitialAddMemory
NTSTATUS __stdcall MmManagePartitionInitialAddMemory(UINT64 *a1, INT64 *a2, INT64 a3, CHAR a4){
unsigned __int64 v5;
VOID *Pool;
_MI_PARTITION *v7;
int v8;
NTSTATUS v9;
unsigned int v11;
__int64 v12;
v5 = 0i64;
Pool = 0i64;
v7 = (_MI_PARTITION *)*a1;
v8 = *(_DWORD *)a2;
if( (*(_DWORD *)a2 & 0xFFFFFFF8) == 0 )
{
if( (v8 & 4) != 0 )
return -1073741637;
if( (v8 & 7) != 0 )
{
v11 = *((_DWORD *)a2 + 1);
if( v11 )
{
v5 = a3 + 16;
if( a4 )
{
v12 = 16i64 * v11;
Pool = MiAllocatePool(64i64, v12, 0x6148694Dui64);
if( !Pool )
{
v9 = -1073741670;
goto LABEL_19;
}
if( v12 )
{
if( (v5 & 7) != 0 )
ExRaiseDatatypeMisalignment();
if( v12 + v5 > 0x7FFFFFFF0000i64 || v12 + v5 < v5 )
MEMORY[0x7FFFFFFF0000] = 0;
}
memmove(Pool, (const VOID *)v5, v12);
}
else
{
Pool = (VOID *)(a3 + 16);
}
v9 = MiHotAddPartitionMemory(v7, (UINT64 *)Pool, a2);
goto LABEL_19;
}
}
}
v9 = -1073741811;
LABEL_19:
if( Pool )
{
if( Pool != (VOID *)v5 )
ExFreePoolWithTag(Pool, 0);
}
return v9;
}Referenced by:
NtManagePartition