1/* 2 * Copyright (C) 2007 James Hawkins 3 * Copyright (C) 2018 Zebediah Figura 4 * 5 * This library is free software; you can redistribute it and/or 6 * modify it under the terms of the GNU Lesser General Public 7 * License as published by the Free Software Foundation; either 8 * version 2.1 of the License, or (at your option) any later version. 9 * 10 * This library is distributed in the hope that it will be useful, 11 * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 13 * Lesser General Public License for more details. 14 * 15 * You should have received a copy of the GNU Lesser General Public 16 * License along with this library; if not, write to the Free Software 17 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA 18 */ 19 20#pragma makedep header 21#pragma makedep client 22#pragma makedep server 23 24import "objidl.idl"; 25 26cpp_quote("#if 0") 27typedef unsigned long MSIHANDLE; 28typedef int INSTALLMESSAGE; 29typedef int MSICONDITION; 30typedef int MSIRUNMODE; 31typedef int INSTALLSTATE; 32typedef int MSICOLINFO; 33typedef int MSIMODIFY; 34typedef int MSICOSTTREE; 35typedef int MSIDBERROR; 36 37#define MSIFIELD_NULL 0 38#define MSIFIELD_INT 1 39#define MSIFIELD_WSTR 3 40#define MSIFIELD_STREAM 4 41cpp_quote("#endif") 42cpp_quote("#include \"msiquery.h\"") 43 44struct wire_field { 45 unsigned int type; 46 [switch_is(type)] union { 47 [case(MSIFIELD_NULL)] ; 48 [case(MSIFIELD_INT)] int iVal; 49 [case(MSIFIELD_WSTR), string] LPWSTR szwVal; 50 [case(MSIFIELD_STREAM)] IStream *stream; 51 } u; 52 int len; 53}; 54 55/* compatible with MSIRECORD minus header */ 56struct wire_record { 57 unsigned int count; 58 UINT64 cookie; 59 [size_is(count+1)] struct wire_field fields[]; 60}; 61 62[ 63 uuid(56D58B64-8780-4c22-A8BC-8B0B29E4A9F8), 64 implicit_handle(handle_t rpc_handle) 65] 66interface IWineMsiRemote 67{ 68 UINT remote_ViewClose( [in] MSIHANDLE view ); 69 UINT remote_ViewExecute( [in] MSIHANDLE view, [in, unique] struct wire_record *record ); 70 UINT remote_ViewFetch( [in] MSIHANDLE view, [out] struct wire_record **record ); 71 UINT remote_ViewGetColumnInfo( [in] MSIHANDLE view, [in] MSICOLINFO info, [out] struct wire_record **record ); 72 MSIDBERROR remote_ViewGetError( [in] MSIHANDLE view, [out, string] LPWSTR *column ); 73 UINT remote_ViewModify( [in] MSIHANDLE view, [in] MSIMODIFY mode, 74 [in] struct wire_record *record, [out] struct wire_record **refreshed ); 75 76 MSICONDITION remote_DatabaseIsTablePersistent( [in] MSIHANDLE db, [in] LPCWSTR table ); 77 UINT remote_DatabaseGetPrimaryKeys( [in] MSIHANDLE db, [in, string] LPCWSTR table, [out] struct wire_record **keys ); 78 UINT remote_DatabaseGetSummaryInformation( [in] MSIHANDLE db, [in] UINT updatecount, [out] MSIHANDLE *suminfo ); 79 UINT remote_DatabaseOpenView( [in] MSIHANDLE db, [in, string] LPCWSTR query, [out] MSIHANDLE *view ); 80 81 UINT remote_SummaryInfoGetPropertyCount( [in] MSIHANDLE suminfo, [out] UINT *count ); 82 UINT remote_SummaryInfoGetProperty( [in] MSIHANDLE suminfo, [in] UINT property, [out] UINT *type, [out] INT *value, 83 [out] FILETIME *ft, [out, string] LPWSTR *buf ); 84 85 MSIHANDLE remote_GetActiveDatabase( [in] MSIHANDLE hinst ); 86 UINT remote_GetProperty( [in] MSIHANDLE hinst, [in, string] LPCWSTR property, [out, string] LPWSTR *value, [out] DWORD *size ); 87 UINT remote_SetProperty( [in] MSIHANDLE hinst, [in, string, unique] LPCWSTR property, [in, string, unique] LPCWSTR value ); 88 int remote_ProcessMessage( [in] MSIHANDLE hinst, [in] INSTALLMESSAGE message, [in] struct wire_record *record ); 89 UINT remote_DoAction( [in] MSIHANDLE hinst, [in, string] LPCWSTR action ); 90 UINT remote_Sequence( [in] MSIHANDLE hinst, [in, string] LPCWSTR table, [in] int sequence ); 91 UINT remote_GetTargetPath( [in] MSIHANDLE hinst, [in, string] LPCWSTR folder, [out, string] LPWSTR *value ); 92 UINT remote_SetTargetPath( [in] MSIHANDLE hinst, [in, string] LPCWSTR folder, [in, string] LPCWSTR value ); 93 UINT remote_GetSourcePath( [in] MSIHANDLE hinst, [in, string] LPCWSTR folder, [out, string] LPWSTR *value ); 94 BOOL remote_GetMode( [in] MSIHANDLE hinst, [in] MSIRUNMODE mode ); 95 UINT remote_SetMode( [in] MSIHANDLE hinst, [in] MSIRUNMODE mode, [in] BOOL state ); 96 UINT remote_GetFeatureState( [in] MSIHANDLE hinst, [in, string] LPCWSTR feature, [out] INSTALLSTATE *installed, [out] INSTALLSTATE *action ); 97 UINT remote_SetFeatureState( [in] MSIHANDLE hinst, [in, string] LPCWSTR feature, [in] INSTALLSTATE state ); 98 UINT remote_GetComponentState( [in] MSIHANDLE hinst, [in, string] LPCWSTR component, [out] INSTALLSTATE *installed, [out] INSTALLSTATE *action ); 99 UINT remote_SetComponentState( [in] MSIHANDLE hinst, [in, string] LPCWSTR component, [in] INSTALLSTATE state ); 100 LANGID remote_GetLanguage( [in] MSIHANDLE hinst ); 101 UINT remote_SetInstallLevel( [in] MSIHANDLE hinst, [in] int level ); 102 UINT remote_FormatRecord( [in] MSIHANDLE hinst, [in] struct wire_record *record, [out, string] LPWSTR *value); 103 MSICONDITION remote_EvaluateCondition( [in] MSIHANDLE hinst, [in, string] LPCWSTR condition ); 104 UINT remote_GetFeatureCost( [in] MSIHANDLE hinst, [in, string] LPCWSTR feature, [in] MSICOSTTREE cost_tree, [in] INSTALLSTATE state, [out] INT *cost ); 105 UINT remote_EnumComponentCosts( [in] MSIHANDLE hinst, [in, string, unique] LPCWSTR component, [in] DWORD index, [in] INSTALLSTATE state, 106 [out, string, size_is(3)] LPWSTR drive, [out] INT *cost, [out] INT *temp ); 107 108 UINT remote_GetActionInfo( [in] const GUID *guid, [out, string] WCHAR **action, [out] int *type, [out, string] WCHAR **dllname, 109 [out, string] char **function, [out] MSIHANDLE *hinst ); 110 UINT remote_CloseHandle( [in] MSIHANDLE handle ); 111} 112