MiLockProtoPage

MMPTE *__stdcall MiLockProtoPage(MMPTE *ProtoPte, MMPTE *LastProtoPte, UINT8 WsIrql){
  __int64 v5; 
  UINT64 v6; 
  char *v7; 
  unsigned __int64 v8; 
  UINT64 v10; 
  v5 = *((_QWORD *)KeGetCurrentThread() + 23);
  if( LastProtoPte )
  {
    v10 = MI_READ_PTE_LOCK_FREE((INT64)MmGetPteBase() + (((unsigned __int64)LastProtoPte >> 9) & 0x7FFFFFFFF8i64));
    v6 = v10;
    MiPteInShadowRange((UINT64)&v10);
    v7 = (char *)MmGetPfnDb() + 48 * ((v6 >> 12) & 0xFFFFFFFFFi64);
    v8 = (unsigned __int8)MiLockPageInline((INT64)v7);
    MiRemoveLockedPageChargeAndDecRef((_MMPFN *)v7);
    _InterlockedAnd64((volatile signed __int64 *)v7 + 3, 0x7FFFFFFFFFFFFFFFui64);
    __writecr8(v8);
    if( !ProtoPte )
      return 0i64;
  }
  MiUnlockWorkingSetShared(v5 + 1664, WsIrql);
  MiMakeProtoAddressValid(ProtoPte);
  MiLockWorkingSetShared(v5 + 1664);
  return ProtoPte;
}

Referenced by:

MiGetWorkingSetInfoList