msi [5/6]: Handle remote calls to MsiGetProperty

James Hawkins truiken at gmail.com
Mon Jun 25 18:36:52 CDT 2007


Hi,

Changelog:
* Handle remote calls to MsiGetProperty.

 dlls/msi/package.c |   47 +++++++++++++++++++++++++++++++++++++++++++++--
 1 files changed, 45 insertions(+), 2 deletions(-)

-- 
James Hawkins
-------------- next part --------------
diff --git a/dlls/msi/package.c b/dlls/msi/package.c
index e535071..28de13c 100644
--- a/dlls/msi/package.c
+++ b/dlls/msi/package.c
@@ -1340,7 +1340,7 @@ static UINT MSI_GetProperty( MSIHANDLE h
     static const WCHAR empty[] = {0};
     MSIPACKAGE *package;
     MSIRECORD *row = NULL;
-    UINT r;
+    UINT r = ERROR_FUNCTION_FAILED;
     LPCWSTR val = NULL;
 
     TRACE("%lu %s %p %p\n", handle, debugstr_w(name),
@@ -1351,7 +1351,50 @@ static UINT MSI_GetProperty( MSIHANDLE h
 
     package = msihandle2msiinfo( handle, MSIHANDLETYPE_PACKAGE );
     if (!package)
-        return ERROR_INVALID_HANDLE;
+    {
+        HRESULT hr;
+        IWineMsiRemotePackage *remote_package;
+        LPWSTR value = NULL;
+        DWORD len;
+
+        remote_package = (IWineMsiRemotePackage *)msi_get_remote( handle );
+        if (!remote_package)
+            return ERROR_INVALID_HANDLE;
+
+        len = 0;
+        hr = IWineMsiRemotePackage_GetProperty( remote_package, (BSTR *)name, NULL, (ULONG_PTR)&len );
+        if (FAILED(hr))
+            goto done;
+
+        len++;
+        value = msi_alloc(len * sizeof(WCHAR));
+        if (!value)
+        {
+            r = ERROR_OUTOFMEMORY;
+            goto done;
+        }
+
+        hr = IWineMsiRemotePackage_GetProperty( remote_package, (BSTR *)name, (BSTR *)value, (ULONG_PTR)&len );
+        if (FAILED(hr))
+            goto done;
+
+        r = msi_strcpy_to_awstring( value, szValueBuf, pchValueBuf );
+        *pchValueBuf *= sizeof(WCHAR); /* Bug required by Adobe installers */
+
+done:
+        IWineMsiRemotePackage_Release(remote_package);
+        msi_free(value);
+
+        if (FAILED(hr))
+        {
+            if (HRESULT_FACILITY(hr) == FACILITY_WIN32)
+                return HRESULT_CODE(hr);
+
+            return ERROR_FUNCTION_FAILED;
+        }
+
+        return r;
+    }
 
     row = MSI_GetPropertyRow( package, name );
     if (row)
-- 
1.4.1


More information about the wine-patches mailing list