MiLockPageTableRange

NTSTATUS __stdcall MiLockPageTableRange(PVOID StartVirtualAddress, PVOID LastVirtualAddress){
  _MMPTE *PteBase; 
  INT64 v4; 
  char *v5; 
  UINT64 v6; 
  char *v7; 
  UINT8 v8; 
  unsigned __int64 *v9; 
  unsigned __int64 v10; 
  PteBase = MmGetPteBase();
  v4 = *((_QWORD *)KeGetCurrentThread() + 23) + 1664i64;
  v5 = (char *)PteBase + (((unsigned __int64)StartVirtualAddress >> 9) & 0x7FFFFFFFF8i64);
  v6 = (UINT64)v5;
  v7 = (char *)PteBase + (((unsigned __int64)LastVirtualAddress >> 9) & 0x7FFFFFFFF8i64);
  v8 = MiLockWorkingSetShared(v4);
  if( v5 > v7 )
  {
LABEL_4:
    MiUnlockWorkingSetShared(v4, v8);
    return 0;
  }
  else
  {
    while( 1 )
    {
      v9 = (unsigned __int64 *)((char *)PteBase + ((v6 >> 9) & 0x7FFFFFFFF8i64));
      MiMakeSystemAddressValid(v6, 0i64, 0i64, v8, 0);
      v10 = *v9;
      MiPteInShadowRange((UINT64)v9);
      LODWORD(v10) = MiLockPageTablePage((_MMPFN *)((char *)MmGetPfnDb() + 48 * ((v10 >> 12) & 0xFFFFFFFFFi64)), 2i64);
      MiUnlockPageTableInternal(v4, (UINT64)v9);
      if( !(_DWORD)v10 )
        break;
      PteBase = MmGetPteBase();
      v6 = (v6 & 0xFFFFFFFFFFFFF000ui64) + 4096;
      if( v6 > (unsigned __int64)v7 )
        goto LABEL_4;
    }
    MiUnlockWorkingSetShared(v4, v8);
    if( (char *)v6 != v5 )
      MiUnlockPageTableRange(
        (UINT64 *)StartVirtualAddress,
        (UINT64 *)((__int64)(((v6 - 8) << 25) - ((_QWORD)MmGetPteBase() << 25)) >> 16));
    return -1073741670;
  }
}

Referenced by:

MmStoreAllocateVirtualMemory