diff --git a/dll/win32/msi/database.c b/dll/win32/msi/database.c index 26a274c9a84..1657a353ba0 100644 --- a/dll/win32/msi/database.c +++ b/dll/win32/msi/database.c @@ -2033,10 +2033,9 @@ UINT __cdecl remote_DatabaseGetPrimaryKeys(MSIHANDLE db, LPCWSTR table, struct w return r; } -HRESULT __cdecl remote_DatabaseGetSummaryInformation(MSIHANDLE db, UINT updatecount, MSIHANDLE *suminfo) +UINT __cdecl remote_DatabaseGetSummaryInformation(MSIHANDLE db, UINT updatecount, MSIHANDLE *suminfo) { - UINT r = MsiGetSummaryInformationW(db, NULL, updatecount, suminfo); - return HRESULT_FROM_WIN32(r); + return MsiGetSummaryInformationW(db, NULL, updatecount, suminfo); } UINT __cdecl remote_DatabaseOpenView(MSIHANDLE db, LPCWSTR query, MSIHANDLE *view) diff --git a/dll/win32/msi/suminfo.c b/dll/win32/msi/suminfo.c index eabd399c39b..0268f631288 100644 --- a/dll/win32/msi/suminfo.c +++ b/dll/win32/msi/suminfo.c @@ -538,23 +538,16 @@ UINT WINAPI MsiGetSummaryInformationW( MSIHANDLE hDatabase, db = msihandle2msiinfo( hDatabase, MSIHANDLETYPE_DATABASE ); if( !db ) { - MSIHANDLE remote; - HRESULT hr; + MSIHANDLE remote, remote_suminfo; if (!(remote = msi_get_remote(hDatabase))) return ERROR_INVALID_HANDLE; - hr = remote_DatabaseGetSummaryInformation(remote, uiUpdateCount, pHandle); + ret = remote_DatabaseGetSummaryInformation(remote, uiUpdateCount, &remote_suminfo); + if (!ret) + *pHandle = alloc_msi_remote_handle(remote_suminfo); - if (FAILED(hr)) - { - if (HRESULT_FACILITY(hr) == FACILITY_WIN32) - return HRESULT_CODE(hr); - - return ERROR_FUNCTION_FAILED; - } - - return ERROR_SUCCESS; + return ret; } } diff --git a/dll/win32/msi/winemsi.idl b/dll/win32/msi/winemsi.idl index 28c3ab10003..7613fd3e3ad 100644 --- a/dll/win32/msi/winemsi.idl +++ b/dll/win32/msi/winemsi.idl @@ -67,7 +67,7 @@ interface IWineMsiRemote MSICONDITION remote_DatabaseIsTablePersistent( [in] MSIHANDLE db, [in] LPCWSTR table ); UINT remote_DatabaseGetPrimaryKeys( [in] MSIHANDLE db, [in, string] LPCWSTR table, [out] struct wire_record **keys ); - HRESULT remote_DatabaseGetSummaryInformation( [in] MSIHANDLE db, [in] UINT updatecount, [out] MSIHANDLE *suminfo ); + UINT remote_DatabaseGetSummaryInformation( [in] MSIHANDLE db, [in] UINT updatecount, [out] MSIHANDLE *suminfo ); UINT remote_DatabaseOpenView( [in] MSIHANDLE db, [in, string] LPCWSTR query, [out] MSIHANDLE *view ); MSIHANDLE remote_GetActiveDatabase( [in] MSIHANDLE hinst ); diff --git a/modules/rostests/winetests/msi/custom.c b/modules/rostests/winetests/msi/custom.c index cdefefd6cdd..e782311446f 100644 --- a/modules/rostests/winetests/msi/custom.c +++ b/modules/rostests/winetests/msi/custom.c @@ -243,7 +243,7 @@ static void test_props(MSIHANDLE hinst) static void test_db(MSIHANDLE hinst) { - MSIHANDLE hdb, view, rec, rec2; + MSIHANDLE hdb, view, rec, rec2, suminfo; char buffer[10]; DWORD sz; UINT r; @@ -413,6 +413,15 @@ static void test_db(MSIHANDLE hinst) r = MsiCloseHandle(rec); ok(hinst, !r, "got %u\n", r); + r = MsiGetSummaryInformationA(hdb, NULL, 1, NULL); + ok(hinst, r == ERROR_INVALID_PARAMETER, "got %u\n", r); + + r = MsiGetSummaryInformationA(hdb, NULL, 1, &suminfo); + ok(hinst, !r, "got %u\n", r); + + r = MsiCloseHandle(suminfo); + ok(hinst, !r, "got %u\n", r); + r = MsiCloseHandle(hdb); ok(hinst, !r, "got %u\n", r); }