Mike McCormack : msi: Reimplement MsiGetUserInfo using awstrings.
Alexandre Julliard
julliard at wine.codeweavers.com
Mon Jul 24 06:55:04 CDT 2006
Module: wine
Branch: refs/heads/master
Commit: bb141641d3218f933ff9aed81a6a485ace00bc8c
URL: http://source.winehq.org/git/?p=wine.git;a=commit;h=bb141641d3218f933ff9aed81a6a485ace00bc8c
Author: Mike McCormack <mike at codeweavers.com>
Date: Mon Jul 24 15:25:29 2006 +0900
msi: Reimplement MsiGetUserInfo using awstrings.
---
dlls/msi/msi.c | 144 +++++++++++++++++++++++++++++++-------------------------
1 files changed, 79 insertions(+), 65 deletions(-)
diff --git a/dlls/msi/msi.c b/dlls/msi/msi.c
index 1b12cdf..baf27e1 100644
--- a/dlls/msi/msi.c
+++ b/dlls/msi/msi.c
@@ -1672,90 +1672,104 @@ UINT WINAPI MsiProvideQualifiedComponent
dwInstallMode, NULL, 0, 0, lpPathBuf, pcchPathBuf);
}
-USERINFOSTATE WINAPI MsiGetUserInfoW(LPCWSTR szProduct, LPWSTR lpUserNameBuf,
- DWORD* pcchUserNameBuf, LPWSTR lpOrgNameBuf,
- DWORD* pcchOrgNameBuf, LPWSTR lpSerialBuf, DWORD* pcchSerialBuf)
+/***********************************************************************
+ * MSI_GetUserInfo [internal]
+ */
+USERINFOSTATE WINAPI MSI_GetUserInfo(LPCWSTR szProduct,
+ awstring *lpUserNameBuf, DWORD* pcchUserNameBuf,
+ awstring *lpOrgNameBuf, DWORD* pcchOrgNameBuf,
+ awstring *lpSerialBuf, DWORD* pcchSerialBuf)
{
HKEY hkey;
- DWORD sz;
- UINT rc = ERROR_SUCCESS,rc2 = ERROR_SUCCESS;
+ LPWSTR user, org, serial;
+ UINT r;
+ USERINFOSTATE state;
TRACE("%s %p %p %p %p %p %p\n",debugstr_w(szProduct), lpUserNameBuf,
pcchUserNameBuf, lpOrgNameBuf, pcchOrgNameBuf, lpSerialBuf,
pcchSerialBuf);
- rc = MSIREG_OpenUninstallKey(szProduct, &hkey, FALSE);
- if (rc != ERROR_SUCCESS)
+ if (!szProduct)
+ return USERINFOSTATE_INVALIDARG;
+
+ r = MSIREG_OpenUninstallKey(szProduct, &hkey, FALSE);
+ if (r != ERROR_SUCCESS)
return USERINFOSTATE_UNKNOWN;
- if (lpUserNameBuf)
- {
- sz = *lpUserNameBuf * sizeof(WCHAR);
- rc = RegQueryValueExW( hkey, INSTALLPROPERTY_REGOWNERW, NULL,
- NULL, (LPBYTE)lpUserNameBuf,
- &sz);
- }
- if (!lpUserNameBuf && pcchUserNameBuf)
- {
- sz = 0;
- rc = RegQueryValueExW( hkey, INSTALLPROPERTY_REGOWNERW, NULL,
- NULL, NULL, &sz);
- }
+ user = msi_reg_get_val_str( hkey, INSTALLPROPERTY_REGOWNERW );
+ org = msi_reg_get_val_str( hkey, INSTALLPROPERTY_REGCOMPANYW );
+ serial = msi_reg_get_val_str( hkey, INSTALLPROPERTY_PRODUCTIDW );
- if (pcchUserNameBuf)
- *pcchUserNameBuf = sz / sizeof(WCHAR);
+ RegCloseKey(hkey);
- if (lpOrgNameBuf)
- {
- sz = *pcchOrgNameBuf * sizeof(WCHAR);
- rc2 = RegQueryValueExW( hkey, INSTALLPROPERTY_REGCOMPANYW, NULL,
- NULL, (LPBYTE)lpOrgNameBuf, &sz);
- }
- if (!lpOrgNameBuf && pcchOrgNameBuf)
- {
- sz = 0;
- rc2 = RegQueryValueExW( hkey, INSTALLPROPERTY_REGCOMPANYW, NULL,
- NULL, NULL, &sz);
- }
+ state = USERINFOSTATE_PRESENT;
- if (pcchOrgNameBuf)
- *pcchOrgNameBuf = sz / sizeof(WCHAR);
+ r = msi_strcpy_to_awstring( user, lpUserNameBuf, pcchUserNameBuf );
+ if (r == ERROR_MORE_DATA)
+ state = USERINFOSTATE_MOREDATA;
+ r = msi_strcpy_to_awstring( org, lpOrgNameBuf, pcchOrgNameBuf );
+ if (r == ERROR_MORE_DATA)
+ state = USERINFOSTATE_MOREDATA;
+ r = msi_strcpy_to_awstring( serial, lpSerialBuf, pcchSerialBuf );
+ if (r == ERROR_MORE_DATA)
+ state = USERINFOSTATE_MOREDATA;
- if (rc != ERROR_SUCCESS && rc != ERROR_MORE_DATA &&
- rc2 != ERROR_SUCCESS && rc2 != ERROR_MORE_DATA)
- {
- RegCloseKey(hkey);
- return USERINFOSTATE_ABSENT;
- }
+ msi_free( user );
+ msi_free( org );
+ msi_free( serial );
- if (lpSerialBuf)
- {
- sz = *pcchSerialBuf * sizeof(WCHAR);
- RegQueryValueExW( hkey, INSTALLPROPERTY_PRODUCTIDW, NULL, NULL,
- (LPBYTE)lpSerialBuf, &sz);
- }
- if (!lpSerialBuf && pcchSerialBuf)
- {
- sz = 0;
- rc = RegQueryValueExW( hkey, INSTALLPROPERTY_PRODUCTIDW, NULL,
- NULL, NULL, &sz);
- }
- if (pcchSerialBuf)
- *pcchSerialBuf = sz / sizeof(WCHAR);
+ return state;
+}
- RegCloseKey(hkey);
- return USERINFOSTATE_PRESENT;
+/***********************************************************************
+ * MsiGetUserInfoW [MSI.@]
+ */
+USERINFOSTATE WINAPI MsiGetUserInfoW(LPCWSTR szProduct,
+ LPWSTR lpUserNameBuf, DWORD* pcchUserNameBuf,
+ LPWSTR lpOrgNameBuf, DWORD* pcchOrgNameBuf,
+ LPWSTR lpSerialBuf, DWORD* pcchSerialBuf)
+{
+ awstring user, org, serial;
+
+ user.unicode = TRUE;
+ user.str.w = lpUserNameBuf;
+ org.unicode = TRUE;
+ org.str.w = lpOrgNameBuf;
+ serial.unicode = TRUE;
+ serial.str.w = lpSerialBuf;
+
+ return MSI_GetUserInfo( szProduct, &user, pcchUserNameBuf,
+ &org, pcchOrgNameBuf,
+ &serial, pcchSerialBuf );
}
-USERINFOSTATE WINAPI MsiGetUserInfoA(LPCSTR szProduct, LPSTR lpUserNameBuf,
- DWORD* pcchUserNameBuf, LPSTR lpOrgNameBuf,
- DWORD* pcchOrgNameBuf, LPSTR lpSerialBuf, DWORD* pcchSerialBuf)
+USERINFOSTATE WINAPI MsiGetUserInfoA(LPCSTR szProduct,
+ LPSTR lpUserNameBuf, DWORD* pcchUserNameBuf,
+ LPSTR lpOrgNameBuf, DWORD* pcchOrgNameBuf,
+ LPSTR lpSerialBuf, DWORD* pcchSerialBuf)
{
- FIXME("%s %p %p %p %p %p %p\n",debugstr_a(szProduct), lpUserNameBuf,
- pcchUserNameBuf, lpOrgNameBuf, pcchOrgNameBuf, lpSerialBuf,
- pcchSerialBuf);
+ awstring user, org, serial;
+ LPWSTR prod;
+ UINT r;
+
+ prod = strdupAtoW( szProduct );
+ if (szProduct && !prod)
+ return ERROR_OUTOFMEMORY;
- return USERINFOSTATE_UNKNOWN;
+ user.unicode = FALSE;
+ user.str.a = lpUserNameBuf;
+ org.unicode = FALSE;
+ org.str.a = lpOrgNameBuf;
+ serial.unicode = FALSE;
+ serial.str.a = lpSerialBuf;
+
+ r = MSI_GetUserInfo( prod, &user, pcchUserNameBuf,
+ &org, pcchOrgNameBuf,
+ &serial, pcchSerialBuf );
+
+ msi_free( prod );
+
+ return r;
}
UINT WINAPI MsiCollectUserInfoW(LPCWSTR szProduct)
More information about the wine-cvs
mailing list