MiRecheckCombineVm
INT64 __fastcall MiRecheckCombineVm(_MI_PAGE_COMBINING_SUPPORT *Pcs, _MMPFN *PrivatePfn, _MMSUPPORT_INSTANCE *Vm){
CHAR *v3;
CHAR *v4;
int v6;
int v7;
UINT64 TopLevelPfn;
unsigned __int64 v9;
__int64 v10;
CHAR *AnyMultiplexedVm;
v4 = v3;
v6 = MiCombineCandidate(Pcs, PrivatePfn);
v7 = v6;
if( !v6 )
return 0i64;
if( v6 == 2 )
{
AnyMultiplexedVm = MiGetAnyMultiplexedVm(2i64);
}
else
{
TopLevelPfn = MiGetTopLevelPfn((UINT64)Vm);
v9 = (*(_QWORD *)TopLevelPfn >> 13) & 0x7FFFFFFFFFF0i64 | 0xFFFF800000000000ui64;
v10 = (*(_QWORD *)(TopLevelPfn + 24) >> 62) & 1i64;
if( (_MMSUPPORT_INSTANCE *)TopLevelPfn != Vm )
_InterlockedAnd64((volatile signed __int64 *)(TopLevelPfn + 24), 0x7FFFFFFFFFFFFFFFui64);
if( v7 != 1 )
return !(_DWORD)v10 && v4 == (CHAR *)(v9 + 256);
AnyMultiplexedVm = (CHAR *)(v9 + 1664);
}
return v4 == AnyMultiplexedVm;
}Referenced by:
MiConvertStandbyToProto