KiCreateCpuSetForProcessor
VOID __fastcall KiCreateCpuSetForProcessor(_KPRCB *Prcb){
unsigned __int8 CurrentIrql;
__int64 v3;
int v4;
__int64 v5;
__int64 v6;
__int64 v7;
_QWORD *v8;
if( KiCpuSetAffinities )
{
CurrentIrql = KeGetCurrentIrql();
__writecr8(2ui64);
v3 = *((unsigned __int8 *)Prcb + 208);
KxAcquireSpinLock(&KiCpuSetLock);
RtlWriteAcquireTickLock(&KiCpuSetSequence);
v4 = *((unsigned __int8 *)Prcb + 209);
++*((_BYTE *)KiCpuSetCount + v3);
v5 = (unsigned int)v3;
v6 = *((_QWORD *)Prcb + 25);
++KiTotalCpuSetCount;
v7 = (unsigned int)(v4 + ((_DWORD)v3 << 6));
*(_QWORD *)&KiCpuSetAffinities[8 * v7] = v6;
*(_QWORD *)&KiCpuSetAffinitiesShadow[8 * v7] = *((_QWORD *)Prcb + 25);
KiSystemAllowedCpuSets[2 * (unsigned int)v5] |= 1i64 << v4;
KiNonParkedCpuSets[v5] |= 1i64 << v4;
v8 = (_QWORD *)((char *)PsInitialSystemProcess + 2376);
if( (*((_DWORD *)PsInitialSystemProcess + 543) & 0x80u) != 0 )
v8 = (_QWORD *)*v8;
v8[v5] |= 1i64 << v4;
RtlWriteReleaseTickLock(&KiCpuSetSequence);
KxReleaseSpinLock(&KiCpuSetLock);
__writecr8(CurrentIrql);
}
}Referenced by:
KiAllocateCpuSetData
KiCompleteKernelInit