Module: wine Branch: master Commit: a9e029093431f57d329ac0257279ff92e7fba5b0 URL: http://source.winehq.org/git/wine.git/?a=commit;h=a9e029093431f57d329ac02572...
Author: James Hawkins jhawkins@codeweavers.com Date: Tue Dec 9 00:21:19 2008 -0600
msi: Add the ability to delete multiple users' component keys.
---
dlls/msi/action.c | 4 ++-- dlls/msi/msipriv.h | 3 +-- dlls/msi/registry.c | 35 +++++++++++++---------------------- 3 files changed, 16 insertions(+), 26 deletions(-)
diff --git a/dlls/msi/action.c b/dlls/msi/action.c index fd60505..654a7d0 100644 --- a/dlls/msi/action.c +++ b/dlls/msi/action.c @@ -2922,9 +2922,9 @@ static UINT ACTION_ProcessComponents(MSIPACKAGE *package) else if (ACTION_VerifyComponentForAction(comp, INSTALLSTATE_ABSENT)) { if (package->Context == MSIINSTALLCONTEXT_MACHINE) - MSIREG_DeleteLocalUserDataComponentKey(comp->ComponentId); + MSIREG_DeleteUserDataComponentKey(comp->ComponentId, szLocalSid); else - MSIREG_DeleteUserDataComponentKey(comp->ComponentId); + MSIREG_DeleteUserDataComponentKey(comp->ComponentId, NULL); }
/* UI stuff */ diff --git a/dlls/msi/msipriv.h b/dlls/msi/msipriv.h index 861cae8..99eff8f 100644 --- a/dlls/msi/msipriv.h +++ b/dlls/msi/msipriv.h @@ -787,8 +787,7 @@ extern UINT MSIREG_DeleteProductKey(LPCWSTR szProduct); extern UINT MSIREG_DeleteUserProductKey(LPCWSTR szProduct); extern UINT MSIREG_DeleteUserDataProductKey(LPCWSTR szProduct); extern UINT MSIREG_DeleteUserFeaturesKey(LPCWSTR szProduct); -extern UINT MSIREG_DeleteLocalUserDataComponentKey(LPCWSTR szComponent); -extern UINT MSIREG_DeleteUserDataComponentKey(LPCWSTR szComponent); +extern UINT MSIREG_DeleteUserDataComponentKey(LPCWSTR szComponent, LPCWSTR szUserSid); extern UINT MSIREG_DeleteUserUpgradeCodesKey(LPCWSTR szUpgradeCode); extern UINT MSIREG_OpenClassesUpgradeCodesKey(LPCWSTR szUpgradeCode, HKEY* key, BOOL create); extern UINT MSIREG_DeleteLocalClassesProductKey(LPCWSTR szProductCode); diff --git a/dlls/msi/registry.c b/dlls/msi/registry.c index 2808d7f..3d91626 100644 --- a/dlls/msi/registry.c +++ b/dlls/msi/registry.c @@ -733,20 +733,6 @@ UINT MSIREG_OpenUserComponentsKey(LPCWSTR szComponent, HKEY* key, BOOL create) return rc; }
-UINT MSIREG_DeleteLocalUserDataComponentKey(LPCWSTR szComponent) -{ - WCHAR comp[GUID_SIZE]; - WCHAR keypath[0x200]; - - TRACE("%s\n", debugstr_w(szComponent)); - if (!squash_guid(szComponent, comp)) - return ERROR_FUNCTION_FAILED; - TRACE("squished (%s)\n", debugstr_w(comp)); - - sprintfW(keypath, szUserDataComp_fmt, szLocalSid, comp); - return RegDeleteTreeW(HKEY_LOCAL_MACHINE, keypath); -} - UINT MSIREG_OpenUserDataComponentKey(LPCWSTR szComponent, LPCWSTR szUserSid, HKEY *key, BOOL create) { @@ -783,7 +769,7 @@ UINT MSIREG_OpenUserDataComponentKey(LPCWSTR szComponent, LPCWSTR szUserSid, return rc; }
-UINT MSIREG_DeleteUserDataComponentKey(LPCWSTR szComponent) +UINT MSIREG_DeleteUserDataComponentKey(LPCWSTR szComponent, LPCWSTR szUserSid) { UINT rc; WCHAR comp[GUID_SIZE]; @@ -795,16 +781,21 @@ UINT MSIREG_DeleteUserDataComponentKey(LPCWSTR szComponent) return ERROR_FUNCTION_FAILED; TRACE("squished (%s)\n", debugstr_w(comp));
- rc = get_user_sid(&usersid); - if (rc != ERROR_SUCCESS || !usersid) + if (!szUserSid) { - ERR("Failed to retrieve user SID: %d\n", rc); - return rc; - } + rc = get_user_sid(&usersid); + if (rc != ERROR_SUCCESS || !usersid) + { + ERR("Failed to retrieve user SID: %d\n", rc); + return rc; + }
- sprintfW(keypath, szUserDataComp_fmt, usersid, comp); + sprintfW(keypath, szUserDataComp_fmt, usersid, comp); + LocalFree(usersid); + } + else + sprintfW(keypath, szUserDataComp_fmt, szUserSid, comp);
- LocalFree(usersid); return RegDeleteTreeW(HKEY_LOCAL_MACHINE, keypath); }