MiIsCfgBitMapPageShared
VOID __fastcall MiIsCfgBitMapPageShared(VOID *Va, _MMVAD *Vad, INT64 a3, INT64 a4, UINT8 WsIrql){
_MMPTE *PteBase;
unsigned __int64 v6;
_MMSUPPORT_FULL *p_Vm;
UINT8 v8;
UINT8 v9;
UINT64 v10;
UINT64 v11;
INT64 v12;
UINT64 v13;
unsigned __int64 v14;
_UNICODE_STRING *v15;
UINT8 v16;
PWCHAR v17;
int v18;
UINT64 v19;
UINT64 v20;
UINT64 LargePage;
INT64 v22;
LODWORD(LargePage) = 0;
PteBase = MmGetPteBase();
v6 = (unsigned __int64)PteBase + (((unsigned __int64)Va >> 9) & 0x7FFFFFFFF8i64);
p_Vm = &KeGetCurrentThread()->ApcState.Process->Vm;
MiLockWorkingSetShared();
v9 = v8;
LODWORD(v19) = 0;
if( (_MMPTE *)v6 == MiGetNextPageTable((_MMPTE *)v6, (_MMPTE *)v6, 0i64, v8, v19, &LargePage, v20) )
{
v11 = (UINT64)PteBase + ((v6 >> 9) & 0x7FFFFFFFF8i64);
LODWORD(v12) = MI_READ_PTE_LOCK_FREE(v6);
v22 = v12;
v13 = v12;
if( v12 )
{
MiGetProtoPteAddress();
if( (v13 & 1) != 0 )
{
LODWORD(v14) = MI_READ_PTE_LOCK_FREE((INT64)&v22);
LOBYTE(v18) = MI_PFN_IS_PROTO((_UNICODE_STRING *)&MmGetPfnDb()[(v14 >> 12) & 0xFFFFFFFFFi64], v15, v16, v17);
if( v18 )
v10 = 0x8000000000000000ui64;
}
else if( (v13 & 0x400) != 0 )
{
MiIsPrototypePteVadLookup(v13);
}
}
if( v11 )
MiUnlockPageTableInternal((INT64)p_Vm, v11);
}
LOBYTE(v10) = v9;
MiUnlockWorkingSetShared(&p_Vm->Instance, v10);
}Referenced by:
MiMarkSharedImageCfgBits