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