MmGetCacheAttributeEx
INT64 __fastcall MmGetCacheAttributeEx(UINT64 a1, INT64 a2, _DWORD *a3){
ULONG_PTR v5;
int v6;
RTL_BALANCED_NODE *v7;
if( (a2 & 0xFFFFFFFE) != 0 )
return 3221225712i64;
v5 = a1 >> 12;
if( a1 >> 12 <= 0xFFFFFFFFFi64 && ((*((_QWORD *)MmGetPfnDb() + 6 * v5 + 5) >> 50) & 1) != 0 )
{
if( !*((_WORD *)MmGetPfnDb() + 24 * v5 + 16) && (struct _KTHREAD *)qword_140C4E448 != KeGetCurrentThread() )
KeBugCheckEx(0x1Au, 0x1232ui64, v5, *((_BYTE *)MmGetPfnDb() + 48 * v5 + 34) & 7, 0i64);
v6 = *((unsigned __int8 *)MmGetPfnDb() + 48 * v5 + 34) >> 6;
}
else
{
if( (a2 & 1) == 0 )
return 3221225793i64;
v7 = MiLookupIoPageNode(v5);
if( v7 )
v6 = *((unsigned __int16 *)v7[2].Children[0]->Children + (v5 & 0xFFFFFFFFFi64) - v7[1].ParentValue) >> 14;
else
v6 = 3;
}
switch( v6 )
{
case 1:
*a3 = 1;
return 0i64;
case 0:
*a3 = 0;
return 0i64;
case 2:
*a3 = 2;
return 0i64;
}
return 3221225711i64;
}Referenced by:
MmGetCacheAttribute