msi/tests: Add test for merging string types.
[wine] / dlls / msi / msiserver.idl
1 /*
2  * Copyright (C) 2007 Mike McCormack
3  * Copyright (C) 2007 Misha Koshelev
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 #include "msiserver_dispids.h"
21 import "unknwn.idl";
22 import "wtypes.idl";
23 import "objidl.idl";
24 import "oaidl.idl";
25
26 cpp_quote("#if 0")
27 typedef unsigned long MSIHANDLE;
28 typedef int INSTALLMESSAGE;
29 typedef int MSICONDITION;
30 typedef int MSIRUNMODE;
31 typedef int INSTALLSTATE;
32 cpp_quote("#endif")
33
34 [
35     uuid(7BDE2046-D03B-4ffc-B84C-A098F38CFF0B),
36     oleautomation,
37     object
38 ]
39 interface IWineMsiRemoteDatabase : IUnknown
40 {
41     HRESULT IsTablePersistent( [in] BSTR table, [out] MSICONDITION *persistent );
42     HRESULT GetPrimaryKeys( [in] BSTR table, [out] MSIHANDLE *keys );
43     HRESULT GetSummaryInformation( [in] UINT updatecount, [out] MSIHANDLE *suminfo );
44     HRESULT OpenView( [in] BSTR query, [out] MSIHANDLE *view );
45     HRESULT SetMsiHandle( [in] MSIHANDLE handle );
46 }
47
48 [
49     uuid(902B3592-9D08-4dfd-A593-D07C52546421),
50     oleautomation,
51     object
52 ]
53 interface IWineMsiRemotePackage : IUnknown
54 {
55     HRESULT SetMsiHandle( [in] MSIHANDLE handle );
56     HRESULT GetActiveDatabase( [out] MSIHANDLE *handle );
57     HRESULT GetProperty( [in] BSTR property, [out] BSTR *value, [out] DWORD *size );
58     HRESULT SetProperty( [in] BSTR property, [in] BSTR value );
59     HRESULT ProcessMessage( [in] INSTALLMESSAGE message, [in] MSIHANDLE record );
60     HRESULT DoAction( [in] BSTR action );
61     HRESULT Sequence( [in] BSTR table, [in] int sequence );
62     HRESULT GetTargetPath( [in] BSTR folder, [out] BSTR *value, [out] DWORD *size );
63     HRESULT SetTargetPath( [in] BSTR folder, [in] BSTR value );
64     HRESULT GetSourcePath( [in] BSTR folder, [out] BSTR *value, [out] DWORD *size );
65     HRESULT GetMode( [in] MSIRUNMODE mode, [out] BOOL *ret );
66     HRESULT GetFeatureState( [in] BSTR feature, [out] INSTALLSTATE *installed, [out] INSTALLSTATE *action );
67     HRESULT SetFeatureState( [in] BSTR feature, [in] INSTALLSTATE state );
68     HRESULT GetComponentState( [in] BSTR component, [out] INSTALLSTATE *installed, [out] INSTALLSTATE *action );
69     HRESULT SetComponentState( [in] BSTR component, [in] INSTALLSTATE state );
70     HRESULT GetLanguage( [out] LANGID *language );
71     HRESULT SetInstallLevel( [in] int level );
72     HRESULT FormatRecord( [in] MSIHANDLE record, [out] BSTR *value );
73     HRESULT EvaluateCondition( [in] BSTR condition );
74 }
75
76 [
77     uuid(56D58B64-8780-4c22-A8BC-8B0B29E4A9F8),
78     oleautomation,
79     object
80 ]
81 interface IWineMsiRemoteCustomAction : IUnknown
82 {
83     HRESULT GetActionInfo( [in] LPCGUID guid, [out] INT *type, [out] MSIHANDLE *handle, [out] BSTR *dllname,
84                            [out] BSTR *function, [out] IWineMsiRemotePackage **package );
85 }
86
87 [ uuid(000C1092-0000-0000-C000-000000000046), version(1.0) ]
88 library WindowsInstaller
89 {
90     dispinterface Installer;
91     dispinterface Record;
92     dispinterface Session;
93     dispinterface Database;
94     dispinterface SummaryInfo;
95     dispinterface View;
96     dispinterface UIPreview;
97     dispinterface FeatureInfo;
98     dispinterface RecordList;
99     dispinterface StringList;
100     dispinterface Product;
101     dispinterface Patch;
102
103     typedef enum {
104         msiInstallStateNotUsed = -7,
105         msiInstallStateBadConfig = -6,
106         msiInstallStateIncomplete = -5,
107         msiInstallStateSourceAbsent = -4,
108         msiInstallStateInvalidArg = -2,
109         msiInstallStateUnknown = -1,
110         msiInstallStateBroken = 0,
111         msiInstallStateAdvertised = 1,
112         msiInstallStateRemoved = 1,
113         msiInstallStateAbsent = 2,
114         msiInstallStateLocal = 3,
115         msiInstallStateSource = 4,
116         msiInstallStateDefault = 5
117     } MsiInstallState;
118
119     typedef enum {
120         msiOpenDatabaseModeReadOnly = 0,
121         msiOpenDatabaseModeTransact = 1,
122         msiOpenDatabaseModeDirect = 2,
123         msiOpenDatabaseModeCreate = 3,
124         msiOpenDatabaseModeCreateDirect = 4,
125         msiOpenDatabaseModePatchFile = 32
126     } MsiOpenDatabaseMode;
127
128     typedef enum {
129         msiUILevelNoChange = 0,
130         msiUILevelDefault = 1,
131         msiUILevelNone = 2,
132         msiUILevelBasic = 3,
133         msiUILevelReduced = 4,
134         msiUILevelFull = 5,
135         msiUILevelHideCancel = 32,
136         msiUILevelProgressOnly = 64,
137         msiUILevelEndDialog = 128,
138         msiUILevelSourceResOnly = 256
139     } MsiUILevel;
140
141     [ uuid(000C1090-0000-0000-C000-000000000046) ]
142     dispinterface Installer
143     {
144     properties:
145         [id(DISPID_INSTALLER_UILEVEL)]
146             MsiUILevel UILevel;
147     methods:
148         [id(DISPID_INSTALLER_CREATERECORD)]
149             Record *CreateRecord([in] long Count);
150         [id(DISPID_INSTALLER_OPENPACKAGE)]
151             Session* OpenPackage(
152                 [in] VARIANT PackagePath,
153                 [in, optional, defaultvalue(0)] long Options);
154         [id(DISPID_INSTALLER_OPENDATABASE)]
155             Database *OpenDatabase(
156                     [in] BSTR DatabasePath,
157                     [in] VARIANT OpenMode);
158         [id(DISPID_INSTALLER_INSTALLPRODUCT)]
159             void InstallProduct(
160                 [in] BSTR PackagePath,
161                 [in, optional, defaultvalue("0")] BSTR PropertyValues);
162         [id(DISPID_INSTALLER_VERSION)]
163             BSTR Version();
164         [id(DISPID_INSTALLER_REGISTRYVALUE), propget]
165             BSTR RegistryValue(
166                 [in] VARIANT Root,
167                 [in] BSTR Key,
168                 [in, optional] VARIANT Value);
169         [id(DISPID_INSTALLER_PRODUCTSTATE), propget]
170             MsiInstallState ProductState(
171                 [in] BSTR Product);
172         [id(DISPID_INSTALLER_PRODUCTINFO), propget]
173             BSTR ProductInfo(
174                 [in] BSTR Product,
175                 [in] BSTR Attribute);
176         [id(DISPID_INSTALLER_PRODUCTS), propget]
177             StringList *Products();
178         [id(DISPID_INSTALLER_RELATEDPRODUCTS), propget]
179             StringList *RelatedProducts(
180                 [in] BSTR UpgradeCode);
181     }
182
183     [ uuid(000C1093-0000-0000-C000-000000000046) ]
184     dispinterface Record
185     {
186     properties:
187     methods:
188         [id(DISPID_RECORD_STRINGDATA), propget]
189             BSTR StringData([in] long Field);
190         [id(DISPID_RECORD_STRINGDATA), propput]
191             void StringData(
192                 [in] long Field,
193                 [in] BSTR rhs);
194         [id(DISPID_RECORD_INTEGERDATA), propget]
195             long IntegerData([in] long Field);
196         [id(DISPID_RECORD_INTEGERDATA), propput]
197             void IntegerData(
198                 [in] long Field,
199                 [in] long rhs);
200         [id(DISPID_RECORD_FIELDCOUNT), propget]
201             long FieldCount();
202     }
203
204     [ uuid(000C1095-0000-0000-C000-000000000046) ]
205     dispinterface StringList
206     {
207         properties:
208         methods:
209         [id(DISPID_LIST__NEWENUM)]
210             IUnknown _NewEnum();
211         [id(DISPID_LIST_ITEM), propget]
212             BSTR Item(long Index);
213         [id(DISPID_LIST_COUNT), propget]
214             long Count();
215     }
216
217     [ uuid(000C1096-0000-0000-C000-000000000046) ]
218     dispinterface RecordList
219     {
220         properties:
221         methods:
222     }
223
224     [ uuid(000C109A-0000-0000-C000-000000000046) ]
225     dispinterface UIPreview
226     {
227         properties:
228         methods:
229     }
230
231     [ uuid(000C109B-0000-0000-C000-000000000046) ]
232     dispinterface SummaryInfo
233     {
234         properties:
235         methods:
236         [id(DISPID_SUMMARYINFO_PROPERTY), propget]
237             VARIANT Property([in] long Pid);
238         [id(DISPID_SUMMARYINFO_PROPERTY), propput]
239             void Property(
240                 [in] long Pid,
241                 [in] VARIANT rhs);
242         [id(DISPID_SUMMARYINFO_PROPERTYCOUNT), propget]
243             long PropertyCount();
244     }
245
246     typedef enum {
247         msiViewModifySeek = -1,
248         msiViewModifyRefresh = 0,
249         msiViewModifyInsert = 1,
250         msiViewModifyUpdate = 2,
251         msiViewModifyAssign = 3,
252         msiViewModifyReplace = 4,
253         msiViewModifyMerge = 5,
254         msiViewModifyDelete = 6,
255         msiViewModifyInsertTemporary = 7,
256         msiViewModifyValidate = 8,
257         msiViewModifyValidateNew = 9,
258         msiViewModifyValidateField = 10,
259         msiViewModifyValidateDelete = 11,
260     } _MsiViewModify;                                /* Added underscore to avoid conflict with function name */
261
262     [ uuid(000C109C-0000-0000-C000-000000000046) ]
263     dispinterface View
264     {
265         properties:
266         methods:
267         [id(DISPID_VIEW_EXECUTE)]
268             void Execute([in, optional, defaultvalue(0)] Record *Params);
269         [id(DISPID_VIEW_FETCH)]
270             Record* Fetch();
271         [id(DISPID_VIEW_MODIFY)]
272             void Modify(
273                 [in] _MsiViewModify Mode,
274                 Record *Record);
275         [id(DISPID_VIEW_CLOSE)]
276             void Close();
277     }
278
279     [ uuid(000C109D-0000-0000-C000-000000000046) ]
280     dispinterface Database
281     {
282         properties:
283         methods:
284         [id(DISPID_DATABASE_OPENVIEW)]
285             View* OpenView([in] BSTR Sql);
286         [id(DISPID_DATABASE_SUMMARYINFORMATION), propget]
287             SummaryInfo *SummaryInformation([in, optional, defaultvalue(0)] long UpdateCount);
288     }
289
290     typedef enum {
291         msiDoActionStatusNoAction = 0,
292         msiDoActionStatusSuccess = 1,
293         msiDoActionStatusUserExit = 2,
294         msiDoActionStatusFailure = 3,
295         msiDoActionStatusSuspend = 4,
296         msiDoActionStatusFinished = 5,
297         msiDoActionStatusWrongState = 6,
298         msiDoActionStatusBadActionData = 7
299     } MsiDoActionStatus;
300
301     typedef enum {
302         msiRunModeAdmin = 0,
303         msiRunModeAdvertise = 1,
304         msiRunModeMaintenance = 2,
305         msiRunModeRollbackEnabled = 3,
306         msiRunModeLogEnabled = 4,
307         msiRunModeOperations = 5,
308         msiRunModeRebootAtEnd = 6,
309         msiRunModeRebootNow = 7,
310         msiRunModeCabinet = 8,
311         msiRunModeSourceShortNames = 9,
312         msiRunModeTargetShortNames = 10,
313         msiRunModeWindows9x = 12,
314         msiRunModeZawEnabled = 13,
315         msiRunModeScheduled = 16,
316         msiRunModeRollback = 17,
317         msiRunModeCommit = 18
318     } MsiRunMode;
319
320     typedef enum {
321         msiEvaluateConditionFalse = 0,
322         msiEvaluateConditionTrue = 1,
323         msiEvaluateConditionNone = 2,
324         msiEvaluateConditionError = 3
325     } _MsiEvaluateCondition;           /* Added underscore to avoid conflict with function name */
326
327     typedef enum {
328         msiMessageStatusError = -1,
329         msiMessageStatusNone = 0,
330         msiMessageStatusOk = 1,
331         msiMessageStatusCancel = 2,
332         msiMessageStatusAbort = 3,
333         msiMessageStatusRetry = 4,
334         msiMessageStatusIgnore = 5,
335         msiMessageStatusYes = 6,
336         msiMessageStatusNo = 7
337     } MsiMessageStatus;
338
339     typedef enum {
340         msiMessageTypeFatalExit = 0,
341         msiMessageTypeError          = 0x01000000,
342         msiMessageTypeWarning        = 0x02000000,
343         msiMessageTypeUser           = 0x03000000,
344         msiMessageTypeInfo           = 0x04000000,
345         msiMessageTypeFilesInUse     = 0x05000000,
346         msiMessageTypeResolveSource  = 0x06000000,
347         msiMessageTypeOutOfDiskSpace = 0x07000000,
348         msiMessageTypeActionStart    = 0x08000000,
349         msiMessageTypeActionData     = 0x09000000,
350         msiMessageTypeProgress       = 0x0a000000,
351         msiMessageTypeCommonData     = 0x0b000000,
352         msiMessageTypeOk = 0,
353         msiMessageTypeOkCancel = 1,
354         msiMessageTypeAbortRetryIgnore = 2,
355         msiMessageTypeYesNoCancel = 3,
356         msiMessageTypeYesNo = 4,
357         msiMessageTypeRetryCancel = 5,
358         msiMessageTypeDefault1 = 0,
359         msiMessageTypeDefault2 = 256,
360         msiMessageTypeDefault3 = 512
361     } MsiMessageType;
362
363     [ uuid(000C109E-0000-0000-C000-000000000046) ]
364     dispinterface Session
365     {
366     properties:
367     methods:
368         [id(DISPID_SESSION_INSTALLER), propget]
369             Installer *Installer();
370         [id(DISPID_SESSION_PROPERTY), propget]
371             BSTR Property([in] BSTR Name);
372         [id(DISPID_SESSION_PROPERTY), propput]
373             void Property(
374                 [in] BSTR Name,
375                 [in] BSTR rhs);
376         [id(DISPID_SESSION_LANGUAGE), propget]
377             long Language();
378         [id(DISPID_SESSION_MODE), propget]
379             VARIANT_BOOL Mode([in] MsiRunMode Flag);
380         [id(DISPID_SESSION_MODE), propput]
381             void Mode(
382                 [in] MsiRunMode Flag,
383                 [in] VARIANT_BOOL rhs);
384         [id(DISPID_SESSION_DATABASE), propget]
385             Database* Database();
386         [id(DISPID_SESSION_DOACTION)]
387             MsiDoActionStatus DoAction([in] BSTR Action);
388         [id(DISPID_SESSION_EVALUATECONDITION)]
389             _MsiEvaluateCondition EvaluateCondition([in] BSTR Expression);
390         [id(DISPID_SESSION_MESSAGE)]
391             MsiMessageStatus Message(
392                 [in] MsiMessageType Kind,
393                 [in] Record *Record);
394         [id(DISPID_SESSION_FEATURECURRENTSTATE), propget]
395             MsiInstallState FeatureCurrentState([in] BSTR Feature);
396         [id(DISPID_SESSION_FEATUREREQUESTSTATE), propget]
397             MsiInstallState FeatureRequestState([in] BSTR Feature);
398         [id(DISPID_SESSION_FEATUREREQUESTSTATE), propput]
399             void FeatureRequestState(
400                 [in] BSTR Feature,
401                 [in] MsiInstallState rhs);
402         [id(DISPID_SESSION_SETINSTALLLEVEL)]
403             void SetInstallLevel([in] long Level);
404     }
405
406     [ uuid(000C109F-0000-0000-C000-000000000046) ]
407     dispinterface FeatureInfo
408     {
409         properties:
410         methods:
411     }
412
413     [ uuid(000C10A0-0000-0000-C000-000000000046) ]
414     dispinterface Product
415     {
416         properties:
417         methods:
418     }
419
420     [ uuid(000C10A1-0000-0000-C000-000000000046) ]
421     dispinterface Patch
422     {
423         properties:
424         methods:
425     }
426 }