KiUpdateThreadCpuSetAffinitiesFromDpcLevel
VOID __stdcall KiUpdateThreadCpuSetAffinitiesFromDpcLevel(_ETHREAD *Thread, _SINGLE_LIST_ENTRY *ReadyList){
int IdealProcessor;
_KPRCB *updated;
int v6;
_KPRCB *v7;
UINT64 Number;
UINT64 SpinCount;
LODWORD(SpinCount) = 0;
while( _interlockedbittestandset64((volatile signed __int32 *)&Thread->Tcb.ThreadLock, 0i64) )
{
do
KeYieldProcessorEx(&SpinCount);
while( Thread->Tcb.ThreadLock );
}
IdealProcessor = Thread->Tcb.IdealProcessor;
updated = KiUpdateThreadCpuSets(&Thread->Tcb, ReadyList);
v6 = Thread->Tcb.IdealProcessor;
v7 = updated;
KiReleaseThreadLockSafe((INT64)Thread);
if( (xmmword_140CFB490 & 0x8000000) != 0 )
EtwTraceIdealProcessor((__int64)Thread, 0x546u, IdealProcessor, v6);
if( v7 )
{
Number = v7->Number;
if( KeGetPcr()->Prcb.Number != (_DWORD)Number )
KiSendSoftwareInterrupt(Number, 2u);
}
}Referenced by:
KeUpdateThreadCpuSets
KiUpdateThreadCpuSetAffinitiesProcess