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