KiDynamicProcessorInitialization

VOID __fastcall KiDynamicProcessorInitialization(INT64 a1){
  __int64 v1; 
  INT64 v2; 
  char v3; 
  UINT64 v4; 
  INT64 v5; 
  INT64 v6; 
  int Context; 
  int Context_4; 
  struct _GROUP_AFFINITY Affinity; 
  struct _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);
  Context_4 = KeQueryActiveProcessorCountEx(0xFFFFu);
  Context = Context_4;
  KeIpiGenericCall((PKIPI_BROADCAST_WORKER)KeOptimizeSpecCtrlSettings, &Context);
  __writecr8((unsigned __int8)v2);
  KeRevertToUserGroupAffinityThread(&PreviousAffinity);
}

Referenced by:

KiStartDynamicProcessor