Module: wine Branch: master Commit: 880b9199a9c54e578d6186b46e6019e1ac970665 URL: http://source.winehq.org/git/wine.git/?a=commit;h=880b9199a9c54e578d6186b46e...
Author: James Hawkins jhawkins@codeweavers.com Date: Sun Dec 14 21:07:09 2008 -0600
msi: Add the ability to query a specific context for a patch.
---
dlls/msi/msipriv.h | 2 ++ dlls/msi/registry.c | 37 +++++++++++++++++++++++-------------- 2 files changed, 25 insertions(+), 14 deletions(-)
diff --git a/dlls/msi/msipriv.h b/dlls/msi/msipriv.h index 0eaa9f3..a7dada7 100644 --- a/dlls/msi/msipriv.h +++ b/dlls/msi/msipriv.h @@ -778,6 +778,8 @@ extern UINT MSIREG_OpenUserDataComponentKey(LPCWSTR szComponent, LPCWSTR szUserS extern UINT MSIREG_OpenPatchesKey(LPCWSTR szPatch, HKEY* key, BOOL create); extern UINT MSIREG_OpenUserDataProductKey(LPCWSTR szProduct, MSIINSTALLCONTEXT dwContext, LPCWSTR szUserSid, HKEY *key, BOOL create); +extern UINT MSIREG_OpenUserDataPatchKey(LPCWSTR szPatch, MSIINSTALLCONTEXT dwContext, + HKEY *key, BOOL create); extern UINT MSIREG_OpenCurrentUserInstallProps(LPCWSTR szProduct, HKEY* key, BOOL create); extern UINT MSIREG_OpenInstallProps(LPCWSTR szProduct, LPCWSTR szUserSID, HKEY *key, BOOL create); diff --git a/dlls/msi/registry.c b/dlls/msi/registry.c index a1c3a48..d8411ee 100644 --- a/dlls/msi/registry.c +++ b/dlls/msi/registry.c @@ -837,30 +837,38 @@ UINT MSIREG_OpenUserDataProductKey(LPCWSTR szProduct, MSIINSTALLCONTEXT dwContex return rc; }
-UINT MSIREG_OpenUserDataPatchKey(LPWSTR patch, HKEY *key, BOOL create) +UINT MSIREG_OpenUserDataPatchKey(LPCWSTR szPatch, MSIINSTALLCONTEXT dwContext, + HKEY *key, BOOL create) { UINT rc; + WCHAR squished_patch[GUID_SIZE]; WCHAR keypath[0x200]; LPWSTR usersid;
- TRACE("\n"); + TRACE("%s\n", debugstr_w(szPatch)); + if (!squash_guid(szPatch, squished_patch)) + return ERROR_FUNCTION_FAILED; + TRACE("squished (%s)\n", debugstr_w(squished_patch));
- rc = get_user_sid(&usersid); - if (rc != ERROR_SUCCESS || !usersid) + if (dwContext == MSIINSTALLCONTEXT_MACHINE) + sprintfW(keypath, szUserDataPatch_fmt, szLocalSid, squished_patch); + else { - 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, szUserDataPatch_fmt, usersid, patch); + sprintfW(keypath, szUserDataPatch_fmt, usersid, squished_patch); + LocalFree(usersid); + }
if (create) - rc = RegCreateKeyW(HKEY_LOCAL_MACHINE, keypath, key); - else - rc = RegOpenKeyW(HKEY_LOCAL_MACHINE, keypath, key); + return RegCreateKeyW(HKEY_LOCAL_MACHINE, keypath, key);
- LocalFree(usersid); - return rc; + return RegOpenKeyW(HKEY_LOCAL_MACHINE, keypath, key); }
UINT MSIREG_OpenInstallProps(LPCWSTR szProduct, LPCWSTR szUserSID, @@ -1819,7 +1827,8 @@ static UINT msi_check_product_patches(LPCWSTR prodcode, LPCWSTR usersid, } else { - temp = MSIREG_OpenUserDataPatchKey(ptr, &patchkey, FALSE); + temp = MSIREG_OpenUserDataPatchKey(patch, context, + &patchkey, FALSE); RegCloseKey(patchkey); if (temp != ERROR_SUCCESS) continue;