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