https://git.reactos.org/?p=reactos.git;a=commitdiff;h=7af2f717bc6ecb99c1511…
commit 7af2f717bc6ecb99c151193117d990c291bf08aa
Author: Hermès Bélusca-Maïto <hermes.belusca-maito(a)reactos.org>
AuthorDate: Mon Aug 28 14:46:49 2017 +0000
Commit: Hermès Bélusca-Maïto <hermes.belusca-maito(a)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 */