MiReferenceOwningSession
NTSTATUS __stdcall MiReferenceOwningSession(_XSTATE_CONFIGURATION *a1){
UINT64 *v1;
_MMPFN *TopLevelPfn;
_MM_SESSION_SPACE *v4;
NTSTATUS v5;
_KLOCK_QUEUE_HANDLE LockHandle;
memset(&LockHandle, 0, sizeof(LockHandle));
TopLevelPfn = MiGetTopLevelPfn((_MMPFN *)a1, v1);
if( (TopLevelPfn->u2._bf_0 & 0x4000000000000000i64) != 0 )
{
if( TopLevelPfn != (_MMPFN *)a1 )
_InterlockedAnd64(&TopLevelPfn->u2.Lock, 0x7FFFFFFFFFFFFFFFui64);
}
else
{
v4 = (_MM_SESSION_SPACE *)(((unsigned __int64)TopLevelPfn->u1.$976DF529DAC3D73085C9E386D94B91E6::$E228DCF3D8940E384DBC5EFCA756D8B6::_bf_0 >> 13) & 0x7FFFFFFFFFF0i64 | 0xFFFF800000000000ui64);
if( TopLevelPfn != (_MMPFN *)a1 )
_InterlockedAnd64(&TopLevelPfn->u2.Lock, 0x7FFFFFFFFFFFFFFFui64);
if( MiTryToAcquireExpansionLockAtDpc(&LockHandle) )
{
v5 = (unsigned int)MiSelectSessionAttachProcess(v4);
KeReleaseInStackQueuedSpinLockFromDpcLevel(&LockHandle);
return v5;
}
}
return 0;
}Referenced by:
MiCapturePfnVm
MiLockStealSystemVm