MiLockPoolCommitPageTable

INT64 __fastcall MiLockPoolCommitPageTable(INT64 a1, INT64 *a2){
  _MMPTE *PteBase; 
  INT64 v5; 
  __int64 v6; 
  int v7; 
  __int64 v8; 
  UINT64 v9; 
  UINT64 v10; 
  MMPTE *v12; 
  char v13; 
  UINT64 v14[2]; 
  __int128 v15; 
  INT64 v16; 
  v16 = 0i64;
  PteBase = MmGetPteBase();
  v5 = *(_QWORD *)(a1 + 48);
  v6 = (__int64)(((_QWORD)a2 << 25) - ((_QWORD)PteBase << 25)) >> 16;
  v7 = MiFastLockLeafPageTable(v5, v6);
  v8 = v7;
  if( !v7
    || (*(_OWORD *)v14 = 0i64,
        v15 = 0i64,
        MiFillPteHierarchy(v6, v14),
        v9 = v14[v8],
        v10 = v14[(int)v8 - 1],
        v16 = v10,
        !v9) )
  {
    v12 = MiLockLowestValidPageTable(v5, a2, (INT64 **)&v16);
    v10 = v16;
    v9 = (UINT64)v12;
    if( (INT64 *)v16 == a2 )
    {
      LODWORD(v8) = 1;
LABEL_5:
      if( (*(_BYTE *)(a1 + 78) & 4) != 0 )
        KeBugCheckEx(0x1Au, 0x5301ui64, v6, 0i64, 0i64);
      goto LABEL_6;
    }
    if( (_MMPTE *)v16 == (_MMPTE *)((char *)PteBase + (((unsigned __int64)a2 >> 9) & 0x7FFFFFFFF8i64)) )
    {
      LODWORD(v8) = 2;
      goto LABEL_10;
    }
    LODWORD(v8) = 0;
  }
  if( (_DWORD)v8 )
  {
    if( (_DWORD)v8 == 1 )
      goto LABEL_5;
    if( (_DWORD)v8 != 2 )
    {
      LODWORD(v8) = 0;
      goto LABEL_12;
    }
LABEL_10:
    v13 = MI_READ_PTE_LOCK_FREE(v10);
    if( (v13 & 1) != 0 )
    {
      if( v13 < 0 )
        KeBugCheckEx(0x1Au, 0x5302ui64, v6, 0i64, 0i64);
      if( (*(_BYTE *)(a1 + 78) & 4) != 0 )
        KeBugCheckEx(0x1Au, 0x5303ui64, v6, 0i64, 0i64);
    }
    LODWORD(v8) = (*(_BYTE *)(a1 + 78) & 4) != 0 ? v8 : 0;
LABEL_12:
    if( (_DWORD)v8 )
      goto LABEL_6;
  }
  if( v9 )
  {
    MiUnlockPageTableInternal(v5, v9);
    v9 = 0i64;
  }
LABEL_6:
  *(_QWORD *)(a1 + 64) = v9;
  return(unsigned int)v8;
}

Referenced by:

MiCommitPoolMemory
MiFillPoolCommitPageTable