MiLockPageLeafPageTable

INT64 __fastcall MiLockPageLeafPageTable(INT64 a1){
  UINT64 v1; 
  INT64 v2; 
  __int64 v4; 
  _MMPTE *PteBase; 
  unsigned __int64 v6; 
  UINT64 v7; 
  _MMPTE *PxeSelfRef; 
  int v9; 
  INT64 result; 
  int v11; 
  __int64 v12; 
  UINT64 v13; 
  INT64 v14; 
  unsigned __int64 v15; 
  char v16; 
  __int64 v17; 
  __int64 i; 
  __int16 v19; 
  __int64 v20; 
  UINT64 v21; 
  UINT64 v22; 
  __int64 v23; 
  INT64 v24; 
  unsigned __int64 v25; 
  unsigned __int64 v26; 
  __int64 v27; 
  UINT64 v28; 
  v1 = *(_QWORD *)a1;
  v2 = *(_QWORD *)(a1 + 96);
  v4 = (*(_QWORD *)a1 >> 9) & 0x7FFFFFFFF8i64;
  *(_QWORD *)(a1 + 40) = ZeroPte;
  PteBase = MmGetPteBase();
  v6 = (unsigned __int64)PteBase + v4;
  v24 = v6;
  v25 = (unsigned __int64)PteBase + ((v6 >> 9) & 0x7FFFFFFFF8i64);
  v26 = (unsigned __int64)PteBase + ((v25 >> 9) & 0x7FFFFFFFF8i64);
  v7 = *(_QWORD *)(a1 + 32);
  v27 = (__int64)PteBase + ((v26 >> 9) & 0x7FFFFFFFF8i64);
  PxeSelfRef = MmGetPxeSelfRef();
  if( v7 )
  {
    if( (_MMPTE *)v7 == (_MMPTE *)((char *)PteBase + ((*(_QWORD *)(a1 + 16) >> 9) & 0x7FFFFFFFF8i64)) )
      goto LABEL_4;
    MiUnlockPageTableInternal(v2, v7);
    *(_DWORD *)(a1 + 64) &= ~0x20u;
    *(_QWORD *)(a1 + 32) = 0i64;
  }
  v9 = MiFastLockLeafPageTable(v2, v1);
  if( !v9 )
  {
    v11 = 3;
    *(_QWORD *)(a1 + 32) = PxeSelfRef;
    MiLockPageTableInternal(v2, (UINT64)PxeSelfRef, 0i64);
    goto LABEL_10;
  }
  *(_QWORD *)(a1 + 32) = *(&v24 + v9);
  if( v9 != 1 )
  {
    v11 = v9 - 1;
    goto LABEL_10;
  }
LABEL_4:
  while( (*(_QWORD *)v6 & 1) == 0 )
  {
    result = MiFaultInProbeAddress(a1);
    if( (int)result < 0 )
    {
LABEL_26:
      ++dword_140C4E4BC;
      return result;
    }
    *(_QWORD *)(a1 + 32) = PxeSelfRef;
    MiLockPageTableInternal(v2, (UINT64)PxeSelfRef, 0i64);
    v11 = 3;
LABEL_10:
    v12 = v11;
    if( v11 )
    {
      while( 1 )
      {
        v13 = *(&v24 + v12);
        v14 = MI_READ_PTE_LOCK_FREE(v13);
        v28 = v14;
        v15 = v14;
        if( (v14 & 1) != 0 )
        {
          if( (v14 & 0x80u) != 0i64 )
          {
            if( *(_DWORD *)(a1 + 88) == 1 && (v14 & 0x800) == 0 )
            {
              ++dword_140C4E4C4;
              return 3221225477i64;
            }
            v16 = 1;
            MiPteInShadowRange((UINT64)&v28);
            v17 = (v15 >> 12) & 0xFFFFFFFFFi64;
            v1 >>= 12;
            for( i = 1i64; v12; --v12 )
            {
              v19 = v1;
              v1 >>= 9;
              v20 = i * (v19 & 0x1FF);
              i <<= 9;
              v17 += v20;
            }
            v21 = *(_QWORD *)a1;
            v22 = *(_QWORD *)a1;
            *(_QWORD *)(a1 + 128) = v17;
            v23 = ~((i << 12) - 1);
            *(_QWORD *)(a1 + 144) = v23 & v22;
            *(_QWORD *)(a1 + 152) = (v23 & ((i << 12) + v21)) - 1;
            *(_DWORD *)(a1 + 64) |= 0x20u;
            *(_QWORD *)(a1 + 160) = v17 & ~(i - 1);
          }
          else
          {
            v16 = 0;
          }
          MiLockPageTableInternal(v2, v13, 0i64);
          MiUnlockPageTableInternal(v2, *(_QWORD *)(a1 + 32));
          *(_QWORD *)(a1 + 32) = v13;
          if( v16 )
            return 0i64;
          PxeSelfRef = MmGetPxeSelfRef();
        }
        else
        {
          result = MiFaultInProbeAddress(a1);
          if( (int)result < 0 )
            goto LABEL_26;
          *(_QWORD *)(a1 + 32) = PxeSelfRef;
          MiLockPageTableInternal(v2, (UINT64)PxeSelfRef, 0i64);
          v12 = 4i64;
        }
        if( !--v12 )
        {
          v6 = v24;
          goto LABEL_4;
        }
      }
    }
  }
  *(_QWORD *)(a1 + 40) = *(_QWORD *)v6;
  return 0i64;
}

Referenced by:

MiProbeAndLockPages
MiProbeLeafFrame