KiDynamicProcessorInitialization

VOID __stdcall KiDynamicProcessorInitialization(INT64 a1){
  __int64 v1; 
  INT64 v2; 
  char v3; 
  UINT64 v4; 
  INT64 v5; 
  INT64 v6; 
  ULONG_PTR Context; 
  ULONG_PTR ActiveProcessorCount; 
  _GROUP_AFFINITY Affinity; 
  _GROUP_AFFINITY PreviousAffinity; 

  v1 = *(unsigned int *)(a1 + 36);
  v2 = a1;
  Affinity = 0i64;
  v3 = KiProcessorIndexToNumberMappingTable[v1] & 0x3F;
  Affinity.Group = (unsigned int)KiProcessorIndexToNumberMappingTable[v1] >> 6;
  *(_DWORD *)Affinity.Reserved = 0;
  Affinity.Reserved[2] = 0;
  Affinity.Mask = 1i64 << v3;
  PreviousAffinity = 0i64;
  KeSetSystemGroupAffinityThread(&Affinity, &PreviousAffinity);
  KeWriteProtectProcessorState(v2 - 384, v4, v5, v6);
  LOBYTE(v2) = KeGetCurrentIrql();
  __writecr8(0xCui64);
  ActiveProcessorCount = KeQueryActiveProcessorCountEx(0xFFFFu);
  Context = ActiveProcessorCount;
  KeIpiGenericCall((PKIPI_BROADCAST_WORKER)KeOptimizeSpecCtrlSettings, (ULONG_PTR)&Context);
  __writecr8((unsigned __int8)v2);
  KeRevertToUserGroupAffinityThread(&PreviousAffinity);
}

Referenced by:

KiStartDynamicProcessor