mirror of
https://github.com/reactos/reactos.git
synced 2025-04-27 09:00:27 +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
1 changed files with 80 additions and 2 deletions
|
@ -24,7 +24,7 @@ NTSTATUS
|
|||
NTAPI
|
||||
CmpInitializeMachineDependentConfiguration(IN PLOADER_PARAMETER_BLOCK LoaderBlock)
|
||||
{
|
||||
UNICODE_STRING KeyName, ValueName;
|
||||
UNICODE_STRING KeyName, ValueName, Data;
|
||||
OBJECT_ATTRIBUTES ObjectAttributes;
|
||||
ULONG HavePae;
|
||||
NTSTATUS Status;
|
||||
|
@ -32,9 +32,12 @@ CmpInitializeMachineDependentConfiguration(IN PLOADER_PARAMETER_BLOCK LoaderBloc
|
|||
ULONG Disposition;
|
||||
CONFIGURATION_COMPONENT_DATA ConfigData;
|
||||
CHAR Buffer[128];
|
||||
ULONG i;
|
||||
ULONG i, ExtendedId, Dummy;
|
||||
PKPRCB Prcb;
|
||||
USHORT IndexTable[MaximumType + 1] = {0};
|
||||
ANSI_STRING TempString;
|
||||
PCHAR PartialString = NULL;
|
||||
CHAR CpuString[48];
|
||||
|
||||
/* Open the SMSS Memory Management key */
|
||||
RtlInitUnicodeString(&KeyName,
|
||||
|
@ -198,6 +201,81 @@ CmpInitializeMachineDependentConfiguration(IN PLOADER_PARAMETER_BLOCK LoaderBloc
|
|||
/* Close this new handle */
|
||||
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 */
|
||||
if (Prcb->FeatureBits)
|
||||
{
|
||||
|
|
Loading…
Reference in a new issue