From c16bc4c28d06bfc6d3c2eb828786b3518ebdecb2 Mon Sep 17 00:00:00 2001 From: Eric Kohl Date: Wed, 12 Jun 2002 23:24:19 +0000 Subject: [PATCH] RtlpGetRegistryHandle(): Don't remove a leading backslash if an absolute registry path is used. svn path=/trunk/; revision=3055 --- reactos/lib/ntdll/rtl/registry.c | 25 ++++++++++++++++--------- reactos/ntoskrnl/cm/rtlfunc.c | 10 +++++++--- 2 files changed, 23 insertions(+), 12 deletions(-) diff --git a/reactos/lib/ntdll/rtl/registry.c b/reactos/lib/ntdll/rtl/registry.c index ecf45718a72..c6cf22ac4ec 100644 --- a/reactos/lib/ntdll/rtl/registry.c +++ b/reactos/lib/ntdll/rtl/registry.c @@ -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++; } diff --git a/reactos/ntoskrnl/cm/rtlfunc.c b/reactos/ntoskrnl/cm/rtlfunc.c index 1d3f5e786ac..af8c02fe58f 100644 --- a/reactos/ntoskrnl/cm/rtlfunc.c +++ b/reactos/ntoskrnl/cm/rtlfunc.c @@ -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,