MiRecheckCombineVm
NTSTATUS __stdcall MiRecheckCombineVm(_MI_PAGE_COMBINING_SUPPORT *Pcs, _MMPFN *PrivatePfn, _MMSUPPORT_INSTANCE *Vm){
_MMSUPPORT_INSTANCE *v3;
_MMSUPPORT_INSTANCE *v4;
_MI_COMBINE_CANDIDATE v6;
VOID *v7;
_MI_COMBINE_CANDIDATE v8;
_MMPFN *TopLevelPfn;
unsigned __int64 v10;
__int64 v11;
_MMSUPPORT_INSTANCE *AnyMultiplexedVm;
v4 = v3;
v6 = MiCombineCandidate(Pcs, PrivatePfn);
v8 = v6;
if( v6 == MiCombineNone )
return 0;
if( v6 == MiCombinePagedPool )
{
AnyMultiplexedVm = MiGetAnyMultiplexedVm(MiWorkingSetTypePagedPool, v7);
}
else
{
TopLevelPfn = MiGetTopLevelPfn((_MMPFN *)Vm, (UINT64 *)v7);
v10 = ((unsigned __int64)TopLevelPfn->u1.$976DF529DAC3D73085C9E386D94B91E6::$E228DCF3D8940E384DBC5EFCA756D8B6::_bf_0 >> 13) & 0x7FFFFFFFFFF0i64 | 0xFFFF800000000000ui64;
v11 = ((unsigned __int64)TopLevelPfn->u2._bf_0 >> 62) & 1;
if( TopLevelPfn != (_MMPFN *)Vm )
_InterlockedAnd64(&TopLevelPfn->u2.Lock, 0x7FFFFFFFFFFFFFFFui64);
if( v8 != MiCombineUser )
return !(_DWORD)v11 && v4 == (_MMSUPPORT_INSTANCE *)(v10 + 256);
AnyMultiplexedVm = (_MMSUPPORT_INSTANCE *)(v10 + 1664);
}
return v4 == AnyMultiplexedVm;
}Referenced by:
MiConvertStandbyToProto