mirror of
https://github.com/reactos/reactos.git
synced 2024-10-14 21:25:14 +00:00
- CmpInitializeMachineDependentConfiguration: Add Processor Name and Vendor ID as well (the former doesnt' work on QEMU because QEMU desn't support CPUID-EX, but on VMWare, I get: Dual Core AMD Opteron(tm) Processor 185.
svn path=/trunk/; revision=26681
This commit is contained in:
parent
82bcb975e4
commit
b5dc8db0ee
|
@ -24,7 +24,7 @@ NTSTATUS
|
||||||
NTAPI
|
NTAPI
|
||||||
CmpInitializeMachineDependentConfiguration(IN PLOADER_PARAMETER_BLOCK LoaderBlock)
|
CmpInitializeMachineDependentConfiguration(IN PLOADER_PARAMETER_BLOCK LoaderBlock)
|
||||||
{
|
{
|
||||||
UNICODE_STRING KeyName, ValueName;
|
UNICODE_STRING KeyName, ValueName, Data;
|
||||||
OBJECT_ATTRIBUTES ObjectAttributes;
|
OBJECT_ATTRIBUTES ObjectAttributes;
|
||||||
ULONG HavePae;
|
ULONG HavePae;
|
||||||
NTSTATUS Status;
|
NTSTATUS Status;
|
||||||
|
@ -32,9 +32,12 @@ CmpInitializeMachineDependentConfiguration(IN PLOADER_PARAMETER_BLOCK LoaderBloc
|
||||||
ULONG Disposition;
|
ULONG Disposition;
|
||||||
CONFIGURATION_COMPONENT_DATA ConfigData;
|
CONFIGURATION_COMPONENT_DATA ConfigData;
|
||||||
CHAR Buffer[128];
|
CHAR Buffer[128];
|
||||||
ULONG i;
|
ULONG i, ExtendedId, Dummy;
|
||||||
PKPRCB Prcb;
|
PKPRCB Prcb;
|
||||||
USHORT IndexTable[MaximumType + 1] = {0};
|
USHORT IndexTable[MaximumType + 1] = {0};
|
||||||
|
ANSI_STRING TempString;
|
||||||
|
PCHAR PartialString = NULL;
|
||||||
|
CHAR CpuString[48];
|
||||||
|
|
||||||
/* Open the SMSS Memory Management key */
|
/* Open the SMSS Memory Management key */
|
||||||
RtlInitUnicodeString(&KeyName,
|
RtlInitUnicodeString(&KeyName,
|
||||||
|
@ -198,6 +201,81 @@ CmpInitializeMachineDependentConfiguration(IN PLOADER_PARAMETER_BLOCK LoaderBloc
|
||||||
/* Close this new handle */
|
/* Close this new handle */
|
||||||
NtClose(FpuHandle);
|
NtClose(FpuHandle);
|
||||||
|
|
||||||
|
/* Stay on this CPU only */
|
||||||
|
KeSetSystemAffinityThread(Prcb->SetMember);
|
||||||
|
if (!Prcb->CpuID)
|
||||||
|
{
|
||||||
|
/* Uh oh, no CPUID! */
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
/* Check if we have extended CPUID that supports name ID */
|
||||||
|
Ki386Cpuid(0x80000000, &ExtendedId, &Dummy, &Dummy, &Dummy);
|
||||||
|
if (ExtendedId >= 0x80000004)
|
||||||
|
{
|
||||||
|
/* Do all the CPUIDs requred to get the full name */
|
||||||
|
PartialString = CpuString;
|
||||||
|
for (ExtendedId = 2; ExtendedId <= 4; ExtendedId++)
|
||||||
|
{
|
||||||
|
/* Do the CPUID and save the name string */
|
||||||
|
Ki386Cpuid(0x80000000 | ExtendedId,
|
||||||
|
(PULONG)PartialString,
|
||||||
|
(PULONG)PartialString + 1,
|
||||||
|
(PULONG)PartialString + 2,
|
||||||
|
(PULONG)PartialString + 3);
|
||||||
|
|
||||||
|
/* Go to the next name string */
|
||||||
|
PartialString += 16;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Null-terminate it */
|
||||||
|
CpuString[48] = ANSI_NULL;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Go back to user affinity */
|
||||||
|
KeRevertToUserAffinityThread();
|
||||||
|
|
||||||
|
/* Check if we have a CPU Name */
|
||||||
|
if (PartialString)
|
||||||
|
{
|
||||||
|
/* Convert it to Unicode */
|
||||||
|
RtlInitAnsiString(&TempString, CpuString);
|
||||||
|
RtlAnsiStringToUnicodeString(&Data, &TempString, TRUE);
|
||||||
|
|
||||||
|
/* Add it to the registry */
|
||||||
|
RtlInitUnicodeString(&ValueName, L"ProcessorNameString");
|
||||||
|
Status = NtSetValueKey(KeyHandle,
|
||||||
|
&ValueName,
|
||||||
|
0,
|
||||||
|
REG_SZ,
|
||||||
|
Data.Buffer,
|
||||||
|
Data.Length + sizeof(UNICODE_NULL));
|
||||||
|
|
||||||
|
/* Free the temporary buffer */
|
||||||
|
RtlFreeUnicodeString(&Data);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Check if we had a Vendor ID */
|
||||||
|
if (Prcb->VendorString)
|
||||||
|
{
|
||||||
|
/* Convert it to Unicode */
|
||||||
|
RtlInitAnsiString(&TempString, Prcb->VendorString);
|
||||||
|
RtlAnsiStringToUnicodeString(&Data, &TempString, TRUE);
|
||||||
|
|
||||||
|
/* Add it to the registry */
|
||||||
|
RtlInitUnicodeString(&ValueName, L"VendorIdentifier");
|
||||||
|
Status = NtSetValueKey(KeyHandle,
|
||||||
|
&ValueName,
|
||||||
|
0,
|
||||||
|
REG_SZ,
|
||||||
|
Data.Buffer,
|
||||||
|
Data.Length + sizeof(UNICODE_NULL));
|
||||||
|
|
||||||
|
/* Free the temporary buffer */
|
||||||
|
RtlFreeUnicodeString(&Data);
|
||||||
|
}
|
||||||
|
|
||||||
/* Check if we have features bits */
|
/* Check if we have features bits */
|
||||||
if (Prcb->FeatureBits)
|
if (Prcb->FeatureBits)
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in a new issue