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