https://git.reactos.org/?p=reactos.git;a=commitdiff;h=cd89e5b797c9368272d32…
commit cd89e5b797c9368272d32f397eacacc0d474bbca
Author: Hermès Bélusca-Maïto <hermes.belusca-maito(a)reactos.org>
AuthorDate: Sat Jun 3 15:20:09 2017 +0000
Commit: Hermès Bélusca-Maïto <hermes.belusca-maito(a)reactos.org>
CommitDate: Thu Oct 25 00:51:43 2018 +0200
[USETUP] Code formatting, making also the code closer to mkhive's one. Also,
definitely remove the SetInstallPathValue() hack.
svn path=/branches/setup_improvements/; revision=74763
---
base/setup/usetup/registry.c | 356 +++++++++++++++++++------------------------
1 file changed, 161 insertions(+), 195 deletions(-)
diff --git a/base/setup/usetup/registry.c b/base/setup/usetup/registry.c
index 2587741892..fc9b127358 100644
--- a/base/setup/usetup/registry.c
+++ b/base/setup/usetup/registry.c
@@ -102,6 +102,7 @@ GetRootKey(
*
* Append a multisz string to a multisz registry value.
*/
+// NOTE: Synced with setupapi/install.c ; see also mkhive/reginf.c
#if 0
static void
append_multi_sz_value (HANDLE hkey,
@@ -115,7 +116,7 @@ append_multi_sz_value (HANDLE hkey,
if (RegQueryValueExW( hkey, value, NULL, &type, NULL, &size )) return;
if (type != REG_MULTI_SZ) return;
- if (!(buffer = HeapAlloc( GetProcessHeap(), 0, (size + str_size) * sizeof(WCHAR) )))
return;
+ if (!(buffer = HeapAlloc( GetProcessHeap(), 0, size + str_size * sizeof(WCHAR) )))
return;
if (RegQueryValueExW( hkey, value, NULL, NULL, (BYTE *)buffer, &size )) goto
done;
/* compare each string against all the existing ones */
@@ -196,7 +197,7 @@ do_reg_operation(HANDLE KeyHandle,
PINFCONTEXT Context,
ULONG Flags)
{
- WCHAR EmptyStr = (WCHAR)0;
+ WCHAR EmptyStr = 0;
ULONG Type;
ULONG Size;
@@ -221,7 +222,7 @@ do_reg_operation(HANDLE KeyHandle,
#if 0
if (Flags & (FLG_ADDREG_NOCLOBBER | FLG_ADDREG_OVERWRITEONLY))
{
- BOOL exists = !RegQueryValueExW( hkey, value, NULL, NULL, NULL, NULL );
+ BOOL exists = !RegQueryValueExW( hkey, ValueName, NULL, NULL, NULL, NULL );
if (exists && (flags & FLG_ADDREG_NOCLOBBER))
return TRUE;
if (!exists & (flags & FLG_ADDREG_OVERWRITEONLY))
@@ -272,7 +273,7 @@ do_reg_operation(HANDLE KeyHandle,
if (Size)
{
- Str = (WCHAR*) RtlAllocateHeap (ProcessHeap, 0, Size * sizeof(WCHAR));
+ Str = (WCHAR*) RtlAllocateHeap(ProcessHeap, 0, Size * sizeof(WCHAR));
if (Str == NULL)
return FALSE;
@@ -284,6 +285,7 @@ do_reg_operation(HANDLE KeyHandle,
if (Str == NULL)
return TRUE;
+ DPRINT1("append_multi_sz_value '%S' commented out,
WHY??\n", ValueName);
// append_multi_sz_value( hkey, value, str, size );
RtlFreeHeap (ProcessHeap, 0, Str);
@@ -293,16 +295,16 @@ do_reg_operation(HANDLE KeyHandle,
}
else
{
- if (!SetupGetStringFieldW (Context, 5, NULL, 0, &Size))
+ if (!SetupGetStringFieldW(Context, 5, NULL, 0, &Size))
Size = 0;
if (Size)
{
- Str = (WCHAR*) RtlAllocateHeap (ProcessHeap, 0, Size * sizeof(WCHAR));
+ Str = (WCHAR*)RtlAllocateHeap(ProcessHeap, 0, Size * sizeof(WCHAR));
if (Str == NULL)
return FALSE;
- SetupGetStringFieldW (Context, 5, Str, Size, NULL);
+ SetupGetStringFieldW(Context, 5, Str, Size, NULL);
}
}
@@ -353,7 +355,7 @@ do_reg_operation(HANDLE KeyHandle,
if (Size)
{
- Data = (unsigned char*) RtlAllocateHeap (ProcessHeap, 0, Size);
+ Data = (unsigned char*) RtlAllocateHeap(ProcessHeap, 0, Size);
if (Data == NULL)
return FALSE;
@@ -375,95 +377,95 @@ do_reg_operation(HANDLE KeyHandle,
}
NTSTATUS
-CreateNestedKey (PHANDLE KeyHandle,
- ACCESS_MASK DesiredAccess,
- POBJECT_ATTRIBUTES ObjectAttributes)
+CreateNestedKey(PHANDLE KeyHandle,
+ ACCESS_MASK DesiredAccess,
+ POBJECT_ATTRIBUTES ObjectAttributes)
{
- OBJECT_ATTRIBUTES LocalObjectAttributes;
- UNICODE_STRING LocalKeyName;
- ULONG Disposition;
- NTSTATUS Status;
- USHORT FullNameLength;
- PWCHAR Ptr;
- HANDLE LocalKeyHandle;
-
- Status = NtCreateKey (KeyHandle,
- KEY_ALL_ACCESS,
- ObjectAttributes,
- 0,
- NULL,
- 0,
- &Disposition);
- DPRINT("NtCreateKey(%wZ) called (Status %lx)\n",
ObjectAttributes->ObjectName, Status);
- if (Status != STATUS_OBJECT_NAME_NOT_FOUND)
- return Status;
+ OBJECT_ATTRIBUTES LocalObjectAttributes;
+ UNICODE_STRING LocalKeyName;
+ ULONG Disposition;
+ NTSTATUS Status;
+ USHORT FullNameLength;
+ PWCHAR Ptr;
+ HANDLE LocalKeyHandle;
- /* Copy object attributes */
- RtlCopyMemory (&LocalObjectAttributes,
- ObjectAttributes,
- sizeof(OBJECT_ATTRIBUTES));
- RtlCreateUnicodeString (&LocalKeyName,
- ObjectAttributes->ObjectName->Buffer);
- LocalObjectAttributes.ObjectName = &LocalKeyName;
- FullNameLength = LocalKeyName.Length;
-
- /* Remove the last part of the key name and try to create the key again. */
- while (Status == STATUS_OBJECT_NAME_NOT_FOUND)
+ Status = NtCreateKey(KeyHandle,
+ KEY_ALL_ACCESS,
+ ObjectAttributes,
+ 0,
+ NULL,
+ 0,
+ &Disposition);
+ DPRINT("NtCreateKey(%wZ) called (Status %lx)\n",
ObjectAttributes->ObjectName, Status);
+ if (Status != STATUS_OBJECT_NAME_NOT_FOUND)
+ return Status;
+
+ /* Copy object attributes */
+ RtlCopyMemory(&LocalObjectAttributes,
+ ObjectAttributes,
+ sizeof(OBJECT_ATTRIBUTES));
+ RtlCreateUnicodeString(&LocalKeyName,
+ ObjectAttributes->ObjectName->Buffer);
+ LocalObjectAttributes.ObjectName = &LocalKeyName;
+ FullNameLength = LocalKeyName.Length;
+
+ /* Remove the last part of the key name and try to create the key again. */
+ while (Status == STATUS_OBJECT_NAME_NOT_FOUND)
{
- Ptr = wcsrchr (LocalKeyName.Buffer, '\\');
- if (Ptr == NULL || Ptr == LocalKeyName.Buffer)
+ Ptr = wcsrchr (LocalKeyName.Buffer, '\\');
+ if (Ptr == NULL || Ptr == LocalKeyName.Buffer)
{
- Status = STATUS_UNSUCCESSFUL;
- break;
+ Status = STATUS_UNSUCCESSFUL;
+ break;
}
- *Ptr = (WCHAR)0;
- LocalKeyName.Length = wcslen (LocalKeyName.Buffer) * sizeof(WCHAR);
-
- Status = NtCreateKey (&LocalKeyHandle,
- KEY_ALL_ACCESS,
- &LocalObjectAttributes,
- 0,
- NULL,
- 0,
- &Disposition);
- DPRINT("NtCreateKey(%wZ) called (Status %lx)\n", &LocalKeyName,
Status);
+ *Ptr = (WCHAR)0;
+ LocalKeyName.Length = wcslen (LocalKeyName.Buffer) * sizeof(WCHAR);
+
+ Status = NtCreateKey(&LocalKeyHandle,
+ KEY_ALL_ACCESS,
+ &LocalObjectAttributes,
+ 0,
+ NULL,
+ 0,
+ &Disposition);
+ DPRINT("NtCreateKey(%wZ) called (Status %lx)\n", &LocalKeyName,
Status);
}
- if (!NT_SUCCESS(Status))
+ if (!NT_SUCCESS(Status))
{
- RtlFreeUnicodeString (&LocalKeyName);
- return Status;
+ RtlFreeUnicodeString (&LocalKeyName);
+ return Status;
}
- /* Add removed parts of the key name and create them too. */
- while (TRUE)
+ /* Add removed parts of the key name and create them too. */
+ while (TRUE)
{
- if (LocalKeyName.Length == FullNameLength)
+ if (LocalKeyName.Length == FullNameLength)
{
- Status = STATUS_SUCCESS;
- *KeyHandle = LocalKeyHandle;
- break;
+ Status = STATUS_SUCCESS;
+ *KeyHandle = LocalKeyHandle;
+ break;
}
- NtClose (LocalKeyHandle);
-
- LocalKeyName.Buffer[LocalKeyName.Length / sizeof(WCHAR)] = L'\\';
- LocalKeyName.Length = wcslen (LocalKeyName.Buffer) * sizeof(WCHAR);
-
- Status = NtCreateKey (&LocalKeyHandle,
- KEY_ALL_ACCESS,
- &LocalObjectAttributes,
- 0,
- NULL,
- 0,
- &Disposition);
- DPRINT("NtCreateKey(%wZ) called (Status %lx)\n", &LocalKeyName,
Status);
- if (!NT_SUCCESS(Status))
- break;
+ NtClose(LocalKeyHandle);
+
+ LocalKeyName.Buffer[LocalKeyName.Length / sizeof(WCHAR)] = L'\\';
+ LocalKeyName.Length = wcslen (LocalKeyName.Buffer) * sizeof(WCHAR);
+
+ Status = NtCreateKey(&LocalKeyHandle,
+ KEY_ALL_ACCESS,
+ &LocalObjectAttributes,
+ 0,
+ NULL,
+ 0,
+ &Disposition);
+ DPRINT("NtCreateKey(%wZ) called (Status %lx)\n", &LocalKeyName,
Status);
+ if (!NT_SUCCESS(Status))
+ break;
}
- RtlFreeUnicodeString (&LocalKeyName);
+ RtlFreeUnicodeString(&LocalKeyName);
- return Status;
+ return Status;
}
/***********************************************************************
@@ -474,101 +476,95 @@ CreateNestedKey (PHANDLE KeyHandle,
static BOOLEAN
registry_callback(HINF hInf, PCWSTR Section, BOOLEAN Delete)
{
- OBJECT_ATTRIBUTES ObjectAttributes;
- WCHAR Buffer[MAX_INF_STRING_LENGTH];
- UNICODE_STRING Name;
- UNICODE_STRING Value;
- PUNICODE_STRING ValuePtr;
- NTSTATUS Status;
- UINT Flags;
- ULONG Length;
-
- INFCONTEXT Context;
- HANDLE KeyHandle;
- BOOLEAN Ok;
+ NTSTATUS Status;
+ OBJECT_ATTRIBUTES ObjectAttributes;
+ UNICODE_STRING Name, Value;
+ PUNICODE_STRING ValuePtr;
+ UINT Flags;
+ ULONG Length;
+ WCHAR Buffer[MAX_INF_STRING_LENGTH];
+ INFCONTEXT Context;
+ HANDLE KeyHandle;
+ BOOLEAN Ok;
- Ok = SetupFindFirstLineW (hInf, Section, NULL, &Context);
+ Ok = SetupFindFirstLineW(hInf, Section, NULL, &Context);
+ if (!Ok)
+ return TRUE; /* Don't fail if the section isn't present */
- if (Ok)
+ for (;Ok; Ok = SetupFindNextLine (&Context, &Context))
{
- for (;Ok; Ok = SetupFindNextLine (&Context, &Context))
- {
- /* get root */
- if (!SetupGetStringFieldW (&Context, 1, Buffer, MAX_INF_STRING_LENGTH,
NULL))
- continue;
- if (!GetRootKey (Buffer))
+ /* get root */
+ if (!SetupGetStringFieldW(&Context, 1, Buffer, sizeof(Buffer)/sizeof(WCHAR),
NULL))
+ continue;
+ if (!GetRootKey (Buffer))
continue;
- /* get key */
- Length = wcslen (Buffer);
- if (!SetupGetStringFieldW (&Context, 2, Buffer + Length,
MAX_INF_STRING_LENGTH - Length, NULL))
+ /* get key */
+ Length = wcslen(Buffer);
+ if (!SetupGetStringFieldW(&Context, 2, Buffer + Length,
sizeof(Buffer)/sizeof(WCHAR) - Length, NULL))
*Buffer = 0;
- DPRINT("KeyName: <%S>\n", Buffer);
+ DPRINT("KeyName: <%S>\n", Buffer);
- /* get flags */
- if (!SetupGetIntField (&Context, 4, (PINT)&Flags))
+ /* get flags */
+ if (!SetupGetIntField(&Context, 4, (PINT)&Flags))
Flags = 0;
- DPRINT("Flags: %lx\n", Flags);
-
- RtlInitUnicodeString (&Name,
- Buffer);
+ DPRINT("Flags: %lx\n", Flags);
- InitializeObjectAttributes (&ObjectAttributes,
- &Name,
- OBJ_CASE_INSENSITIVE,
- NULL,
- NULL);
-
- if (Delete || (Flags & FLG_ADDREG_OVERWRITEONLY))
- {
- Status = NtOpenKey (&KeyHandle,
- KEY_ALL_ACCESS,
- &ObjectAttributes);
- if (!NT_SUCCESS(Status))
- {
- DPRINT1("NtOpenKey(%wZ) failed (Status %lx)\n", &Name,
Status);
- continue; /* ignore if it doesn't exist */
- }
- }
- else
- {
- Status = CreateNestedKey (&KeyHandle,
- KEY_ALL_ACCESS,
- &ObjectAttributes);
- if (!NT_SUCCESS(Status))
- {
- DPRINT1("CreateNestedKey(%wZ) failed (Status %lx)\n",
&Name, Status);
- continue;
- }
- }
+ RtlInitUnicodeString(&Name, Buffer);
+ InitializeObjectAttributes(&ObjectAttributes,
+ &Name,
+ OBJ_CASE_INSENSITIVE,
+ NULL,
+ NULL);
- /* get value name */
- if (SetupGetStringFieldW (&Context, 3, Buffer, MAX_INF_STRING_LENGTH,
NULL))
+ if (Delete || (Flags & FLG_ADDREG_OVERWRITEONLY))
+ {
+ Status = NtOpenKey(&KeyHandle,
+ KEY_ALL_ACCESS,
+ &ObjectAttributes);
+ if (!NT_SUCCESS(Status))
{
- RtlInitUnicodeString (&Value,
- Buffer);
- ValuePtr = &Value;
+ DPRINT1("NtOpenKey(%wZ) failed (Status %lx)\n", &Name,
Status);
+ continue; /* ignore if it doesn't exist */
}
- else
+ }
+ else
+ {
+ Status = CreateNestedKey(&KeyHandle,
+ KEY_ALL_ACCESS,
+ &ObjectAttributes);
+ if (!NT_SUCCESS(Status))
{
- ValuePtr = NULL;
+ DPRINT1("CreateNestedKey(%wZ) failed (Status %lx)\n",
&Name, Status);
+ continue;
}
+ }
- /* and now do it */
- if (!do_reg_operation (KeyHandle, ValuePtr, &Context, Flags))
- {
- NtClose (KeyHandle);
- return FALSE;
- }
+ /* get value name */
+ if (SetupGetStringFieldW(&Context, 3, Buffer, sizeof(Buffer)/sizeof(WCHAR),
NULL))
+ {
+ RtlInitUnicodeString(&Value, Buffer);
+ ValuePtr = &Value;
+ }
+ else
+ {
+ ValuePtr = NULL;
+ }
- NtClose (KeyHandle);
+ /* and now do it */
+ if (!do_reg_operation(KeyHandle, ValuePtr, &Context, Flags))
+ {
+ NtClose(KeyHandle);
+ return FALSE;
}
+
+ NtClose(KeyHandle);
}
- return TRUE;
+ return TRUE;
}
@@ -598,60 +594,30 @@ ImportRegistryFile(
return FALSE;
}
- if (!registry_callback(hInf, L"AddReg", FALSE))
+#if 0
+ if (!registry_callback(hInf, L"DelReg", FALSE))
{
DPRINT1("registry_callback() failed\n");
+ InfCloseFile(hInf);
+ return FALSE;
}
+#endif
- if (!registry_callback(hInf, L"AddReg.NT" Architecture, FALSE))
+ if (!registry_callback(hInf, L"AddReg", FALSE))
{
DPRINT1("registry_callback() failed\n");
- }
-
- InfCloseFile(hInf);
-
- return TRUE;
-}
-
-
-BOOLEAN
-SetInstallPathValue(
- PUNICODE_STRING InstallPath)
-{
- OBJECT_ATTRIBUTES ObjectAttributes;
- UNICODE_STRING KeyName =
RTL_CONSTANT_STRING(L"\\Registry\\Machine\\HARDWARE");
- UNICODE_STRING ValueName = RTL_CONSTANT_STRING(L"InstallPath");
- HANDLE KeyHandle;
- NTSTATUS Status;
-
- /* Create the 'secret' InstallPath key */
- InitializeObjectAttributes(&ObjectAttributes,
- &KeyName,
- OBJ_CASE_INSENSITIVE,
- NULL,
- NULL);
- Status = NtOpenKey(&KeyHandle,
- KEY_ALL_ACCESS,
- &ObjectAttributes);
- if (!NT_SUCCESS(Status))
- {
- DPRINT1("NtOpenKey() failed (Status %lx)\n", Status);
+ InfCloseFile(hInf);
return FALSE;
}
- Status = NtSetValueKey(KeyHandle,
- &ValueName,
- 0,
- REG_SZ,
- (PVOID)InstallPath->Buffer,
- InstallPath->Length + sizeof(WCHAR));
- NtClose(KeyHandle);
- if (!NT_SUCCESS(Status))
+ if (!registry_callback(hInf, L"AddReg.NT" Architecture, FALSE))
{
- DPRINT1("NtSetValueKey() failed (Status %lx)\n", Status);
+ DPRINT1("registry_callback() failed\n");
+ InfCloseFile(hInf);
return FALSE;
}
+ InfCloseFile(hInf);
return TRUE;
}