Owen Rudge : appwiz.cpl: Read modification path from registry.
Alexandre Julliard
julliard at winehq.org
Wed Jul 15 09:45:53 CDT 2009
Module: wine
Branch: master
Commit: 2f541542991a82fb2d169e6470af0b90f997bf0d
URL: http://source.winehq.org/git/wine.git/?a=commit;h=2f541542991a82fb2d169e6470af0b90f997bf0d
Author: Owen Rudge <owen at owenrudge.net>
Date: Tue Jul 14 17:24:29 2009 -0300
appwiz.cpl: Read modification path from registry.
---
dlls/appwiz.cpl/appwiz.c | 33 +++++++++++++++++++++++++++++++++
1 files changed, 33 insertions(+), 0 deletions(-)
diff --git a/dlls/appwiz.cpl/appwiz.c b/dlls/appwiz.cpl/appwiz.c
index daf3e82..5ad4863 100644
--- a/dlls/appwiz.cpl/appwiz.c
+++ b/dlls/appwiz.cpl/appwiz.c
@@ -56,6 +56,7 @@ typedef struct APPINFO {
LPWSTR title;
LPWSTR path;
+ LPWSTR path_modify;
LPWSTR icon;
int iconIdx;
@@ -85,6 +86,8 @@ static const WCHAR ContactW[] = {'C','o','n','t','a','c','t',0};
static const WCHAR HelpLinkW[] = {'H','e','l','p','L','i','n','k',0};
static const WCHAR HelpTelephoneW[] = {'H','e','l','p','T','e','l','e','p','h',
'o','n','e',0};
+static const WCHAR ModifyPathW[] = {'M','o','d','i','f','y','P','a','t','h',0};
+static const WCHAR NoModifyW[] = {'N','o','M','o','d','i','f','y',0};
static const WCHAR ReadmeW[] = {'R','e','a','d','m','e',0};
static const WCHAR URLUpdateInfoW[] = {'U','R','L','U','p','d','a','t','e','I',
'n','f','o',0};
@@ -129,6 +132,7 @@ static void FreeAppInfo(APPINFO *info)
HeapFree(GetProcessHeap(), 0, info->title);
HeapFree(GetProcessHeap(), 0, info->path);
+ HeapFree(GetProcessHeap(), 0, info->path_modify);
HeapFree(GetProcessHeap(), 0, info->icon);
HeapFree(GetProcessHeap(), 0, info->publisher);
HeapFree(GetProcessHeap(), 0, info->version);
@@ -149,6 +153,7 @@ static BOOL ReadApplicationsFromRegistry(HKEY root)
HKEY hkeyUninst, hkeyApp;
int i, id = 0;
DWORD sizeOfSubKeyName, displen, uninstlen;
+ DWORD dwNoModify, dwType;
WCHAR subKeyName[256];
WCHAR key_app[MAX_STRING_LEN];
WCHAR *p;
@@ -273,6 +278,34 @@ static BOOL ReadApplicationsFromRegistry(HKEY root)
&displen);
}
+ /* Check if NoModify is set */
+ dwType = REG_DWORD;
+ dwNoModify = 0;
+ displen = sizeof(DWORD);
+
+ if (RegQueryValueExW(hkeyApp, NoModifyW, NULL, &dwType, (LPBYTE)&dwNoModify, &displen)
+ != ERROR_SUCCESS)
+ {
+ dwNoModify = 0;
+ }
+
+ /* Some installers incorrectly create a REG_SZ instead of a REG_DWORD - check for
+ ASCII 49, which equals 1 */
+ if (dwType == REG_SZ)
+ dwNoModify = (dwNoModify == 49) ? 1 : 0;
+
+ /* Fetch the modify path */
+ if ((dwNoModify == 0) && (RegQueryValueExW(hkeyApp, ModifyPathW, 0, 0, NULL, &displen)
+ == ERROR_SUCCESS))
+ {
+ iter->path_modify = HeapAlloc(GetProcessHeap(), 0, displen);
+
+ if (!iter->path_modify)
+ goto err;
+
+ RegQueryValueExW(hkeyApp, ModifyPathW, 0, 0, (LPBYTE)iter->path_modify, &displen);
+ }
+
/* registry key */
iter->regroot = root;
lstrcpyW(iter->regkey, subKeyName);
More information about the wine-cvs
mailing list