From 3ef498a4deed35517a4d4b8e9e1e3842a5b51832 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Herm=C3=A8s=20B=C3=A9lusca-Ma=C3=AFto?= Date: Wed, 31 May 2017 00:01:31 +0000 Subject: [PATCH] [NTOS]: Minor fixes: - Correctly specify the buffer size for RtlInitEmptyUnicodeString calls; - Prefer using RtlAppendUnicodeStringToString instead of RtlAppendStringToString: both actually do the very same job on counted strings, but the former doesn't need the explicit PSTRING casts, and NULL-terminate the string buffer if possible (aka. if the available remaining length permits it, otherwise it doesn't add any NULL terminator, falling back to the default behaviour of RtlAppendStringToString). - Remove a deprecated commented-out variable. svn path=/trunk/; revision=74708 --- reactos/ntoskrnl/config/cmsysini.c | 34 ++++++++++++++---------------- 1 file changed, 16 insertions(+), 18 deletions(-) diff --git a/reactos/ntoskrnl/config/cmsysini.c b/reactos/ntoskrnl/config/cmsysini.c index 6065e6b5358..b2002bc978a 100644 --- a/reactos/ntoskrnl/config/cmsysini.c +++ b/reactos/ntoskrnl/config/cmsysini.c @@ -1179,7 +1179,7 @@ CmpCreateRegistryRoot(VOID) NTSTATUS NTAPI -CmpGetRegistryPath(IN PWCHAR ConfigPath) +CmpGetRegistryPath(OUT PWCHAR ConfigPath) { OBJECT_ATTRIBUTES ObjectAttributes; NTSTATUS Status; @@ -1257,7 +1257,6 @@ CmpLoadHiveThread(IN PVOID StartContext) UNICODE_STRING TempName, FileName, RegName; ULONG i, ErrorResponse, WorkerCount, Length; USHORT FileStart; - //ULONG RegStart; ULONG PrimaryDisposition, SecondaryDisposition, ClusterSize; PCMHIVE CmHive; HANDLE PrimaryHandle = NULL, LogHandle = NULL; @@ -1273,36 +1272,35 @@ CmpLoadHiveThread(IN PVOID StartContext) CmpMachineHiveList[i].ThreadStarted = TRUE; /* Build the file name and registry name strings */ - RtlInitEmptyUnicodeString(&FileName, FileBuffer, MAX_PATH); - RtlInitEmptyUnicodeString(&RegName, RegBuffer, MAX_PATH); + RtlInitEmptyUnicodeString(&FileName, FileBuffer, sizeof(FileBuffer)); + RtlInitEmptyUnicodeString(&RegName, RegBuffer, sizeof(RegBuffer)); /* Now build the system root path */ CmpGetRegistryPath(ConfigPath); RtlInitUnicodeString(&TempName, ConfigPath); - RtlAppendStringToString((PSTRING)&FileName, (PSTRING)&TempName); + RtlAppendUnicodeStringToString(&FileName, &TempName); FileStart = FileName.Length; /* And build the registry root path */ RtlInitUnicodeString(&TempName, L"\\REGISTRY\\"); - RtlAppendStringToString((PSTRING)&RegName, (PSTRING)&TempName); - //RegStart = RegName.Length; + RtlAppendUnicodeStringToString(&RegName, &TempName); /* Build the base name */ RtlInitUnicodeString(&TempName, CmpMachineHiveList[i].BaseName); - RtlAppendStringToString((PSTRING)&RegName, (PSTRING)&TempName); + RtlAppendUnicodeStringToString(&RegName, &TempName); /* Check if this is a child of the root */ - if (RegName.Buffer[RegName.Length / sizeof(WCHAR) - 1] == '\\') + if (RegName.Buffer[RegName.Length / sizeof(WCHAR) - 1] == OBJ_NAME_PATH_SEPARATOR) { /* Then setup the whole name */ RtlInitUnicodeString(&TempName, CmpMachineHiveList[i].Name); - RtlAppendStringToString((PSTRING)&RegName, (PSTRING)&TempName); + RtlAppendUnicodeStringToString(&RegName, &TempName); } /* Now add the rest of the file name */ RtlInitUnicodeString(&TempName, CmpMachineHiveList[i].Name); FileName.Length = FileStart; - RtlAppendStringToString((PSTRING)&FileName, (PSTRING)&TempName); + RtlAppendUnicodeStringToString(&FileName, &TempName); if (!CmpMachineHiveList[i].CmHive) { /* We need to allocate a new hive structure */ @@ -1426,17 +1424,17 @@ CmpInitializeHiveList(IN USHORT Flag) CmpNoWrite = FALSE; /* Build the file name and registry name strings */ - RtlInitEmptyUnicodeString(&FileName, FileBuffer, MAX_PATH); - RtlInitEmptyUnicodeString(&RegName, RegBuffer, MAX_PATH); + RtlInitEmptyUnicodeString(&FileName, FileBuffer, sizeof(FileBuffer)); + RtlInitEmptyUnicodeString(&RegName, RegBuffer, sizeof(RegBuffer)); /* Now build the system root path */ CmpGetRegistryPath(ConfigPath); RtlInitUnicodeString(&TempName, ConfigPath); - RtlAppendStringToString((PSTRING)&FileName, (PSTRING)&TempName); + RtlAppendUnicodeStringToString(&FileName, &TempName); /* And build the registry root path */ RtlInitUnicodeString(&TempName, L"\\REGISTRY\\"); - RtlAppendStringToString((PSTRING)&RegName, (PSTRING)&TempName); + RtlAppendUnicodeStringToString(&RegName, &TempName); RegStart = RegName.Length; /* Setup the event to synchronize workers */ @@ -1504,14 +1502,14 @@ CmpInitializeHiveList(IN USHORT Flag) /* Build the base name */ RegName.Length = RegStart; RtlInitUnicodeString(&TempName, CmpMachineHiveList[i].BaseName); - RtlAppendStringToString((PSTRING)&RegName, (PSTRING)&TempName); + RtlAppendUnicodeStringToString(&RegName, &TempName); /* Check if this is a child of the root */ - if (RegName.Buffer[RegName.Length / sizeof(WCHAR) - 1] == '\\') + if (RegName.Buffer[RegName.Length / sizeof(WCHAR) - 1] == OBJ_NAME_PATH_SEPARATOR) { /* Then setup the whole name */ RtlInitUnicodeString(&TempName, CmpMachineHiveList[i].Name); - RtlAppendStringToString((PSTRING)&RegName, (PSTRING)&TempName); + RtlAppendUnicodeStringToString(&RegName, &TempName); } /* Now link the hive to its master */ -- 2.17.1