MxGetPhase0Mapping
VOID *__stdcall MxGetPhase0Mapping(){
_BYTE *v1;
_MMPTE *PteBase;
__int64 v3;
__int64 v4;
if( MiHalScratchPte )
return(VOID *)(((MiHalScratchPte << 25) - ((_QWORD)MmGetPteBase() << 25)) >> 16);
v1 = (char *)MmGetPdeBase() + (((unsigned __int64)MiLowHalVa >> 18) & 0x3FFFFFF8);
PteBase = MmGetPteBase();
while( (*v1 & 1) == 0 )
{
LABEL_9:
v1 += 8;
if( ((unsigned __int16)v1 & 0xFFF) == 0 )
return 0i64;
}
v3 = (__int64)(((_QWORD)v1 << 25) - ((_QWORD)PteBase << 25)) >> 16;
while( 1 )
{
LODWORD(v4) = MI_READ_PTE_LOCK_FREE(v3);
if( !v4 )
break;
v3 += 8i64;
if( (v3 & 0xFFF) == 0 )
goto LABEL_9;
}
MiHalScratchPte = v3;
return(VOID *)(((v3 << 25) - ((_QWORD)PteBase << 25)) >> 16);
}Referenced by:
MiFillPhysicalPages
MiGetPageChain
MxCopyPage
MxSwapPages