[USETUP] Code formatting, making also the code closer to mkhive's one. Also, definite...
authorHermès Bélusca-Maïto <hermes.belusca-maito@reactos.org>
Sat, 3 Jun 2017 15:20:09 +0000 (15:20 +0000)
committerHermès Bélusca-Maïto <hermes.belusca-maito@reactos.org>
Wed, 24 Oct 2018 22:51:43 +0000 (00:51 +0200)
svn path=/branches/setup_improvements/; revision=74763

base/setup/usetup/registry.c

index 2587741..fc9b127 100644 (file)
@@ -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;
 }