MiUpdatePfnBackingStore

CHAR __fastcall MiUpdatePfnBackingStore(INT64 a1, INT64 a2, UINT64 a3, INT64 a4){
  unsigned __int8 v4; 
  int v5; 
  unsigned int v6; 
  UINT64 v9; 
  int v10; 
  _ETHREAD *CurrentThread; 
  bool v12; 
  v4 = 0;
  v5 = a4;
  v6 = a3;
  if( !(_DWORD)a4 )
    v4 = MiLockPageInline(a1);
  v9 = MiTransferSoftwarePte(*(_QWORD *)(a1 + 16), a2, v6);
  v10 = 0;
  LODWORD(CurrentThread) = MiPteInShadowRange(a1 + 16);
  if( (_DWORD)CurrentThread )
  {
    LODWORD(CurrentThread) = MiPteHasShadow();
    if( (_DWORD)CurrentThread )
    {
      v10 = 1;
      if( HIBYTE(word_140C4DD48) )
        goto LABEL_4;
      v12 = (v9 & 1) == 0;
    }
    else
    {
      CurrentThread = (_ETHREAD *)KeGetCurrentThread();
      if( (*(_DWORD *)(*((_QWORD *)CurrentThread + 23) + 2172i64) & 0x1000) == 0 )
        goto LABEL_4;
      v12 = (v9 & 1) == 0;
    }
    if( !v12 )
    {
      LOBYTE(CurrentThread) = 0;
      v9 |= 0x8000000000000000ui64;
    }
  }
LABEL_4:
  *(_QWORD *)(a1 + 16) = v9;
  if( v10 )
    LOBYTE(CurrentThread) = MiWritePteShadow();
  if( !v5 )
  {
    _InterlockedAnd64((volatile signed __int64 *)(a1 + 24), 0x7FFFFFFFFFFFFFFFui64);
    LOBYTE(CurrentThread) = v4;
    __writecr8(v4);
  }
  return(char)CurrentThread;
}

Referenced by:

MiGatherPagefilePages
MiStoreWriteModifiedPages