MiLockPageTableRange

NTSTATUS __stdcall MiLockPageTableRange(PVOID StartVirtualAddress, PVOID LastVirtualAddress){
  _MMPTE *PteBase; 
  _MMSUPPORT_FULL *p_Vm; 
  char *v5; 
  unsigned __int64 v6; 
  char *v7; 
  UINT64 v8; 
  UINT8 v9; 
  UINT8 v10; 
  unsigned __int64 *v11; 
  unsigned __int64 v12; 
  UINT64 v14; 

  PteBase = MmGetPteBase();
  p_Vm = &KeGetCurrentThread()->ApcState.Process->Vm;
  v5 = (char *)PteBase + (((unsigned __int64)StartVirtualAddress >> 9) & 0x7FFFFFFFF8i64);
  v6 = (unsigned __int64)v5;
  v7 = (char *)PteBase + (((unsigned __int64)LastVirtualAddress >> 9) & 0x7FFFFFFFF8i64);
  MiLockWorkingSetShared();
  v10 = v9;
  if( v5 > v7 )
  {
LABEL_4:
    LOBYTE(v8) = v10;
    MiUnlockWorkingSetShared(&p_Vm->Instance, v8);
    return 0;
  }
  else
  {
    while( 1 )
    {
      LODWORD(v14) = 0;
      v11 = (unsigned __int64 *)((char *)&PteBase->u.Long + ((v6 >> 9) & 0x7FFFFFFFF8i64));
      MiMakeSystemAddressValid((VOID *)v6, 0i64, 0i64, v10, v14);
      v12 = *v11;
      MiPteInShadowRange((UINT64)v11);
      LODWORD(v12) = MiLockPageTablePage(&MmGetPfnDb()[(v12 >> 12) & 0xFFFFFFFFFi64], PageTableLockPrivateFork);
      MiUnlockPageTableInternal((INT64)p_Vm, (UINT64)v11);
      if( !(_DWORD)v12 )
        break;
      PteBase = MmGetPteBase();
      v6 = (v6 & 0xFFFFFFFFFFFFF000ui64) + 4096;
      if( v6 > (unsigned __int64)v7 )
        goto LABEL_4;
    }
    LOBYTE(v8) = v10;
    MiUnlockWorkingSetShared(&p_Vm->Instance, v8);
    if( (char *)v6 != v5 )
      MiUnlockPageTableRange(
        StartVirtualAddress,
        (VOID *)((__int64)(((v6 - 8) << 25) - ((_QWORD)MmGetPteBase() << 25)) >> 16));
    return -1073741670;
  }
}

Referenced by:

MmStoreAllocateVirtualMemory