DWORD dwError;\r
DWORD dwSize;\r
DWORD dwType;\r
+ DWORD dwSizeNeeded;\r
+ LPWSTR expanded = NULL;\r
LPBYTE ptr = NULL;\r
\r
*lpValue = NULL;\r
\r
if (dwType == REG_EXPAND_SZ)\r
{\r
- /* FIXME: ... */\r
- DPRINT1("Expand me!\n");\r
- *lpValue = (LPWSTR)ptr;\r
+ /* Expand the value... */\r
+ dwSizeNeeded = ExpandEnvironmentStringsW((LPCWSTR)ptr, NULL, 0);\r
+ if (dwSizeNeeded == 0)\r
+ {\r
+ dwError = GetLastError();\r
+ goto done;\r
+ }\r
+ expanded = HeapAlloc(GetProcessHeap(), 0, dwSizeNeeded);\r
+ if (dwSizeNeeded < ExpandEnvironmentStringsW((LPCWSTR)ptr, expanded, dwSizeNeeded))\r
+ {\r
+ dwError = GetLastError();\r
+ goto done;\r
+ }\r
+ *lpValue = expanded;\r
+ HeapFree(GetProcessHeap(), 0, ptr);\r
+ dwError = ERROR_SUCCESS;\r
}\r
else\r
{\r
\r
done:;\r
if (dwError != ERROR_SUCCESS)\r
+ {\r
HeapFree(GetProcessHeap(), 0, ptr);\r
+ HeapFree(GetProcessHeap(), 0, expanded);\r
+ }\r
\r
return dwError;\r
}\r