MiUpdateOldPte
INT64 __fastcall MiUpdateOldPte(INT64 a1, UINT64 a2, INT64 a3){
INT64 v5;
UNICODE_STRING *v6;
INT64 v7;
unsigned __int64 v8;
UNICODE_STRING *v9;
UINT8 v10;
WCHAR *v11;
__int64 v12;
int v13;
UINT64 *v14;
INT64 a5;
if( (int)a3 >= 1 )
return 0i64;
v5 = *(_QWORD *)(a1 + 24);
a5 = MI_READ_PTE_LOCK_FREE(a2);
v6 = (UNICODE_STRING *)((char *)MmGetPfnDb()
+ 48 * (((unsigned __int64)MI_READ_PTE_LOCK_FREE((INT64)&a5) >> 12) & 0xFFFFFFFFFi64));
if( !(unsigned int)MiWalkVaCheckCommon(v5, a2, v6, 1i64, (INT64)&a5) )
return 0i64;
v8 = (__int64)((a2 << 25) - ((_QWORD)MmGetPteBase() << 25)) >> 16;
if( MiGetVaAge(v7, v8) != 6 )
return 0i64;
v12 = *(_QWORD *)(a1 + 168);
if( ((__int64)v6[1].Buffer & 0x3FFFFFFFFFFFFFFFi64) == 1 )
{
if( (*(_DWORD *)v12 & 1) == 0 || (LOBYTE(v13) = MI_PFN_IS_PROTO(v6, v9, v10, v11), !v13) )
{
if( (((unsigned __int64)a5 >> 5) & 1) != 0 && (v14 = *(UINT64 **)(v12 + 208)) != 0i64 && v8 <= 0x7FFFFFFEFFFFi64 )
{
if( (unsigned int)MiInsertVmAccessedEntry(v14, v8) )
return MiUpdateOldWorkingSetPagesTail(a1);
}
else if( (((unsigned __int64)a5 >> 5) & 1) == 0 )
{
MiUpdateOldPteWorker(v5, a2, (INT64)v6);
}
}
}
if( ++*(_QWORD *)(v12 + 16) >= *(_QWORD *)(v12 + 8) )
return 3i64;
else
return 0i64;
}Referenced by:
No references.