MiLockPagedAddress

UINT64 __stdcall MiLockPagedAddress(PVOID VirtualAddress){
  _MMPTE *PteBase; 
  UINT64 v3; 
  UINT64 v4; 
  UINT64 v5; 
  CHAR *AnyMultiplexedVm; 
  UINT8 v7; 
  INT64 v8; 
  unsigned __int64 v9; 
  char *v10; 
  unsigned int v11; 
  char v12; 
  NTSTATUS v14; 
  ULONG_PTR v15; 
  int v16; 
  ULONG_PTR BugCheckParameter4; 
  INT64 v18; 
  INT64 v19; 
  INT64 v20; 
  INT64 v21; 
  INT64 v22; 
  INT64 v23; 
  INT64 v24; 
  UINT64 SpinCount; 
  UINT64 v26; 
  PteBase = MmGetPteBase();
  v3 = (UINT64)PteBase + (((unsigned __int64)VirtualAddress >> 9) & 0x7FFFFFFFF8i64);
  v4 = 0i64;
  v5 = (UINT64)PteBase + ((v3 >> 9) & 0x7FFFFFFFF8i64);
  AnyMultiplexedVm = MiGetAnyMultiplexedVm(2i64);
  v7 = MiLockWorkingSetShared((INT64)AnyMultiplexedVm);
  while( 1 )
  {
    while( 1 )
    {
      MiMakeSystemAddressValid(v3, 0i64, 0i64, v7, 4);
      v8 = MI_READ_PTE_LOCK_FREE(v3);
      v26 = v8;
      v9 = v8;
      if( (v8 & 1) != 0 )
        break;
      MiUnlockPageTableInternal((INT64)AnyMultiplexedVm, v5);
      MiUnlockWorkingSetShared((INT64)AnyMultiplexedVm, v7);
      v14 = MmAccessFault(0i64, VirtualAddress, 0, 0i64);
      v15 = v14;
      if( v14 < 0 )
      {
        MiFlushAllFilesystemPages();
        KeBugCheckEx(0x7Au, 2ui64, v15, 0i64, (ULONG_PTR)VirtualAddress);
      }
LABEL_18:
      MiLockWorkingSetShared((INT64)AnyMultiplexedVm);
    }
    if( (v8 & 0x200) == 0 )
      break;
    v16 = MiCopyOnWrite((__int64)((v3 << 25) - ((_QWORD)MmGetPteBase() << 25)) >> 16, (UINT64 *)v3, -1i64, 0i64);
    MiUnlockPageTableInternal((INT64)AnyMultiplexedVm, v5);
    if( v16 < 0 )
    {
      MiUnlockWorkingSetShared((INT64)AnyMultiplexedVm, v7);
      MiCopyOnWriteCheckConditions((INT64)AnyMultiplexedVm, (unsigned int)v16);
      goto LABEL_18;
    }
  }
  MiPteInShadowRange((UINT64)&v26);
  v10 = (char *)MmGetPfnDb() + 48 * ((v9 >> 12) & 0xFFFFFFFFFi64);
  LODWORD(SpinCount) = 0;
  while( _interlockedbittestandset64((volatile signed __int32 *)v10 + 6, 0x3Fui64) )
  {
    do
      KeYieldProcessorEx(&SpinCount);
    while( *((__int64 *)v10 + 3) < 0 );
  }
  if( (unsigned int)MiAddLockedPageCharge((INT64)v10, 0) )
  {
    v11 = 1;
    v4 = MiCaptureDirtyBitToPfn((INT64)v10);
  }
  else
  {
    v11 = 0;
  }
  _InterlockedAnd64((volatile signed __int64 *)v10 + 3, 0x7FFFFFFFFFFFFFFFui64);
  if( v11 )
  {
    if( v4 )
      MiReleasePageFileInfo(
        *(_QWORD *)(qword_140C4E388 + 8 * ((*((_QWORD *)v10 + 5) >> 39) & 0x3FFi64)),
        v4,
        1,
        (*((_QWORD *)v10 + 5) >> 39) & 0x3FFi64,
        BugCheckParameter4,
        v18,
        v19,
        v20,
        v21,
        v22,
        v23,
        v24);
    v12 = MI_READ_PTE_LOCK_FREE(v3);
    if( (v12 & 0x20) == 0 || (v12 & 0x42) == 0 )
      MiWriteValidPteVolatile((MMPTE *)v3, 3ui64);
    if( (MiFlags & 0x100) == 0 )
      KeFlushSingleTb(VirtualAddress, 0i64, 1i64);
  }
  MiUnlockPageTableInternal((INT64)AnyMultiplexedVm, v5);
  MiUnlockWorkingSetShared((INT64)AnyMultiplexedVm, v7);
  return v11;
}

Referenced by:

MiLockPagedRange