Skip to content

Commit 9b36d74

Browse files
committed
Expand the value if we have a REG_EXPAND_SZ entry
svn path=/trunk/; revision=20299
1 parent d86cf51 commit 9b36d74

File tree

1 file changed

+21
-3
lines changed

1 file changed

+21
-3
lines changed

reactos/subsys/system/services/config.c

Lines changed: 21 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -231,6 +231,8 @@ ScmReadString(HKEY hServiceKey,
231231
DWORD dwError;
232232
DWORD dwSize;
233233
DWORD dwType;
234+
DWORD dwSizeNeeded;
235+
LPWSTR expanded = NULL;
234236
LPBYTE ptr = NULL;
235237

236238
*lpValue = NULL;
@@ -260,9 +262,22 @@ ScmReadString(HKEY hServiceKey,
260262

261263
if (dwType == REG_EXPAND_SZ)
262264
{
263-
/* FIXME: ... */
264-
DPRINT1("Expand me!\n");
265-
*lpValue = (LPWSTR)ptr;
265+
/* Expand the value... */
266+
dwSizeNeeded = ExpandEnvironmentStringsW((LPCWSTR)ptr, NULL, 0);
267+
if (dwSizeNeeded == 0)
268+
{
269+
dwError = GetLastError();
270+
goto done;
271+
}
272+
expanded = HeapAlloc(GetProcessHeap(), 0, dwSizeNeeded);
273+
if (dwSizeNeeded < ExpandEnvironmentStringsW((LPCWSTR)ptr, expanded, dwSizeNeeded))
274+
{
275+
dwError = GetLastError();
276+
goto done;
277+
}
278+
*lpValue = expanded;
279+
HeapFree(GetProcessHeap(), 0, ptr);
280+
dwError = ERROR_SUCCESS;
266281
}
267282
else
268283
{
@@ -271,7 +286,10 @@ ScmReadString(HKEY hServiceKey,
271286

272287
done:;
273288
if (dwError != ERROR_SUCCESS)
289+
{
274290
HeapFree(GetProcessHeap(), 0, ptr);
291+
HeapFree(GetProcessHeap(), 0, expanded);
292+
}
275293

276294
return dwError;
277295
}

0 commit comments

Comments
 (0)