MiMakeSystemCachePteValid
VOID __stdcall MiMakeSystemCachePteValid(POHANDLE *ptr32, HANDLE PointerPte, INT8 a4){
char v3;
char v5;
unsigned __int64 v6;
_QWORD *v8;
int v9;
UINT64 v10;
char *v11;
UINT64 ValidPte;
__int64 v13;
__int64 v14;
unsigned __int64 v15;
int Wsle;
__int64 v17;
_CONTROL_AREA *v18;
_FILE_OBJECT *v19;
unsigned __int64 v20;
__int64 v21;
UINT8 v22;
UINT64 v23;
UINT64 v24;
BYTE v25;
UINT64 v26;
v26 = a4;
v25 = 0;
v5 = v3;
v6 = a4;
MiPteInShadowRange((UINT64)&v26);
v8 = (_QWORD *)((char *)MmGetPfnDb() + 48 * ((v6 >> 12) & 0xFFFFFFFFFi64));
v9 = 0;
v23 = MI_READ_PTE_LOCK_FREE((INT64)MmGetPteBase() + (((unsigned __int64)PointerPte >> 9) & 0x7FFFFFFFF8i64));
v10 = v23;
MiPteInShadowRange((UINT64)&v23);
v11 = (char *)MmGetPfnDb() + 48 * ((v10 >> 12) & 0xFFFFFFFFFi64);
v22 = MiLockPageInline((INT64)v11);
*((_QWORD *)v11 + 3) ^= (*((_QWORD *)v11 + 3) ^ (*((_QWORD *)v11 + 3) + 1i64)) & 0x3FFFFFFFFFFFFFFFi64;
_InterlockedAnd64((volatile signed __int64 *)v11 + 3, 0x7FFFFFFFFFFFFFFFui64);
v24 = (UINT64)MiLockWorkingSetOptimal((INT64)ptr32, (UINT64)PointerPte, &v25);
v23 = MI_READ_PTE_LOCK_FREE((INT64)PointerPte);
if( (v23 & 1) != 0 )
{
Wsle = 0;
v15 = 0i64;
v14 = 0i64;
goto LABEL_7;
}
ValidPte = v26;
if( (v23 & 8) != 0 )
ValidPte = MiMakeValidPte((UINT64)PointerPte, (v26 >> 12) & 0xFFFFFFFFFi64, 536870913i64);
v13 = ValidPte & 0xFFFFFFFFFFFFFEFBui64 | ((unsigned __int64)(word_140C4DD48 & 1) << 8);
if( (v5 & 8) != 0 && MiIsPfnFileOnly((INT64)v8) )
v13 &= 0xFFFFFFFFFFFFFFBDui64;
LODWORD(v21) = 0;
v14 = v8[2];
v15 = v8[1] | 0x8000000000000000ui64;
Wsle = MiAllocateWsle((__int64)ptr32, (unsigned __int64)PointerPte, v8, 0, v13, v21, 0i64);
if( Wsle )
{
if( PfSnNumActiveTraces && (v14 & 0x400) != 0 )
v9 = 1;
LABEL_7:
if( Wsle )
goto LABEL_8;
}
MiLockAndDecrementShareCount((UINT64)v8, 0);
MiLockAndDecrementShareCount((UINT64)v11, 0);
LABEL_8:
MiUnlockPageTableInternal((INT64)ptr32, v24);
MiUnlockWorkingSetShared((INT64)ptr32, v22);
if( v9 )
{
if( qword_140C4DC80 )
{
if( (v14 & 0x10) == 0 )
v14 &= ~qword_140C4DC80;
}
v17 = v14 >> 16;
v18 = *(_CONTROL_AREA **)v17;
v19 = MiReferenceControlAreaFile(*(_CONTROL_AREA **)v17);
v20 = MiStartingOffset(v17, v15, 0xFFFFFFFF);
PfSnLogPageFault(v19, v20, 4ui64);
MiDereferenceControlAreaFile((__int64)v18, (unsigned __int64)v19);
}
}Referenced by:
MmCopyToCachedPage