KiUpdateThreadCpuSetAffinitiesFromDpcLevel
void __fastcall KiUpdateThreadCpuSetAffinitiesFromDpcLevel(__int64 a1, __int64 a2){
unsigned int v4;
_KPRCB *updated;
unsigned int v6;
_KPRCB *v7;
UINT64 v8;
UINT64 SpinCount;
LODWORD(SpinCount) = 0;
while( _interlockedbittestandset64((volatile signed __int32 *)(a1 + 64), 0i64) )
{
do
KeYieldProcessorEx(&SpinCount);
while( *(_QWORD *)(a1 + 64) );
}
v4 = *(_DWORD *)(a1 + 588);
updated = KiUpdateThreadCpuSets((_KTHREAD *)a1, (_SINGLE_LIST_ENTRY *)a2);
v6 = *(_DWORD *)(a1 + 588);
v7 = updated;
KiReleaseThreadLockSafe(a1);
if( (*(_DWORD *)(&PerfGlobalGroupMask + 2) & 0x8000000) != 0 )
EtwTraceIdealProcessor(a1, 0x546u, v4, v6);
if( v7 )
{
v8 = *((unsigned int *)v7 + 9);
if( *((_DWORD *)KeGetPcr() + 105) != (_DWORD)v8 )
KiSendSoftwareInterrupt(v8, 2u);
}
}Referenced by:
KeUpdateThreadCpuSets
KiUpdateThreadCpuSetAffinitiesProcess