MiQueryLeafPte
NTSTATUS __stdcall MiQueryLeafPte(_PNP_REPLACEABLE_UNIT *Target, _PNP_REPLACEABLE_UNIT *Spare){
int v2;
__int64 v3;
int v4;
_PNP_REPLACEABLE_UNIT *v5;
unsigned __int64 v6;
__int64 v7;
INT64 v8;
unsigned __int64 v9;
_UNICODE_STRING *v10;
UINT8 v11;
wchar_t *v12;
_MMPFN *v13;
unsigned __int64 v14;
__int64 v15;
__int64 v16;
_UNICODE_STRING *v17;
UINT8 v18;
PWCHAR v19;
__int16 v20;
_UNICODE_STRING *v21;
_UNICODE_STRING *v22;
PWCHAR v23;
int v24;
unsigned __int64 v25;
__int64 v26;
unsigned __int64 v27;
__int64 v28;
int v29;
unsigned __int64 v30;
unsigned __int64 v31;
int v32;
unsigned __int64 v33;
__int64 v35;
INT64 v36;
v3 = *((_QWORD *)Target + 21);
v4 = v2;
v5 = Spare;
v6 = (__int64)(((_QWORD)Spare << 25) - ((_QWORD)MmGetPteBase() << 25)) >> 16;
if( v6 < *(&stru_140C4DB30 + 174) || (LODWORD(v7) = MiHyperSpaceSize(), v6 >= *(&stru_140C4DB30 + 174) + v7) )
{
if( v4 < 1 )
{
LODWORD(v8) = MI_READ_PTE_LOCK_FREE((INT64)v5);
v36 = v8;
if( (v8 & 1) != 0 )
{
LODWORD(v9) = MI_READ_PTE_LOCK_FREE((INT64)&v36);
v13 = &MmGetPfnDb()[(v9 >> 12) & 0xFFFFFFFFFi64];
if( (*(_DWORD *)v3 & 1) != 0 )
{
v14 = *(_QWORD *)(v3 + 16) + 1i64;
*(_QWORD *)(v3 + 16) = v14;
if( v14 < *(_QWORD *)(v3 + 24) )
{
v15 = *(_QWORD *)(v3 + 8);
*(_QWORD *)(v15 + 8 * v14 - 8) = v6 ^ ((unsigned __int16)v6 ^ (unsigned __int16)*(_QWORD *)(v15 + 8 * v14 - 8)) & 0xFFF;
LODWORD(v16) = MiSearchNumaNodeTable((PVOID)((__int64)(48 * ((v9 >> 12) & 0xFFFFFFFFFi64)) / 48));
v17 = (_UNICODE_STRING *)(*(_QWORD *)(v15 + 8 * v14 - 8) ^ (*(_DWORD *)(v15 + 8 * v14 - 8) ^ (*(_DWORD *)(v16 + 8) << 9)) & 0xE00);
*(_QWORD *)(v15 + 8 * v14 - 8) = v17;
LOBYTE(v20) = MI_PFN_IS_PROTO((_UNICODE_STRING *)v13, v17, v18, v19);
*(_QWORD *)(v15 + 8 * v14 - 8) = (unsigned __int64)v21 ^ ((unsigned __int16)v21 ^ (unsigned __int16)(v20 << 8)) & 0x100;
LOBYTE(v24) = MI_PFN_IS_PROTO(v22, v21, (UINT8)v21, v23);
if( v24 )
{
if( (*(_DWORD *)v3 & 2) != 0 )
{
v27 = v26 & 0xFFFFFFFFFFFFF11Fui64 | 0xE0;
}
else
{
LOBYTE(v28) = 7;
if( (v13->u2._bf_0 & 0x3FFFFFFFFFFFFFFFui64) < 7 )
v28 = v13->u2._bf_0 & 0x3FFFFFFFFFFFFFFFi64;
v25 = (unsigned __int8)(v26 ^ (32 * v28)) & 0xE0;
v27 = v25 ^ v26;
}
*(_QWORD *)(v15 + 8 * v14 - 8) = v27;
MiGetPfnProtection((_MMPFN *)v25, (_MMWSLE *)v6);
v30 = *(_QWORD *)(v15 + 8 * v14 - 8) ^ (*(_DWORD *)(v15 + 8 * v14 - 8) ^ v29) & 0x1F;
}
else
{
v31 = v26 & 0xFFFFFFFFFFFFFF1Fui64;
*(_QWORD *)(v15 + 8 * v14 - 8) = v31;
v30 = v31 ^ ((unsigned __int8)v31 ^ (unsigned __int8)((unsigned __int64)*((unsigned int *)&v13->3 + 4) >> 5)) & 0x1F;
}
*(_QWORD *)(v15 + 8 * v14 - 8) = v30;
return 0;
}
return 4;
}
LOBYTE(v32) = MI_PFN_IS_PROTO((_UNICODE_STRING *)v13, v10, v11, v12);
if( v32 )
{
v33 = *(_QWORD *)(v3 + 16) + 1i64;
*(_QWORD *)(v3 + 16) = v33;
if( v33 >= *(_QWORD *)(v3 + 24) )
return 4;
v35 = 32 * v33 + *(_QWORD *)(v3 + 8);
MiIdentifyPfnWrapper(v13, (_MMPFN_IDENTITY *)(v35 - 32));
*(_QWORD *)(v35 - 8) = v6;
}
}
}
}
return 0;
}Referenced by:
No references.