RtlpGetRegistryHandle(): Don't remove a leading backslash if an absolute registry...
authorEric Kohl <eric.kohl@reactos.org>
Wed, 12 Jun 2002 23:24:19 +0000 (23:24 +0000)
committerEric Kohl <eric.kohl@reactos.org>
Wed, 12 Jun 2002 23:24:19 +0000 (23:24 +0000)
svn path=/trunk/; revision=3055

reactos/lib/ntdll/rtl/registry.c
reactos/ntoskrnl/cm/rtlfunc.c

index ecf4571..c6cf22a 100644 (file)
@@ -1,4 +1,4 @@
-/* $Id: registry.c,v 1.13 2002/06/06 14:03:58 ekohl Exp $
+/* $Id: registry.c,v 1.14 2002/06/12 23:21:45 ekohl Exp $
  *
  * COPYRIGHT:         See COPYING in the top level directory
  * PROJECT:           ReactOS kernel
@@ -291,21 +291,28 @@ RtlQueryRegistryValues(IN ULONG RelativeTo,
            }
          else
            {
-             if (ValueInfo->Type == REG_SZ)
+             if (ValueInfo->Type == REG_SZ ||
+                 ValueInfo->Type == REG_EXPAND_SZ ||
+                 ValueInfo->Type == REG_MULTI_SZ)
+#if 0
+                 (ValueInfo->Type == REG_EXPAND_SZ && (QueryEntry->Flags & RTL_QUERY_REGISTRY_NOEXPAND)))
+                 (ValueInfo->Type == REG_MULTI_SZ && (QueryEntry->Flags & RTL_QUERY_REGISTRY_NOEXPAND)))
+#endif
                {
                  PUNICODE_STRING ValueString;
 
                  ValueString = (PUNICODE_STRING)QueryEntry->EntryContext;
-                 if (ValueString->Buffer == 0)
+                 if (ValueString->Buffer == NULL)
                    {
-                     RtlInitUnicodeString(ValueString,
-                                          NULL);
-                     ValueString->MaximumLength = 256 * sizeof(WCHAR);
+                     ValueString->MaximumLength = ValueInfo->DataLength + sizeof(WCHAR);
                      ValueString->Buffer = RtlAllocateHeap(RtlGetProcessHeap(),
                                                            0,
                                                            ValueString->MaximumLength);
-                     if (!ValueString->Buffer)
-                       break;
+                     if (ValueString->Buffer == NULL)
+                       {
+                         Status = STATUS_INSUFFICIENT_RESOURCES;
+                         break;
+                       }
                      ValueString->Buffer[0] = 0;
                     }
                  ValueString->Length = min(ValueInfo->DataLength,
@@ -881,7 +888,7 @@ RtlpGetRegistryHandle(ULONG RelativeTo,
 
   DPRINT("KeyName %wZ\n", &KeyName);
 
-  if (Path[0] == L'\\')
+  if (Path[0] == L'\\' && RelativeTo != RTL_REGISTRY_ABSOLUTE)
     {
       Path++;
     }
index 1d3f5e7..af8c02f 100644 (file)
@@ -305,7 +305,7 @@ RtlQueryRegistryValues(IN ULONG RelativeTo,
 
          if (QueryEntry->Flags & RTL_QUERY_REGISTRY_DELETE)
            {
-             DPRINT1("FIXME: Delete value: %S\n", QueryEntry->Name);
+             DPRINT("FIXME: Delete value: %S\n", QueryEntry->Name);
 
            }
 
@@ -317,6 +317,8 @@ RtlQueryRegistryValues(IN ULONG RelativeTo,
 
          if (QueryEntry->Name != NULL)
            {
+             DPRINT("Callback\n");
+
              RtlInitUnicodeString(&KeyName,
                                   QueryEntry->Name);
 
@@ -375,7 +377,7 @@ RtlQueryRegistryValues(IN ULONG RelativeTo,
 
              if (QueryEntry->Flags & RTL_QUERY_REGISTRY_DELETE)
                {
-                 DPRINT1("FIXME: Delete value: %S\n", QueryEntry->Name);
+                 DPRINT("FIXME: Delete value: %S\n", QueryEntry->Name);
 
                }
 
@@ -608,13 +610,15 @@ RtlpGetRegistryHandle(ULONG RelativeTo,
        break;
     }
 
-  if (Path[0] == L'\\')
+  if (Path[0] == L'\\' && RelativeTo != RTL_REGISTRY_ABSOLUTE)
     {
       Path++;
     }
   RtlAppendUnicodeToString(&KeyName,
                           Path);
 
+  DPRINT("KeyName '%wZ'\n", &KeyName);
+
   InitializeObjectAttributes(&ObjectAttributes,
                             &KeyName,
                             OBJ_CASE_INSENSITIVE,