MiMakeSystemCachePteValid
VOID __stdcall MiMakeSystemCachePteValid(POHANDLE *ptr32, _HANDLE PointerPte, INT8 a4){
char v3;
char v5;
unsigned __int64 v6;
UINT64 v7;
_MMPFN *v8;
int v9;
UINT64 v10;
UINT64 v11;
_MMPFN *v12;
UINT64 v13;
UINT64 v14;
unsigned __int64 PteContents;
__int64 bf_0;
_MMPTE *v17;
NTSTATUS Wsle;
UINT64 v19;
__int64 v20;
_CONTROL_AREA *v21;
_FILE_OBJECT *v22;
UINT64 v23;
UINT64 v24;
int v25;
_MI_FAULT_VA_LIST *v26;
UINT8 WsIrql;
UINT64 v28;
UINT64 v29;
char v30;
UINT64 v31;
v31 = a4;
v30 = 0;
v5 = v3;
v6 = a4;
v7 = *(_QWORD *)&PointerPte;
MiPteInShadowRange((UINT64)&v31);
v8 = &MmGetPfnDb()[(v6 >> 12) & 0xFFFFFFFFFi64];
v9 = 0;
LODWORD(v10) = MI_READ_PTE_LOCK_FREE((INT64)MmGetPteBase() + ((v7 >> 9) & 0x7FFFFFFFF8i64));
v28 = v10;
v11 = v10;
MiPteInShadowRange((UINT64)&v28);
v12 = &MmGetPfnDb()[(v11 >> 12) & 0xFFFFFFFFFi64];
WsIrql = MiLockPageInline(v12);
v12->u2._bf_0 ^= (v12->u2._bf_0 ^ (v12->u2._bf_0 + 1)) & 0x3FFFFFFFFFFFFFFFi64;
_InterlockedAnd64(&v12->u2.Lock, 0x7FFFFFFFFFFFFFFFui64);
v29 = (UINT64)MiLockWorkingSetOptimal((INT64)ptr32, v7, &v30);
LODWORD(v13) = MI_READ_PTE_LOCK_FREE(v7);
v28 = v13;
if( (v13 & 1) != 0 )
{
Wsle = 0;
v17 = 0i64;
bf_0 = 0i64;
goto LABEL_7;
}
v14 = v31;
if( (v28 & 8) != 0 )
{
LODWORD(v24) = MiMakeValidPte((_XSTATE_CONFIGURATION *)v7, (v31 >> 12) & 0xFFFFFFFFFi64, 536870913i64);
v14 = v24;
}
PteContents = v14 & 0xFFFFFFFFFFFFFEFBui64 | ((unsigned __int64)(*(&stru_140C4DB30 + 536) & 1) << 8);
if( (v5 & 8) != 0 )
{
LOBYTE(v25) = MiIsPfnFileOnly((INT64)v8);
if( v25 )
PteContents &= 0xFFFFFFFFFFFFFFBDui64;
}
LODWORD(v26) = 0;
bf_0 = v8->OriginalPte.u.Hard.$976DF529DAC3D73085C9E386D94B91E6::$E228DCF3D8940E384DBC5EFCA756D8B6::_bf_0;
v17 = (_MMPTE *)(v8->PteLong | 0x8000000000000000ui64);
Wsle = MiAllocateWsle((_MMSUPPORT_INSTANCE *)ptr32, (_MMPTE *)v7, v8, 0i64, (_MMPTE)PteContents, v26);
if( Wsle )
{
if( PfSnNumActiveTraces && (bf_0 & 0x400) != 0 )
v9 = 1;
LABEL_7:
if( Wsle )
goto LABEL_8;
}
MiLockAndDecrementShareCount(v8, 0i64);
MiLockAndDecrementShareCount(v12, 0i64);
LABEL_8:
MiUnlockPageTableInternal((INT64)ptr32, v29);
LOBYTE(v19) = WsIrql;
MiUnlockWorkingSetShared((_MMSUPPORT_INSTANCE *)ptr32, v19);
if( v9 )
{
if( *(&stru_140C4DB30 + 42) )
{
if( (bf_0 & 0x10) == 0 )
bf_0 &= ~*(&stru_140C4DB30 + 42);
}
v20 = bf_0 >> 16;
v21 = *(_CONTROL_AREA **)v20;
v22 = MiReferenceControlAreaFile(*(_CONTROL_AREA **)v20);
LODWORD(v23) = MiStartingOffset((_SUBSECTION *)v20, v17, 0xFFFFFFFFui64);
PfSnLogPageFault(v22, v23, 4ui64);
MiDereferenceControlAreaFile(v21, v22);
}
}Referenced by:
MmCopyToCachedPage