KiCreateCpuSetForProcessor
VOID __stdcall KiCreateCpuSetForProcessor(_KPRCB *Prcb){
unsigned __int8 CurrentIrql;
__int64 Group;
int GroupIndex;
__int64 v5;
unsigned __int64 GroupSetMember;
__int64 v7;
$991E1CBB7797929499350D8948279CF6 *v8;
if( KiCpuSetAffinities )
{
CurrentIrql = KeGetCurrentIrql();
__writecr8(2ui64);
Group = Prcb->Group;
KxAcquireSpinLock(&KiCpuSetLock);
RtlWriteAcquireTickLock(&KiCpuSetSequence);
GroupIndex = Prcb->GroupIndex;
++KiCpuSetCount[Group];
v5 = (unsigned int)Group;
GroupSetMember = Prcb->GroupSetMember;
++KiTotalCpuSetCount;
v7 = (unsigned int)(GroupIndex + ((_DWORD)Group << 6));
*((_QWORD *)KiCpuSetAffinities + v7) = GroupSetMember;
*((_QWORD *)KiCpuSetAffinitiesShadow + v7) = Prcb->GroupSetMember;
KiSystemAllowedCpuSets[2 * (unsigned int)v5] |= 1i64 << GroupIndex;
KiNonParkedCpuSets[v5] |= 1i64 << GroupIndex;
v8 = &PsInitialSystemProcess->2376;
if( (PsInitialSystemProcess->Flags3 & 0x80u) != 0 )
v8 = ($991E1CBB7797929499350D8948279CF6 *)v8->AllowedCpuSets;
v8[v5].AllowedCpuSets |= 1i64 << GroupIndex;
RtlWriteReleaseTickLock(&KiCpuSetSequence);
KxReleaseSpinLock(&KiCpuSetLock);
__writecr8(CurrentIrql);
}
}Referenced by:
KiAllocateCpuSetData
KiCompleteKernelInit