https://git.reactos.org/?p=reactos.git;a=commitdiff;h=7af2f717bc6ecb99c15119...
commit 7af2f717bc6ecb99c151193117d990c291bf08aa Author: Hermès Bélusca-Maïto hermes.belusca-maito@reactos.org AuthorDate: Mon Aug 28 14:46:49 2017 +0000 Commit: Hermès Bélusca-Maïto hermes.belusca-maito@reactos.org CommitDate: Sat Oct 27 22:09:35 2018 +0200
[SETUPLIB][USETUP] Move the settings code from usetup to setuplib.
This code is moved ther since it'll be needed for 1st-stage GUI installer as well.
The code dealing with keyboard layouts is however not moved yet, since it uses MUI* functions from usetup. I'll try to think how to include that in setuplib...
svn path=/branches/setup_improvements/; revision=75701 --- base/setup/lib/CMakeLists.txt | 1 + base/setup/{usetup => lib}/settings.c | 33 +- base/setup/{usetup => lib}/settings.h | 47 +- base/setup/lib/setuplib.h | 1 + base/setup/usetup/settings.c | 1105 +-------------------------------- base/setup/usetup/settings.h | 35 -- 6 files changed, 62 insertions(+), 1160 deletions(-)
diff --git a/base/setup/lib/CMakeLists.txt b/base/setup/lib/CMakeLists.txt index 30b53ff5b6..965dd1f0a7 100644 --- a/base/setup/lib/CMakeLists.txt +++ b/base/setup/lib/CMakeLists.txt @@ -15,6 +15,7 @@ list(APPEND SOURCE bootsup.c fsutil.c registry.c + settings.c setuplib.c precomp.h)
diff --git a/base/setup/usetup/settings.c b/base/setup/lib/settings.c similarity index 98% copy from base/setup/usetup/settings.c copy to base/setup/lib/settings.c index c36f5eff89..ab005d290c 100644 --- a/base/setup/usetup/settings.c +++ b/base/setup/lib/settings.c @@ -25,14 +25,21 @@
/* INCLUDES *****************************************************************/
-#include "usetup.h" +#include "precomp.h" +#include "genlist.h" +#include "infsupp.h" +#include "registry.h" + +#include "settings.h"
#define NDEBUG #include <debug.h>
/* GLOBALS ******************************************************************/
+#if 0 // FIXME: Disabled for now because it uses MUI* functions from usetup ULONG DefaultLanguageIndex = 0; +#endif
/* FUNCTIONS ****************************************************************/
@@ -307,22 +314,6 @@ GetComputerIdentifier( }
-/* - * Return values: - * 0x00: Failure, stop the enumeration; - * 0x01: Add the entry and continue the enumeration; - * 0x02: Skip the entry but continue the enumeration. - */ -typedef UCHAR -(NTAPI *PPROCESS_ENTRY_ROUTINE)( - IN PWCHAR KeyName, - IN PWCHAR KeyValue, - IN PCHAR DisplayText, - IN SIZE_T DisplayTextSize, - OUT PVOID* UserData, - OUT PBOOLEAN Current, - IN PVOID Parameter OPTIONAL); - LONG AddEntriesFromInfSection( IN OUT PGENERIC_LIST List, @@ -393,7 +384,7 @@ AddEntriesFromInfSection( return TotalCount; }
-static UCHAR +UCHAR NTAPI DefaultProcessEntry( IN PWCHAR KeyName, @@ -1062,6 +1053,9 @@ CreateKeyboardDriverList( return List; }
+ +#if 0 // FIXME: Disabled for now because it uses MUI* functions from usetup + ULONG GetDefaultLanguageIndex(VOID) { @@ -1166,6 +1160,7 @@ CreateLanguageList( return List; }
+ PGENERIC_LIST CreateKeyboardLayoutList( HINF InfFile, @@ -1271,6 +1266,8 @@ ProcessKeyboardLayoutRegistry( return TRUE; }
+#endif + #if 0 BOOLEAN ProcessKeyboardLayoutFiles( diff --git a/base/setup/usetup/settings.h b/base/setup/lib/settings.h similarity index 66% copy from base/setup/usetup/settings.h copy to base/setup/lib/settings.h index 3ecabd8e52..bbdfd8d09d 100644 --- a/base/setup/usetup/settings.h +++ b/base/setup/lib/settings.h @@ -26,6 +26,43 @@
#pragma once
+/* + * Return values: + * 0x00: Failure, stop the enumeration; + * 0x01: Add the entry and continue the enumeration; + * 0x02: Skip the entry but continue the enumeration. + */ +typedef UCHAR +(NTAPI *PPROCESS_ENTRY_ROUTINE)( + IN PWCHAR KeyName, + IN PWCHAR KeyValue, + IN PCHAR DisplayText, + IN SIZE_T DisplayTextSize, + OUT PVOID* UserData, + OUT PBOOLEAN Current, + IN PVOID Parameter OPTIONAL); + +LONG +AddEntriesFromInfSection( + IN OUT PGENERIC_LIST List, + IN HINF InfFile, + IN PCWSTR SectionName, + IN PINFCONTEXT pContext, + IN PPROCESS_ENTRY_ROUTINE ProcessEntry, + IN PVOID Parameter OPTIONAL); + +UCHAR +NTAPI +DefaultProcessEntry( + IN PWCHAR KeyName, + IN PWCHAR KeyValue, + IN PCHAR DisplayText, + IN SIZE_T DisplayTextSize, + OUT PVOID* UserData, + OUT PBOOLEAN Current, + IN PVOID Parameter OPTIONAL); + + PGENERIC_LIST CreateComputerTypeList( HINF InfFile); @@ -49,6 +86,8 @@ PGENERIC_LIST CreateKeyboardDriverList( HINF InfFile);
+#if 0 // FIXME: Disabled for now because it uses MUI* functions from usetup + PGENERIC_LIST CreateKeyboardLayoutList( HINF InfFile, @@ -63,15 +102,17 @@ ULONG GetDefaultLanguageIndex(VOID);
BOOLEAN -ProcessLocaleRegistry( +ProcessKeyboardLayoutRegistry( PGENERIC_LIST List);
BOOLEAN -ProcessKeyboardLayoutRegistry( +ProcessKeyboardLayoutFiles( PGENERIC_LIST List);
+#endif + BOOLEAN -ProcessKeyboardLayoutFiles( +ProcessLocaleRegistry( PGENERIC_LIST List);
BOOLEAN diff --git a/base/setup/lib/setuplib.h b/base/setup/lib/setuplib.h index 4a0f623957..033a4c8235 100644 --- a/base/setup/lib/setuplib.h +++ b/base/setup/lib/setuplib.h @@ -40,6 +40,7 @@ extern HANDLE ProcessHeap; #include "utils/osdetect.h" #include "utils/regutil.h" #include "registry.h" +#include "settings.h"
/* DEFINES ******************************************************************/ diff --git a/base/setup/usetup/settings.c b/base/setup/usetup/settings.c index c36f5eff89..6bcec116a7 100644 --- a/base/setup/usetup/settings.c +++ b/base/setup/usetup/settings.c @@ -36,1032 +36,6 @@ ULONG DefaultLanguageIndex = 0;
/* FUNCTIONS ****************************************************************/
-static -BOOLEAN -IsAcpiComputer(VOID) -{ - UNICODE_STRING MultiKeyPathU = RTL_CONSTANT_STRING(L"\Registry\Machine\HARDWARE\DESCRIPTION\System\MultifunctionAdapter"); - UNICODE_STRING IdentifierU = RTL_CONSTANT_STRING(L"Identifier"); - UNICODE_STRING AcpiBiosIdentifier = RTL_CONSTANT_STRING(L"ACPI BIOS"); - OBJECT_ATTRIBUTES ObjectAttributes; - PKEY_BASIC_INFORMATION pDeviceInformation = NULL; - ULONG DeviceInfoLength = sizeof(KEY_BASIC_INFORMATION) + 50 * sizeof(WCHAR); - PKEY_VALUE_PARTIAL_INFORMATION pValueInformation = NULL; - ULONG ValueInfoLength = sizeof(KEY_VALUE_PARTIAL_INFORMATION) + 50 * sizeof(WCHAR); - ULONG RequiredSize; - ULONG IndexDevice = 0; - UNICODE_STRING DeviceName, ValueName; - HANDLE hDevicesKey = NULL; - HANDLE hDeviceKey = NULL; - NTSTATUS Status; - BOOLEAN ret = FALSE; - - InitializeObjectAttributes(&ObjectAttributes, - &MultiKeyPathU, - OBJ_CASE_INSENSITIVE, - NULL, - NULL); - Status = NtOpenKey(&hDevicesKey, - KEY_ENUMERATE_SUB_KEYS, - &ObjectAttributes); - if (!NT_SUCCESS(Status)) - { - DPRINT("NtOpenKey() failed with status 0x%08lx\n", Status); - goto cleanup; - } - - pDeviceInformation = RtlAllocateHeap(RtlGetProcessHeap(), 0, DeviceInfoLength); - if (!pDeviceInformation) - { - DPRINT("RtlAllocateHeap() failed\n"); - Status = STATUS_NO_MEMORY; - goto cleanup; - } - - pValueInformation = RtlAllocateHeap(RtlGetProcessHeap(), 0, ValueInfoLength); - if (!pValueInformation) - { - DPRINT("RtlAllocateHeap() failed\n"); - Status = STATUS_NO_MEMORY; - goto cleanup; - } - - while (TRUE) - { - Status = NtEnumerateKey(hDevicesKey, - IndexDevice, - KeyBasicInformation, - pDeviceInformation, - DeviceInfoLength, - &RequiredSize); - if (Status == STATUS_NO_MORE_ENTRIES) - break; - else if (Status == STATUS_BUFFER_OVERFLOW || Status == STATUS_BUFFER_TOO_SMALL) - { - RtlFreeHeap(RtlGetProcessHeap(), 0, pDeviceInformation); - DeviceInfoLength = RequiredSize; - pDeviceInformation = RtlAllocateHeap(RtlGetProcessHeap(), 0, DeviceInfoLength); - if (!pDeviceInformation) - { - DPRINT("RtlAllocateHeap() failed\n"); - Status = STATUS_NO_MEMORY; - goto cleanup; - } - Status = NtEnumerateKey(hDevicesKey, - IndexDevice, - KeyBasicInformation, - pDeviceInformation, - DeviceInfoLength, - &RequiredSize); - } - if (!NT_SUCCESS(Status)) - { - DPRINT("NtEnumerateKey() failed with status 0x%08lx\n", Status); - goto cleanup; - } - IndexDevice++; - - /* Open device key */ - DeviceName.Length = DeviceName.MaximumLength = pDeviceInformation->NameLength; - DeviceName.Buffer = pDeviceInformation->Name; - InitializeObjectAttributes(&ObjectAttributes, - &DeviceName, - OBJ_CASE_INSENSITIVE, - hDevicesKey, - NULL); - Status = NtOpenKey(&hDeviceKey, - KEY_QUERY_VALUE, - &ObjectAttributes); - if (!NT_SUCCESS(Status)) - { - DPRINT("NtOpenKey() failed with status 0x%08lx\n", Status); - goto cleanup; - } - - /* Read identifier */ - Status = NtQueryValueKey(hDeviceKey, - &IdentifierU, - KeyValuePartialInformation, - pValueInformation, - ValueInfoLength, - &RequiredSize); - if (Status == STATUS_BUFFER_OVERFLOW || Status == STATUS_BUFFER_TOO_SMALL) - { - RtlFreeHeap(RtlGetProcessHeap(), 0, pValueInformation); - ValueInfoLength = RequiredSize; - pValueInformation = RtlAllocateHeap(RtlGetProcessHeap(), 0, ValueInfoLength); - if (!pValueInformation) - { - DPRINT("RtlAllocateHeap() failed\n"); - Status = STATUS_NO_MEMORY; - goto cleanup; - } - Status = NtQueryValueKey(hDeviceKey, - &IdentifierU, - KeyValuePartialInformation, - pValueInformation, - ValueInfoLength, - &RequiredSize); - } - if (!NT_SUCCESS(Status)) - { - DPRINT("NtQueryValueKey() failed with status 0x%08lx\n", Status); - goto nextdevice; - } - else if (pValueInformation->Type != REG_SZ) - { - DPRINT("Wrong registry type: got 0x%lx, expected 0x%lx\n", pValueInformation->Type, REG_SZ); - goto nextdevice; - } - - ValueName.Length = ValueName.MaximumLength = pValueInformation->DataLength; - ValueName.Buffer = (PWCHAR)pValueInformation->Data; - if (ValueName.Length >= sizeof(WCHAR) && ValueName.Buffer[ValueName.Length / sizeof(WCHAR) - 1] == UNICODE_NULL) - ValueName.Length -= sizeof(WCHAR); - if (RtlEqualUnicodeString(&ValueName, &AcpiBiosIdentifier, FALSE)) - { - DPRINT("Found ACPI BIOS\n"); - ret = TRUE; - goto cleanup; - } - -nextdevice: - NtClose(hDeviceKey); - hDeviceKey = NULL; - } - -cleanup: - if (pDeviceInformation) - RtlFreeHeap(RtlGetProcessHeap(), 0, pDeviceInformation); - if (pValueInformation) - RtlFreeHeap(RtlGetProcessHeap(), 0, pValueInformation); - if (hDevicesKey) - NtClose(hDevicesKey); - if (hDeviceKey) - NtClose(hDeviceKey); - return ret; -} - -static -BOOLEAN -GetComputerIdentifier( - PWSTR Identifier, - ULONG IdentifierLength) -{ - OBJECT_ATTRIBUTES ObjectAttributes; - UNICODE_STRING KeyName; - LPCWSTR ComputerIdentifier; - HANDLE ProcessorsKey; - PKEY_FULL_INFORMATION pFullInfo; - ULONG Size, SizeNeeded; - NTSTATUS Status; - - DPRINT("GetComputerIdentifier() called\n"); - - Size = sizeof(KEY_FULL_INFORMATION); - pFullInfo = (PKEY_FULL_INFORMATION)RtlAllocateHeap(RtlGetProcessHeap(), 0, Size); - if (!pFullInfo) - { - DPRINT("RtlAllocateHeap() failed\n"); - return FALSE; - } - - /* Open the processors key */ - RtlInitUnicodeString(&KeyName, - L"\Registry\Machine\HARDWARE\DESCRIPTION\System\CentralProcessor"); - InitializeObjectAttributes(&ObjectAttributes, - &KeyName, - OBJ_CASE_INSENSITIVE, - NULL, - NULL); - - Status = NtOpenKey(&ProcessorsKey, - KEY_QUERY_VALUE, - &ObjectAttributes); - if (!NT_SUCCESS(Status)) - { - DPRINT("NtOpenKey() failed (Status 0x%lx)\n", Status); - RtlFreeHeap(RtlGetProcessHeap(), 0, pFullInfo); - return FALSE; - } - - /* Get number of subkeys */ - Status = NtQueryKey(ProcessorsKey, - KeyFullInformation, - pFullInfo, - Size, - &Size); - NtClose(ProcessorsKey); - if (!NT_SUCCESS(Status) && Status != STATUS_BUFFER_OVERFLOW) - { - DPRINT("NtQueryKey() failed (Status 0x%lx)\n", Status); - RtlFreeHeap(RtlGetProcessHeap(), 0, pFullInfo); - return FALSE; - } - - /* Find computer identifier */ - if (pFullInfo->SubKeys == 0) - { - /* Something strange happened. No processor detected */ - RtlFreeHeap(RtlGetProcessHeap(), 0, pFullInfo); - return FALSE; - } - - if (IsAcpiComputer()) - { - if (pFullInfo->SubKeys == 1) - { - /* Computer is mono-CPU */ - ComputerIdentifier = L"ACPI UP"; - } - else - { - /* Computer is multi-CPUs */ - ComputerIdentifier = L"ACPI MP"; - } - } - else - { - if (pFullInfo->SubKeys == 1) - { - /* Computer is mono-CPU */ - ComputerIdentifier = L"PC UP"; - } - else - { - /* Computer is multi-CPUs */ - ComputerIdentifier = L"PC MP"; - } - } - - RtlFreeHeap(RtlGetProcessHeap(), 0, pFullInfo); - - /* Copy computer identifier to return buffer */ - SizeNeeded = (wcslen(ComputerIdentifier) + 1) * sizeof(WCHAR); - if (SizeNeeded > IdentifierLength) - return FALSE; - - RtlCopyMemory(Identifier, ComputerIdentifier, SizeNeeded); - - return TRUE; -} - - -/* - * Return values: - * 0x00: Failure, stop the enumeration; - * 0x01: Add the entry and continue the enumeration; - * 0x02: Skip the entry but continue the enumeration. - */ -typedef UCHAR -(NTAPI *PPROCESS_ENTRY_ROUTINE)( - IN PWCHAR KeyName, - IN PWCHAR KeyValue, - IN PCHAR DisplayText, - IN SIZE_T DisplayTextSize, - OUT PVOID* UserData, - OUT PBOOLEAN Current, - IN PVOID Parameter OPTIONAL); - -LONG -AddEntriesFromInfSection( - IN OUT PGENERIC_LIST List, - IN HINF InfFile, - IN PCWSTR SectionName, - IN PINFCONTEXT pContext, - IN PPROCESS_ENTRY_ROUTINE ProcessEntry, - IN PVOID Parameter OPTIONAL) -{ - LONG TotalCount = 0; - PWCHAR KeyName; - PWCHAR KeyValue; - PVOID UserData; - BOOLEAN Current; - UCHAR RetVal; - CHAR DisplayText[128]; - - if (!SetupFindFirstLineW(InfFile, SectionName, NULL, pContext)) - return -1; - - do - { - /* - * NOTE: Do not use INF_GetData() as it expects INF entries of exactly - * two fields ("key = value"); however we expect to be able to deal with - * entries having more than two fields, the only requirement being that - * the second field (field number 1) contains the field description. - */ - if (!INF_GetDataField(pContext, 0, &KeyName)) - { - DPRINT("INF_GetDataField() failed\n"); - return -1; - } - - if (!INF_GetDataField(pContext, 1, &KeyValue)) - { - DPRINT("INF_GetDataField() failed\n"); - INF_FreeData(KeyName); - return -1; - } - - UserData = NULL; - Current = FALSE; - RetVal = ProcessEntry(KeyName, - KeyValue, - DisplayText, - sizeof(DisplayText), - &UserData, - &Current, - Parameter); - INF_FreeData(KeyName); - INF_FreeData(KeyValue); - - if (RetVal == 0) - { - DPRINT("ProcessEntry() failed\n"); - return -1; - } - else if (RetVal == 1) - { - AppendGenericListEntry(List, DisplayText, UserData, Current); - ++TotalCount; - } - // else if (RetVal == 2), skip the entry. - - } while (SetupFindNextLine(pContext, pContext)); - - return TotalCount; -} - -static UCHAR -NTAPI -DefaultProcessEntry( - IN PWCHAR KeyName, - IN PWCHAR KeyValue, - IN PCHAR DisplayText, - IN SIZE_T DisplayTextSize, - OUT PVOID* UserData, - OUT PBOOLEAN Current, - IN PVOID Parameter OPTIONAL) -{ - PWSTR CompareKey = (PWSTR)Parameter; - - *UserData = RtlAllocateHeap(ProcessHeap, 0, - (wcslen(KeyName) + 1) * sizeof(WCHAR)); - if (*UserData == NULL) - { - /* Failure, stop enumeration */ - DPRINT1("RtlAllocateHeap() failed\n"); - return 0; - } - - wcscpy((PWCHAR)*UserData, KeyName); - sprintf(DisplayText, "%S", KeyValue); - - *Current = (CompareKey ? !_wcsicmp(KeyName, CompareKey) : FALSE); - - /* Add the entry */ - return 1; -} - - -PGENERIC_LIST -CreateComputerTypeList( - HINF InfFile) -{ - PGENERIC_LIST List; - INFCONTEXT Context; - PWCHAR KeyName; - PWCHAR KeyValue; - WCHAR ComputerIdentifier[128]; - WCHAR ComputerKey[32]; - - /* Get the computer identification */ - if (!GetComputerIdentifier(ComputerIdentifier, 128)) - { - ComputerIdentifier[0] = 0; - } - - DPRINT("Computer identifier: '%S'\n", ComputerIdentifier); - - /* Search for matching device identifier */ - if (!SetupFindFirstLineW(InfFile, L"Map.Computer", NULL, &Context)) - { - /* FIXME: error message */ - return NULL; - } - - do - { - BOOLEAN FoundId; - - if (!INF_GetDataField(&Context, 1, &KeyValue)) - { - /* FIXME: Handle error! */ - DPRINT("INF_GetDataField() failed\n"); - return NULL; - } - - DPRINT("KeyValue: %S\n", KeyValue); - FoundId = !!wcsstr(ComputerIdentifier, KeyValue); - INF_FreeData(KeyValue); - - if (!FoundId) - continue; - - if (!INF_GetDataField(&Context, 0, &KeyName)) - { - /* FIXME: Handle error! */ - DPRINT("INF_GetDataField() failed\n"); - return NULL; - } - - DPRINT("Computer key: %S\n", KeyName); - wcscpy(ComputerKey, KeyName); - INF_FreeData(KeyName); - } while (SetupFindNextLine(&Context, &Context)); - - List = CreateGenericList(); - if (List == NULL) - return NULL; - - if (AddEntriesFromInfSection(List, - InfFile, - L"Computer", - &Context, - DefaultProcessEntry, - ComputerKey) == -1) - { - DestroyGenericList(List, TRUE); - return NULL; - } - - return List; -} - -static -BOOLEAN -GetDisplayIdentifier( - PWSTR Identifier, - ULONG IdentifierLength) -{ - OBJECT_ATTRIBUTES ObjectAttributes; - UNICODE_STRING KeyName; - WCHAR Buffer[32]; - HANDLE BusKey; - HANDLE BusInstanceKey; - HANDLE ControllerKey; - HANDLE ControllerInstanceKey; - ULONG BusInstance; - ULONG ControllerInstance; - ULONG BufferLength; - ULONG ReturnedLength; - PKEY_VALUE_PARTIAL_INFORMATION ValueInfo; - NTSTATUS Status; - - DPRINT("GetDisplayIdentifier() called\n"); - - /* Open the bus key */ - RtlInitUnicodeString(&KeyName, - L"\Registry\Machine\HARDWARE\Description\System\MultifunctionAdapter"); - InitializeObjectAttributes(&ObjectAttributes, - &KeyName, - OBJ_CASE_INSENSITIVE, - NULL, - NULL); - - Status = NtOpenKey(&BusKey, - KEY_ENUMERATE_SUB_KEYS, - &ObjectAttributes); - if (!NT_SUCCESS(Status)) - { - DPRINT("NtOpenKey() failed (Status %lx)\n", Status); - return FALSE; - } - - BusInstance = 0; - while (TRUE) - { - swprintf(Buffer, L"%lu", BusInstance); - RtlInitUnicodeString(&KeyName, Buffer); - InitializeObjectAttributes(&ObjectAttributes, - &KeyName, - OBJ_CASE_INSENSITIVE, - BusKey, - NULL); - - Status = NtOpenKey(&BusInstanceKey, - KEY_ENUMERATE_SUB_KEYS, - &ObjectAttributes); - if (!NT_SUCCESS(Status)) - { - DPRINT("NtOpenKey() failed (Status %lx)\n", Status); - NtClose(BusKey); - return FALSE; - } - - /* Open the controller type key */ - RtlInitUnicodeString(&KeyName, L"DisplayController"); - InitializeObjectAttributes(&ObjectAttributes, - &KeyName, - OBJ_CASE_INSENSITIVE, - BusInstanceKey, - NULL); - - Status = NtOpenKey(&ControllerKey, - KEY_ENUMERATE_SUB_KEYS, - &ObjectAttributes); - if (NT_SUCCESS(Status)) - { - ControllerInstance = 0; - - while (TRUE) - { - /* Open the pointer controller instance key */ - swprintf(Buffer, L"%lu", ControllerInstance); - RtlInitUnicodeString(&KeyName, Buffer); - InitializeObjectAttributes(&ObjectAttributes, - &KeyName, - OBJ_CASE_INSENSITIVE, - ControllerKey, - NULL); - - Status = NtOpenKey(&ControllerInstanceKey, - KEY_QUERY_VALUE, - &ObjectAttributes); - if (!NT_SUCCESS(Status)) - { - DPRINT("NtOpenKey() failed (Status %lx)\n", Status); - NtClose(ControllerKey); - NtClose(BusInstanceKey); - NtClose(BusKey); - return FALSE; - } - - /* Get controller identifier */ - RtlInitUnicodeString(&KeyName, L"Identifier"); - - BufferLength = sizeof(KEY_VALUE_PARTIAL_INFORMATION) + - 256 * sizeof(WCHAR); - ValueInfo = (KEY_VALUE_PARTIAL_INFORMATION*) RtlAllocateHeap(RtlGetProcessHeap(), - 0, - BufferLength); - if (ValueInfo == NULL) - { - DPRINT("RtlAllocateHeap() failed\n"); - NtClose(ControllerInstanceKey); - NtClose(ControllerKey); - NtClose(BusInstanceKey); - NtClose(BusKey); - return FALSE; - } - - Status = NtQueryValueKey(ControllerInstanceKey, - &KeyName, - KeyValuePartialInformation, - ValueInfo, - BufferLength, - &ReturnedLength); - if (NT_SUCCESS(Status)) - { - DPRINT("Identifier: %S\n", (PWSTR)ValueInfo->Data); - - BufferLength = min(ValueInfo->DataLength / sizeof(WCHAR), IdentifierLength); - RtlCopyMemory(Identifier, - ValueInfo->Data, - BufferLength * sizeof(WCHAR)); - Identifier[BufferLength] = 0; - - RtlFreeHeap(RtlGetProcessHeap(), - 0, - ValueInfo); - - NtClose(ControllerInstanceKey); - NtClose(ControllerKey); - NtClose(BusInstanceKey); - NtClose(BusKey); - return TRUE; - } - - NtClose(ControllerInstanceKey); - - ControllerInstance++; - } - - NtClose(ControllerKey); - } - - NtClose(BusInstanceKey); - - BusInstance++; - } - - NtClose(BusKey); - - return FALSE; -} - -PGENERIC_LIST -CreateDisplayDriverList( - HINF InfFile) -{ - PGENERIC_LIST List; - INFCONTEXT Context; - PWCHAR KeyName; - PWCHAR KeyValue; - WCHAR DisplayIdentifier[128]; - WCHAR DisplayKey[32]; - - /* Get the display identification */ - if (!GetDisplayIdentifier(DisplayIdentifier, 128)) - { - DisplayIdentifier[0] = 0; - } - - DPRINT("Display identifier: '%S'\n", DisplayIdentifier); - - /* Search for matching device identifier */ - if (!SetupFindFirstLineW(InfFile, L"Map.Display", NULL, &Context)) - { - /* FIXME: error message */ - return NULL; - } - - do - { - BOOLEAN FoundId; - - if (!INF_GetDataField(&Context, 1, &KeyValue)) - { - /* FIXME: Handle error! */ - DPRINT("INF_GetDataField() failed\n"); - return NULL; - } - - DPRINT("KeyValue: %S\n", KeyValue); - FoundId = !!wcsstr(DisplayIdentifier, KeyValue); - INF_FreeData(KeyValue); - - if (!FoundId) - continue; - - if (!INF_GetDataField(&Context, 0, &KeyName)) - { - /* FIXME: Handle error! */ - DPRINT("INF_GetDataField() failed\n"); - return NULL; - } - - DPRINT("Display key: %S\n", KeyName); - wcscpy(DisplayKey, KeyName); - INF_FreeData(KeyName); - } while (SetupFindNextLine(&Context, &Context)); - - List = CreateGenericList(); - if (List == NULL) - return NULL; - - if (AddEntriesFromInfSection(List, - InfFile, - L"Display", - &Context, - DefaultProcessEntry, - DisplayKey) == -1) - { - DestroyGenericList(List, TRUE); - return NULL; - } - -#if 0 - AppendGenericListEntry(List, "Other display driver", NULL, TRUE); -#endif - - return List; -} - - -BOOLEAN -ProcessComputerFiles( - HINF InfFile, - PGENERIC_LIST List, - PWCHAR *AdditionalSectionName) -{ - PGENERIC_LIST_ENTRY Entry; - static WCHAR SectionName[128]; - - DPRINT("ProcessComputerFiles() called\n"); - - Entry = GetCurrentListEntry(List); - if (Entry == NULL) - { - DPRINT("GetCurrentListEntry() failed\n"); - return FALSE; - } - - wcscpy(SectionName, L"Files."); - wcscat(SectionName, (const wchar_t*)GetListEntryUserData(Entry)); - *AdditionalSectionName = SectionName; - - return TRUE; -} - -BOOLEAN -ProcessDisplayRegistry( - HINF InfFile, - PGENERIC_LIST List) -{ - NTSTATUS Status; - PGENERIC_LIST_ENTRY Entry; - INFCONTEXT Context; - PWCHAR Buffer; - PWCHAR ServiceName; - ULONG StartValue; - ULONG Width, Height, Bpp; - OBJECT_ATTRIBUTES ObjectAttributes; - UNICODE_STRING KeyName; - HANDLE KeyHandle; - WCHAR RegPath[255]; - - DPRINT("ProcessDisplayRegistry() called\n"); - - Entry = GetCurrentListEntry(List); - if (Entry == NULL) - { - DPRINT1("GetCurrentListEntry() failed\n"); - return FALSE; - } - - if (!SetupFindFirstLineW(InfFile, L"Display", (WCHAR*)GetListEntryUserData(Entry), &Context)) - { - DPRINT1("SetupFindFirstLineW() failed\n"); - return FALSE; - } - - /* Enable the correct driver */ - if (!INF_GetDataField(&Context, 3, &ServiceName)) - { - DPRINT1("INF_GetDataField() failed\n"); - return FALSE; - } - - ASSERT(wcslen(ServiceName) < 10); - DPRINT1("Service name: '%S'\n", ServiceName); - - swprintf(RegPath, L"System\CurrentControlSet\Services\%s", ServiceName); - RtlInitUnicodeString(&KeyName, RegPath); - InitializeObjectAttributes(&ObjectAttributes, - &KeyName, - OBJ_CASE_INSENSITIVE, - GetRootKeyByPredefKey(HKEY_LOCAL_MACHINE, NULL), - NULL); - Status = NtOpenKey(&KeyHandle, - KEY_SET_VALUE, - &ObjectAttributes); - if (!NT_SUCCESS(Status)) - { - DPRINT1("NtOpenKey() failed (Status %lx)\n", Status); - return FALSE; - } - - StartValue = 1; - Status = RtlWriteRegistryValue(RTL_REGISTRY_HANDLE, KeyHandle, - L"Start", - REG_DWORD, - &StartValue, - sizeof(StartValue)); - NtClose(KeyHandle); - if (!NT_SUCCESS(Status)) - { - DPRINT1("RtlWriteRegistryValue() failed (Status %lx)\n", Status); - return FALSE; - } - - /* Set the resolution */ - - if (!INF_GetDataField(&Context, 4, &Buffer)) - { - DPRINT1("INF_GetDataField() failed\n"); - return FALSE; - } - - swprintf(RegPath, - L"System\CurrentControlSet\Hardware Profiles\Current\System\CurrentControlSet\Services\%s\Device0", - ServiceName); - DPRINT1("RegPath: '%S'\n", RegPath); - RtlInitUnicodeString(&KeyName, RegPath); - InitializeObjectAttributes(&ObjectAttributes, - &KeyName, - OBJ_CASE_INSENSITIVE, - GetRootKeyByPredefKey(HKEY_LOCAL_MACHINE, NULL), - NULL); - Status = NtOpenKey(&KeyHandle, - KEY_SET_VALUE, - &ObjectAttributes); - if (!NT_SUCCESS(Status)) - { - DPRINT1("NtOpenKey() failed (Status %lx)\n", Status); - return FALSE; - } - - Width = wcstoul(Buffer, NULL, 10); - Status = RtlWriteRegistryValue(RTL_REGISTRY_HANDLE, KeyHandle, - L"DefaultSettings.XResolution", - REG_DWORD, - &Width, - sizeof(Width)); - if (!NT_SUCCESS(Status)) - { - DPRINT1("RtlWriteRegistryValue() failed (Status %lx)\n", Status); - NtClose(KeyHandle); - return FALSE; - } - - if (!INF_GetDataField(&Context, 5, &Buffer)) - { - DPRINT1("INF_GetDataField() failed\n"); - NtClose(KeyHandle); - return FALSE; - } - - Height = wcstoul(Buffer, 0, 0); - Status = RtlWriteRegistryValue(RTL_REGISTRY_HANDLE, KeyHandle, - L"DefaultSettings.YResolution", - REG_DWORD, - &Height, - sizeof(Height)); - if (!NT_SUCCESS(Status)) - { - DPRINT1("RtlWriteRegistryValue() failed (Status %lx)\n", Status); - NtClose(KeyHandle); - return FALSE; - } - - if (!INF_GetDataField(&Context, 6, &Buffer)) - { - DPRINT1("INF_GetDataField() failed\n"); - NtClose(KeyHandle); - return FALSE; - } - - Bpp = wcstoul(Buffer, 0, 0); - Status = RtlWriteRegistryValue(RTL_REGISTRY_HANDLE, KeyHandle, - L"DefaultSettings.BitsPerPel", - REG_DWORD, - &Bpp, - sizeof(Bpp)); - if (!NT_SUCCESS(Status)) - { - DPRINT1("RtlWriteRegistryValue() failed (Status %lx)\n", Status); - NtClose(KeyHandle); - return FALSE; - } - - NtClose(KeyHandle); - - DPRINT("ProcessDisplayRegistry() done\n"); - - return TRUE; -} - -BOOLEAN -ProcessLocaleRegistry( - PGENERIC_LIST List) -{ - PGENERIC_LIST_ENTRY Entry; - PWCHAR LanguageId; - OBJECT_ATTRIBUTES ObjectAttributes; - UNICODE_STRING KeyName; - UNICODE_STRING ValueName; - - HANDLE KeyHandle; - NTSTATUS Status; - - Entry = GetCurrentListEntry(List); - if (Entry == NULL) - return FALSE; - - LanguageId = (PWCHAR)GetListEntryUserData(Entry); - if (LanguageId == NULL) - return FALSE; - - DPRINT("LanguageId: %S\n", LanguageId); - - /* Open the default users locale key */ - RtlInitUnicodeString(&KeyName, - L".DEFAULT\Control Panel\International"); - - InitializeObjectAttributes(&ObjectAttributes, - &KeyName, - OBJ_CASE_INSENSITIVE, - GetRootKeyByPredefKey(HKEY_USERS, NULL), - NULL); - - Status = NtOpenKey(&KeyHandle, - KEY_SET_VALUE, - &ObjectAttributes); - if (!NT_SUCCESS(Status)) - { - DPRINT1("NtOpenKey() failed (Status %lx)\n", Status); - return FALSE; - } - - /* Set default user locale */ - RtlInitUnicodeString(&ValueName, L"Locale"); - Status = NtSetValueKey(KeyHandle, - &ValueName, - 0, - REG_SZ, - (PVOID)LanguageId, - (wcslen(LanguageId) + 1) * sizeof(WCHAR)); - NtClose(KeyHandle); - if (!NT_SUCCESS(Status)) - { - DPRINT1("NtSetValueKey() failed (Status %lx)\n", Status); - return FALSE; - } - - /* Skip first 4 zeroes */ - if (wcslen(LanguageId) >= 4) - LanguageId += 4; - - /* Open the NLS language key */ - RtlInitUnicodeString(&KeyName, - L"SYSTEM\CurrentControlSet\Control\NLS\Language"); - - InitializeObjectAttributes(&ObjectAttributes, - &KeyName, - OBJ_CASE_INSENSITIVE, - GetRootKeyByPredefKey(HKEY_LOCAL_MACHINE, NULL), - NULL); - - Status = NtOpenKey(&KeyHandle, - KEY_SET_VALUE, - &ObjectAttributes); - if (!NT_SUCCESS(Status)) - { - DPRINT1("NtOpenKey() failed (Status %lx)\n", Status); - return FALSE; - } - - /* Set default language */ - RtlInitUnicodeString(&ValueName, L"Default"); - Status = NtSetValueKey(KeyHandle, - &ValueName, - 0, - REG_SZ, - (PVOID)LanguageId, - (wcslen(LanguageId) + 1) * sizeof(WCHAR)); - if (!NT_SUCCESS(Status)) - { - DPRINT1("NtSetValueKey() failed (Status %lx)\n", Status); - NtClose(KeyHandle); - return FALSE; - } - - /* Set install language */ - RtlInitUnicodeString(&ValueName, L"InstallLanguage"); - Status = NtSetValueKey(KeyHandle, - &ValueName, - 0, - REG_SZ, - (PVOID)LanguageId, - (wcslen(LanguageId) + 1) * sizeof(WCHAR)); - NtClose(KeyHandle); - if (!NT_SUCCESS(Status)) - { - DPRINT1("NtSetValueKey() failed (Status %lx)\n", Status); - return FALSE; - } - - return TRUE; -} - - -PGENERIC_LIST -CreateKeyboardDriverList( - HINF InfFile) -{ - PGENERIC_LIST List; - INFCONTEXT Context; - - List = CreateGenericList(); - if (List == NULL) - return NULL; - - if (AddEntriesFromInfSection(List, - InfFile, - L"Keyboard", - &Context, - DefaultProcessEntry, - NULL) == -1) - { - DestroyGenericList(List, TRUE); - return NULL; - } - - return List; -} - ULONG GetDefaultLanguageIndex(VOID) { @@ -1166,6 +140,7 @@ CreateLanguageList( return List; }
+ PGENERIC_LIST CreateKeyboardLayoutList( HINF InfFile, @@ -1280,82 +255,4 @@ ProcessKeyboardLayoutFiles( } #endif
-BOOLEAN -SetGeoID( - PWCHAR Id) -{ - NTSTATUS Status; - OBJECT_ATTRIBUTES ObjectAttributes; - UNICODE_STRING Name; - HANDLE KeyHandle; - - RtlInitUnicodeString(&Name, - L".DEFAULT\Control Panel\International\Geo"); - InitializeObjectAttributes(&ObjectAttributes, - &Name, - OBJ_CASE_INSENSITIVE, - GetRootKeyByPredefKey(HKEY_USERS, NULL), - NULL); - Status = NtOpenKey(&KeyHandle, - KEY_SET_VALUE, - &ObjectAttributes); - if (!NT_SUCCESS(Status)) - { - DPRINT1("NtOpenKey() failed (Status %lx)\n", Status); - return FALSE; - } - - RtlInitUnicodeString(&Name, L"Nation"); - Status = NtSetValueKey(KeyHandle, - &Name, - 0, - REG_SZ, - (PVOID)Id, - (wcslen(Id) + 1) * sizeof(WCHAR)); - NtClose(KeyHandle); - if (!NT_SUCCESS(Status)) - { - DPRINT1("NtSetValueKey() failed (Status = %lx)\n", Status); - return FALSE; - } - - return TRUE; -} - - -BOOLEAN -SetDefaultPagefile( - WCHAR Drive) -{ - NTSTATUS Status; - HANDLE KeyHandle; - OBJECT_ATTRIBUTES ObjectAttributes; - UNICODE_STRING KeyName = RTL_CONSTANT_STRING(L"SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management"); - UNICODE_STRING ValueName = RTL_CONSTANT_STRING(L"PagingFiles"); - WCHAR ValueBuffer[] = L"?:\pagefile.sys 0 0\0"; - - InitializeObjectAttributes(&ObjectAttributes, - &KeyName, - OBJ_CASE_INSENSITIVE, - GetRootKeyByPredefKey(HKEY_LOCAL_MACHINE, NULL), - NULL); - Status = NtOpenKey(&KeyHandle, - KEY_ALL_ACCESS, - &ObjectAttributes); - if (!NT_SUCCESS(Status)) - return FALSE; - - ValueBuffer[0] = Drive; - - NtSetValueKey(KeyHandle, - &ValueName, - 0, - REG_MULTI_SZ, - (PVOID)&ValueBuffer, - sizeof(ValueBuffer)); - - NtClose(KeyHandle); - return TRUE; -} - /* EOF */ diff --git a/base/setup/usetup/settings.h b/base/setup/usetup/settings.h index 3ecabd8e52..a320560e5b 100644 --- a/base/setup/usetup/settings.h +++ b/base/setup/usetup/settings.h @@ -26,29 +26,6 @@
#pragma once
-PGENERIC_LIST -CreateComputerTypeList( - HINF InfFile); - -PGENERIC_LIST -CreateDisplayDriverList( - HINF InfFile); - -BOOLEAN -ProcessComputerFiles( - HINF InfFile, - PGENERIC_LIST List, - PWCHAR *AdditionalSectionName); - -BOOLEAN -ProcessDisplayRegistry( - HINF InfFile, - PGENERIC_LIST List); - -PGENERIC_LIST -CreateKeyboardDriverList( - HINF InfFile); - PGENERIC_LIST CreateKeyboardLayoutList( HINF InfFile, @@ -62,10 +39,6 @@ CreateLanguageList( ULONG GetDefaultLanguageIndex(VOID);
-BOOLEAN -ProcessLocaleRegistry( - PGENERIC_LIST List); - BOOLEAN ProcessKeyboardLayoutRegistry( PGENERIC_LIST List); @@ -74,12 +47,4 @@ BOOLEAN ProcessKeyboardLayoutFiles( PGENERIC_LIST List);
-BOOLEAN -SetGeoID( - PWCHAR Id); - -BOOLEAN -SetDefaultPagefile( - WCHAR Drive); - /* EOF */