MiAllocateHyperSpace
VOID *__stdcall MiAllocateHyperSpace(){
unsigned __int64 v0;
unsigned __int64 v1;
_MI_ZERO_THREAD_CONTEXT *MmInternal;
VOID *result;
unsigned __int64 HyperPte;
unsigned __int64 v5;
VOID *v6;
v1 = v0;
MmInternal = (_MI_ZERO_THREAD_CONTEXT *)KeGetCurrentPrcb()->MmInternal;
if( MmInternal )
{
MiGetUltraMapping(MmInternal + 3112, 3i64);
*((_QWORD *)MmInternal + 1543) = (char *)MmGetPteBase() + (((unsigned __int64)result >> 9) & 0x7FFFFFFFF8i64);
}
else
{
HyperPte = (unsigned __int64)KeGetCurrentPrcb()->HyperPte;
v5 = HyperPte & 0xFFFFFFFFFFFFF000ui64;
if( 64 - (HyperPte & 0xFFF) > v0 )
{
v6 = (VOID *)(v5 + ((HyperPte & 0xFFF) << 12));
}
else
{
MiFlushHyperSpace();
HyperPte = v5;
v6 = (VOID *)v5;
}
result = v6;
KeGetCurrentPrcb()->HyperPte = (void *)(HyperPte + v1);
}
return result;
}Referenced by:
MiCopyPage
MiFillPageWithImageExtentContents
MiGetPteMappingPair