PspUpdateSingleProcessAffinity
VOID __stdcall PspUpdateSingleProcessAffinity(_ETHREAD *CurrentThread, _EPROCESS *Process, _KAFFINITY_EX *Affinity){
_EX_PUSH_LOCK *p_ProcessLock;
NTSTATUS v7;
UINT64 AffinitySet;
if( (Process->Flags2 & 0x80000) != 0 )
{
p_ProcessLock = &Process->ProcessLock;
LODWORD(AffinitySet) = 0;
v7 = 0;
ExAcquirePushLockSharedEx(&Process->ProcessLock, 0i64);
if( (Process->Flags2 & 0x80000) != 0 )
v7 = PspSetProcessAffinitySafe(Process, 2ui64, Affinity, 0i64, &AffinitySet);
if( _InterlockedCompareExchange64(&p_ProcessLock->_bf_0, 0i64, 17i64) != 17 )
ExfReleasePushLockShared(p_ProcessLock);
KeAbPostRelease(p_ProcessLock);
if( v7 >= 0 )
{
if( (_DWORD)AffinitySet )
PspWritePebAffinityInfo(CurrentThread, (_EX_RUNDOWN_REF *)Process);
}
}
}Referenced by:
PsUpdateActiveProcessAffinity
PspSetProcessAffinityUpdateMode