CmInitializeProcessor

NTSTATUS __fastcall CmInitializeProcessor(__int64 a1){
  int v1; 
  NTSTATUS result; 
  unsigned int v4; 
  UINT64 CreateOptions; 
  VOID *KeyHandle; 
  _GROUP_AFFINITY Affinity; 
  _OBJECT_ATTRIBUTES ObjectAttributes; 
  _GROUP_AFFINITY PreviousAffinity; 

  v1 = 0;
  *(_QWORD *)&ObjectAttributes.Length = 48i64;
  LODWORD(CreateOptions) = 0;
  *(_QWORD *)&ObjectAttributes.Attributes = 576i64;
  KeyHandle = 0i64;
  ObjectAttributes.RootDirectory = 0i64;
  ObjectAttributes.ObjectName = &CmRegistryMachineHardwareDescriptionSystemName;
  Affinity = 0i64;
  PreviousAffinity = 0i64;
  *(_OWORD *)&ObjectAttributes.SecurityDescriptor = 0i64;
  result = ZwCreateKey(&KeyHandle, 0x20019ui64, &ObjectAttributes, 0i64, 0i64, CreateOptions, 0i64);
  if( result >= 0 )
  {
    CmpConfigurationData = ExAllocatePoolWithTag(1ui64, (unsigned int)CmpConfigurationAreaSize, 538987843i64);
    if( CmpConfigurationData )
    {
      v4 = KiProcessorIndexToNumberMappingTable[*(unsigned int *)(a1 + 36)];
      Affinity.Reserved[1] = 0;
      Affinity.Reserved[2] = 0;
      Affinity.Mask = 1i64 << (v4 & 0x3F);
      *(_DWORD *)&Affinity.Group = (unsigned __int16)(v4 >> 6);
      KeSetSystemGroupAffinityThread(&Affinity, &PreviousAffinity);
      CmpAddProcessorConfigurationEntry((_KPRCB *)a1, *(unsigned int *)(a1 + 36), KeyHandle);
      KeRevertToUserGroupAffinityThread(&PreviousAffinity);
      ExFreePoolWithTag(CmpConfigurationData, 0);
      CmpConfigurationData = 0i64;
    }
    else
    {
      v1 = -1073741670;
    }
    ZwClose((_HANDLE)KeyHandle);
    return v1;
  }
  return result;
}

Referenced by:

KiStartDynamicProcessor