KiConfigureCpuSetSchedulingInformation
VOID __stdcall KiConfigureCpuSetSchedulingInformation(_KPRCB *Prcb){
unsigned __int8 CurrentIrql;
unsigned __int64 *CacheProcessorMask;
unsigned __int8 *v4;
unsigned __int64 v5;
unsigned __int64 v6;
__int64 v7;
unsigned __int64 v8;
unsigned __int64 v9;
CurrentIrql = KeGetCurrentIrql();
__writecr8(2ui64);
KxAcquireSpinLock(&KiCpuSetLock);
RtlWriteAcquireTickLock(&KiCpuSetSequence);
CacheProcessorMask = Prcb->CacheProcessorMask;
v4 = (unsigned __int8 *)(KiCpuSetData + 16 * (Prcb->GroupIndex + ((unsigned __int64)Prcb->Group << 6)));
*v4 = Prcb->Group;
v4[1] = Prcb->GroupIndex;
_BitScanForward64(&v5, Prcb->CoreProcessorSet);
v4[2] = v5;
v6 = 0i64;
v7 = 5i64;
do
{
v8 = *CacheProcessorMask++;
if( !v8 )
v8 = v6;
v6 = v8;
--v7;
}
while( v7 );
if( v8 )
{
_BitScanForward64(&v8, v8);
v4[3] = v8;
}
_BitScanForward64(&v9, Prcb->ParentNode->Affinity.Mask);
v4[4] = v9;
v4[5] = Prcb->PowerState.ArchitecturalEfficiencyClass;
v4[6] = Prcb->PowerState.PerformanceSchedulingClass;
++KiCpuSetSequence;
KxReleaseSpinLock(&KiCpuSetLock);
__writecr8(CurrentIrql);
}Referenced by:
KeConfigureHeteroProcessors
KiConfigureSchedulingInformation