MiReferenceOwningSession
_EPROCESS *__fastcall MiReferenceOwningSession(ULONG_PTR a1){
UINT64 TopLevelPfn;
_MM_SESSION_SPACE *v3;
_EPROCESS *v4;
struct _KLOCK_QUEUE_HANDLE LockHandle;
memset(&LockHandle, 0, sizeof(LockHandle));
TopLevelPfn = MiGetTopLevelPfn(a1);
if( (*(_QWORD *)(TopLevelPfn + 24) & 0x4000000000000000i64) != 0 )
{
if( TopLevelPfn != a1 )
_InterlockedAnd64((volatile signed __int64 *)(TopLevelPfn + 24), 0x7FFFFFFFFFFFFFFFui64);
}
else
{
v3 = (_MM_SESSION_SPACE *)((*(_QWORD *)TopLevelPfn >> 13) & 0x7FFFFFFFFFF0i64 | 0xFFFF800000000000ui64);
if( TopLevelPfn != a1 )
_InterlockedAnd64((volatile signed __int64 *)(TopLevelPfn + 24), 0x7FFFFFFFFFFFFFFFui64);
if( (unsigned int)MiTryToAcquireExpansionLockAtDpc(&LockHandle) )
{
v4 = MiSelectSessionAttachProcess(v3);
KeReleaseInStackQueuedSpinLockFromDpcLevel(&LockHandle);
return v4;
}
}
return 0i64;
}Referenced by:
MiCapturePfnVm
MiLockStealSystemVm