MiStoreCheckCandidatePage
NTSTATUS __stdcall MiStoreCheckCandidatePage(
PVOID Pfn1,
UINT64 StorePageFileOffset,
_MM_STORE_KEY *StoreKeyOut,
_MM_STORE_KEY_DESCRIPTOR *StoreKeyDescriptorOut,
VOID **OpaqueContext){
NTSTATUS v5;
__int64 v9;
int v10;
unsigned __int64 v11;
__int64 v12;
unsigned __int64 v13;
UINT64 *v14;
int v15;
_MMPFN *TopLevelPfn;
_EPROCESS *v17;
char PfnPriority;
char v19;
int v20;
_QWORD *v21;
__int128 v23;
VOID *v24;
v5 = 0;
*(_QWORD *)&v23 = 0i64;
v9 = (unsigned int)StorePageFileOffset | ((unsigned __int64)*(unsigned int *)(*(_QWORD *)(*(&stru_140C4DB30 + 267)
+ 8
* ((*((_QWORD *)Pfn1 + 5) >> 39) & 0x3FFi64))
+ 1156i64) << 60);
LOBYTE(v10) = MI_PFN_IS_PROTO(
(_UNICODE_STRING *)Pfn1,
(_UNICODE_STRING *)StorePageFileOffset,
(UINT8)StoreKeyOut,
(PWCHAR)StoreKeyDescriptorOut);
if( v10 )
{
*(_QWORD *)&v23 = *((_QWORD *)Pfn1 + 1) | 0x8000000000000000ui64;
*((_QWORD *)&v23 + 1) = 3i64;
goto LABEL_22;
}
v11 = *((_QWORD *)Pfn1 + 1) | 0x8000000000000000ui64;
v12 = (_QWORD)MmGetPteBase() << 25;
if( MiGetSystemRegionType(v11) == 5 )
{
*(_QWORD *)&v23 = v11 - 1432;
*((_QWORD *)&v23 + 1) = ((((_QWORD)MmGetPxeSelfRef() << 25) - v12) >> 16) & 0xFFFFFFFFFFFFFFFCui64;
LABEL_22:
v24 = *OpaqueContext;
PfnPriority = MiGetPfnPriority((_MMPFN *)Pfn1);
v19 = (*((_BYTE *)Pfn1 + 34) & 0xC0) - 64;
StoreKeyOut->_bf_0 = v9;
LODWORD(v24) = v20 | (unsigned int)v24 & 0xFFF90C00 | (v19 != 0 ? 0x20000 : 0) | ((PfnPriority & 7) << 13) | 0xC00;
*v21 = v24;
*(_OWORD *)StoreKeyDescriptorOut = v23;
return v5;
}
v13 = (__int64)((v11 << 25) - v12) >> 16;
HIDWORD(v23) = HIDWORD(v13);
if( MiGetSystemRegionType(v13) != 1
&& v13 > 0x7FFFFFFEFFFFi64
&& (v13 < *(&stru_140C4DB30 + 937) || v13 > *(&stru_140C4DB30 + 175))
&& (v13 < (unsigned __int64)MmGetPteBase() || v13 > (unsigned __int64)MmGetPteLimit()) )
{
v15 = v13 & 0xFFFFFFFC | 2;
goto LABEL_21;
}
TopLevelPfn = MiGetTopLevelPfn((_MMPFN *)Pfn1, v14);
if( TopLevelPfn != Pfn1 )
{
v17 = (_EPROCESS *)(((unsigned __int64)TopLevelPfn->u1.$976DF529DAC3D73085C9E386D94B91E6::$E228DCF3D8940E384DBC5EFCA756D8B6::_bf_0 >> 13) & 0x7FFFFFFFFFF0i64 | 0xFFFF800000000000ui64);
*(_QWORD *)&v23 = v17;
_InterlockedAnd64(&TopLevelPfn->u2.Lock, 0x7FFFFFFFFFFFFFFFui64);
if( MiGetSystemRegionType(v13) == 1 )
{
v15 = v13 & 0xFFFFFFFC | 1;
}
else
{
if( MiIsStoreProcess(v17) )
return -1073741401;
v15 = v13 & 0xFFFFFFFC;
}
LABEL_21:
DWORD2(v23) = v15;
goto LABEL_22;
}
return -1073741253;
}Referenced by:
MiStoreWriteModifiedPages