Module: wine Branch: master Commit: e3074348fc5768124304b329a24382d0ee63e0dc URL: http://source.winehq.org/git/wine.git/?a=commit;h=e3074348fc5768124304b329a2...
Author: James Hawkins jhawkins@codeweavers.com Date: Mon Nov 3 22:16:54 2008 -0600
msi: Factor out the code to open the UserData features key.
---
dlls/msi/action.c | 21 ++++++--------------- dlls/msi/msi.c | 8 ++++++-- dlls/msi/msipriv.h | 4 ++-- dlls/msi/registry.c | 48 +++++++++++++++++++----------------------------- 4 files changed, 33 insertions(+), 48 deletions(-)
diff --git a/dlls/msi/action.c b/dlls/msi/action.c index 55e8fd2..5d9ba65 100644 --- a/dlls/msi/action.c +++ b/dlls/msi/action.c @@ -3846,20 +3846,10 @@ static UINT ACTION_PublishFeatures(MSIPACKAGE *package) if (rc != ERROR_SUCCESS) goto end;
- if (package->Context == MSIINSTALLCONTEXT_MACHINE) - { - rc = MSIREG_OpenLocalUserDataFeaturesKey(package->ProductCode, - &userdata, TRUE); - if (rc != ERROR_SUCCESS) - goto end; - } - else - { - rc = MSIREG_OpenUserDataFeaturesKey(package->ProductCode, - &userdata, TRUE); - if (rc != ERROR_SUCCESS) - goto end; - } + rc = MSIREG_OpenUserDataFeaturesKey(package->ProductCode, package->Context, + &userdata, TRUE); + if (rc != ERROR_SUCCESS) + goto end;
/* here the guids are base 85 encoded */ LIST_FOR_EACH_ENTRY( feature, &package->features, MSIFEATURE, entry ) @@ -3965,7 +3955,8 @@ static UINT msi_unpublish_feature(MSIPACKAGE *package, MSIFEATURE *feature) RegCloseKey(hkey); }
- r = MSIREG_OpenUserDataFeaturesKey(package->ProductCode, &hkey, FALSE); + r = MSIREG_OpenUserDataFeaturesKey(package->ProductCode, package->Context, + &hkey, FALSE); if (r == ERROR_SUCCESS) { RegDeleteValueW(hkey, feature->Feature); diff --git a/dlls/msi/msi.c b/dlls/msi/msi.c index 91792d4..2b3b635 100644 --- a/dlls/msi/msi.c +++ b/dlls/msi/msi.c @@ -1958,9 +1958,13 @@ INSTALLSTATE WINAPI MsiQueryFeatureStateW(LPCWSTR szProduct, LPCWSTR szFeature) return r;
if (machine) - rc = MSIREG_OpenLocalUserDataFeaturesKey(szProduct, &hkey, FALSE); + rc = MSIREG_OpenUserDataFeaturesKey(szProduct, + MSIINSTALLCONTEXT_MACHINE, + &hkey, FALSE); else - rc = MSIREG_OpenUserDataFeaturesKey(szProduct, &hkey, FALSE); + rc = MSIREG_OpenUserDataFeaturesKey(szProduct, + MSIINSTALLCONTEXT_USERUNMANAGED, + &hkey, FALSE);
if (rc != ERROR_SUCCESS) return INSTALLSTATE_ADVERTISED; diff --git a/dlls/msi/msipriv.h b/dlls/msi/msipriv.h index b853915..d83fae5 100644 --- a/dlls/msi/msipriv.h +++ b/dlls/msi/msipriv.h @@ -770,7 +770,8 @@ extern UINT MSIREG_OpenFeaturesKey(LPCWSTR szProduct, MSIINSTALLCONTEXT context, HKEY *key, BOOL create); extern UINT MSIREG_OpenUserPatchesKey(LPCWSTR szPatch, HKEY* key, BOOL create); extern UINT MSIREG_OpenInstallerFeaturesKey(LPCWSTR szProduct, HKEY* key, BOOL create); -extern UINT MSIREG_OpenUserDataFeaturesKey(LPCWSTR szProduct, HKEY *key, BOOL create); +UINT MSIREG_OpenUserDataFeaturesKey(LPCWSTR szProduct, MSIINSTALLCONTEXT context, + HKEY *key, BOOL create); extern UINT MSIREG_OpenUserComponentsKey(LPCWSTR szComponent, HKEY* key, BOOL create); extern UINT MSIREG_OpenLocalUserDataComponentKey(LPCWSTR szComponent, HKEY *key, BOOL create); extern UINT MSIREG_OpenUserDataComponentKey(LPCWSTR szComponent, HKEY *key, BOOL create); @@ -788,7 +789,6 @@ extern UINT MSIREG_DeleteUserProductKey(LPCWSTR szProduct); extern UINT MSIREG_DeleteUserDataProductKey(LPCWSTR szProduct); extern UINT MSIREG_OpenLocalSystemProductKey(LPCWSTR szProductCode, HKEY *key, BOOL create); extern UINT MSIREG_OpenLocalSystemComponentKey(LPCWSTR szComponent, HKEY *key, BOOL create); -extern UINT MSIREG_OpenLocalUserDataFeaturesKey(LPCWSTR szProduct, HKEY *key, BOOL create); extern UINT MSIREG_DeleteUserFeaturesKey(LPCWSTR szProduct); extern UINT MSIREG_DeleteLocalUserDataComponentKey(LPCWSTR szComponent); extern UINT MSIREG_DeleteUserDataComponentKey(LPCWSTR szComponent); diff --git a/dlls/msi/registry.c b/dlls/msi/registry.c index f1059f7..3ed08f7 100644 --- a/dlls/msi/registry.c +++ b/dlls/msi/registry.c @@ -684,47 +684,37 @@ UINT MSIREG_OpenInstallerFeaturesKey(LPCWSTR szProduct, HKEY* key, BOOL create) return rc; }
-UINT MSIREG_OpenUserDataFeaturesKey(LPCWSTR szProduct, HKEY *key, BOOL create) +UINT MSIREG_OpenUserDataFeaturesKey(LPCWSTR szProduct, MSIINSTALLCONTEXT context, + HKEY *key, BOOL create) { - UINT rc; + UINT r; + LPWSTR usersid; WCHAR squished_pc[GUID_SIZE]; WCHAR keypath[0x200]; - LPWSTR usersid;
- TRACE("%s\n", debugstr_w(szProduct)); + TRACE("(%s, %d, %d)\n", debugstr_w(szProduct), context, create); + if (!squash_guid(szProduct, squished_pc)) return ERROR_FUNCTION_FAILED; + TRACE("squished (%s)\n", debugstr_w(squished_pc));
- rc = get_user_sid(&usersid); - if (rc != ERROR_SUCCESS || !usersid) + if (context == MSIINSTALLCONTEXT_MACHINE) { - ERR("Failed to retrieve user SID: %d\n", rc); - return rc; + sprintfW(keypath, szUserDataFeatures_fmt, localsid, squished_pc); } - - sprintfW(keypath, szUserDataFeatures_fmt, usersid, squished_pc); - - if (create) - rc = RegCreateKeyW(HKEY_LOCAL_MACHINE, keypath, key); else - rc = RegOpenKeyW(HKEY_LOCAL_MACHINE, keypath, key); - - LocalFree(usersid); - return rc; -} - -UINT MSIREG_OpenLocalUserDataFeaturesKey(LPCWSTR szProduct, HKEY *key, BOOL create) -{ - WCHAR squished_pc[GUID_SIZE]; - WCHAR keypath[0x200]; - - TRACE("%s\n", debugstr_w(szProduct)); - if (!squash_guid(szProduct, squished_pc)) - return ERROR_FUNCTION_FAILED; - TRACE("squished (%s)\n", debugstr_w(squished_pc)); + { + r = get_user_sid(&usersid); + if (r != ERROR_SUCCESS || !usersid) + { + ERR("Failed to retrieve user SID: %d\n", r); + return r; + }
- sprintfW(keypath, szUserDataFeatures_fmt, localsid, squished_pc); + sprintfW(keypath, szUserDataFeatures_fmt, usersid, squished_pc); + LocalFree(usersid); + }
if (create) return RegCreateKeyW(HKEY_LOCAL_MACHINE, keypath, key);