MiInitializePoolCommitPacket

NTSTATUS __stdcall MiInitializePoolCommitPacket(
        INT64 *a1,
        UINT64 *a2,
        INT64 a3,
        UINT64 a4,
        CHAR a5,
        UINT64 RequiredNode,
        INT64 a7,
        INT64 a8){
  INT64 v8; 
  void *v9; 
  unsigned int ProtectionMask; 
  unsigned int v11; 
  unsigned __int64 v12; 
  unsigned int v13; 
  int v14; 
  __int16 v15; 
  __int64 v16; 
  int v17; 
  char *v18; 
  __int64 v19; 
  __int64 v20; 
  bool v21; 
  NTSTATUS result; 
  _MMPFN *LargePageChain; 
  __int64 v24; 
  UINT64 v25; 
  __int128 v26; 
  __int64 v27; 
  __int128 v28; 

  v8 = *a1;
  v9 = (void *)*a2;
  *(_WORD *)(a8 + 78) = 0;
  *(_QWORD *)a8 = v8;
  ProtectionMask = MiMakeProtectionMask((unsigned int)a4);
  if( ProtectionMask > 0x18 || (v14 = 16777298, !_bittest(&v14, ProtectionMask)) )
    KeBugCheckEx(0x1Au, (PVOID)0x5300, (PVOID)v12, v9, (PVOID)v11);
  *(_QWORD *)(a8 + 16) = 0i64;
  *(_QWORD *)(a8 + 40) = 5i64;
  v15 = 8 * (ProtectionMask & 0x1F);
  *(_WORD *)(a8 + 78) = v15;
  *(_QWORD *)(a8 + 48) = (char *)&stru_140C4DB30 + 6224;
  *(_QWORD *)(a8 + 56) = (char *)MmGetPteBase() + ((((unsigned __int64)v9 + v12 - 1) >> 9) & 0x7FFFFFFFF8i64);
  v16 = ((__int64)(((((unsigned __int64)v9 + v12 - 1) >> 9) & 0x7FFFFFFFF8i64) - ((v12 >> 9) & 0x7FFFFFFFF8i64)) >> 3)
      + 1;
  if( (a5 & 1) != 0 )
  {
    *(_WORD *)(a8 + 78) = v15 | 2;
    if( (a5 & 0x20) != 0 )
    {
      *(_DWORD *)(a8 + 44) = 2;
      v17 = 1;
      v18 = (char *)KeGetCurrentThread()->ApcState.Process->Session + 256;
    }
    else
    {
      v17 = 6;
      v18 = (char *)&stru_140C4DB30 + 5264;
    }
    v19 = *((unsigned __int16 *)v18 + 87);
    *(_QWORD *)(a8 + 48) = v18;
    v20 = *(&stru_140C4DB30 + 267);
    *(_DWORD *)(a8 + 40) = v17;
    v21 = MiChargeCommit(*(_MI_PARTITION **)(v20 + 8 * v19), v16, 1ui64) == 0;
    goto LABEL_7;
  }
  if( (v13 & 0x20000000) == 0 )
  {
    if( a7 )
    {
      *(_QWORD *)(a8 + 16) = a7;
      *(_DWORD *)(a8 + 40) = 15;
      *(_WORD *)(a8 + 78) = v15 | 0x100;
      goto LABEL_8;
    }
    LODWORD(v24) = MiGetPoolPages(v13, (unsigned int)RequiredNode, v16);
    *(_QWORD *)(a8 + 16) = v24;
    v21 = v24 == 0;
LABEL_7:
    if( !v21 )
    {
LABEL_8:
      *(_QWORD *)(a8 + 24) = 0i64;
      result = 0;
      *(_QWORD *)(a8 + 8) = v16;
      *(_DWORD *)(a8 + 72) = RequiredNode;
      *(_QWORD *)(a8 + 64) = 0i64;
      *(_QWORD *)(a8 + 32) = 0i64;
      return result;
    }
    return -1073741670;
  }
  if( MiObtainPoolCharges(v16, 0i64) )
  {
    LargePageChain = MiGetLargePageChain((unsigned int)RequiredNode, v16);
    *(_QWORD *)(a8 + 16) = LargePageChain;
    if( LargePageChain )
    {
      *(_WORD *)(a8 + 78) |= 4u;
      goto LABEL_8;
    }
    v27 = v16;
    v25 = v16;
    v26 = 0i64;
    v28 = 0i64;
    MiReturnPoolCharges(&v25, 0i64);
  }
  return -1073741670;
}

Referenced by:

MmAllocatePoolMemory
MmAllocateSecurePoolMemory