Expand the value if we have a REG_EXPAND_SZ entry Modified: trunk/reactos/subsys/system/services/config.c _____
Modified: trunk/reactos/subsys/system/services/config.c --- trunk/reactos/subsys/system/services/config.c 2005-12-22 11:50:12 UTC (rev 20298) +++ trunk/reactos/subsys/system/services/config.c 2005-12-22 13:54:07 UTC (rev 20299) @@ -231,6 +231,8 @@
DWORD dwError; DWORD dwSize; DWORD dwType; + DWORD dwSizeNeeded; + LPWSTR expanded = NULL; LPBYTE ptr = NULL;
*lpValue = NULL; @@ -260,9 +262,22 @@
if (dwType == REG_EXPAND_SZ) { - /* FIXME: ... */ - DPRINT1("Expand me!\n"); - *lpValue = (LPWSTR)ptr; + /* Expand the value... */ + dwSizeNeeded = ExpandEnvironmentStringsW((LPCWSTR)ptr, NULL, 0); + if (dwSizeNeeded == 0) + { + dwError = GetLastError(); + goto done; + } + expanded = HeapAlloc(GetProcessHeap(), 0, dwSizeNeeded); + if (dwSizeNeeded < ExpandEnvironmentStringsW((LPCWSTR)ptr, expanded, dwSizeNeeded)) + { + dwError = GetLastError(); + goto done; + } + *lpValue = expanded; + HeapFree(GetProcessHeap(), 0, ptr); + dwError = ERROR_SUCCESS; } else { @@ -271,7 +286,10 @@
done:; if (dwError != ERROR_SUCCESS) + { HeapFree(GetProcessHeap(), 0, ptr); + HeapFree(GetProcessHeap(), 0, expanded); + }
return dwError; }