HalpCmciInit
VOID __stdcall HalpCmciInit(INT64 a1){
UINT64 PerformanceCounter;
unsigned int v3;
unsigned int ActiveProcessorCount;
int *v5;
unsigned int v6;
_GROUP_AFFINITY *p_PreviousAffinity;
_QWORD *i;
INT64 v9;
_GROUP_AFFINITY Affinity;
_GROUP_AFFINITY PreviousAffinity;
Affinity = 0i64;
PreviousAffinity = 0i64;
HalpCmciLoadThresholdConfiguration();
PerformanceCounter = KeQueryPerformanceCounter(0i64);
v3 = 0;
ActiveProcessorCount = KeQueryActiveProcessorCountEx(0xFFFFu);
if( ActiveProcessorCount )
{
v5 = KiProcessorIndexToNumberMappingTable;
do
{
v6 = *v5;
Affinity.Reserved[1] = 0;
Affinity.Reserved[2] = 0;
*(_DWORD *)&Affinity.Group = (unsigned __int16)(v6 >> 6);
Affinity.Mask = 1i64 << (v6 & 0x3F);
if( v3 )
p_PreviousAffinity = 0i64;
else
p_PreviousAffinity = &PreviousAffinity;
KeSetSystemGroupAffinityThread(&Affinity, p_PreviousAffinity);
for( i = *(_QWORD **)&KeGetPcr()->HalReserved[6]; i; i = (_QWORD *)i[22] )
{
v9 = *(_QWORD *)((char *)i + 164);
i[13] = PerformanceCounter;
HalpCmciInitializeErrorPacket(a1, v9);
HalpCmciInitProcessor(a1, v9);
}
++v3;
++v5;
}
while( v3 < ActiveProcessorCount );
}
KeRevertToUserGroupAffinityThread(&PreviousAffinity);
}Referenced by:
HalpCmcWorkerRoutine
HalpInitializeCmc