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