1 /**
2  * This file is part of the mingw-w64 runtime package.
3  * No warranty is given; refer to the file DISCLAIMER within this package.
4  */
5 #include <winapifamily.h>
6 
7 #ifndef _INC_OLE
8 #define _INC_OLE
9 
10 #ifdef __cplusplus
11 extern "C" {
12 #endif
13 
14 #ifndef WINAPI
15 #define WINAPI PASCAL
16 #define CALLBACK PASCAL
17 #define LPCSTR LPSTR
18 #define LRESULT LONG_PTR
19 #define HGLOBAL HANDLE
20 #endif
21 
22 #ifdef STRICT
23 #define OLE_LPCSTR LPCSTR
24 #define OLE_CONST const
25 #else
26 #define OLE_LPCSTR LPSTR
27 #define OLE_CONST
28 #endif
29 
30 #define LRESULT LONG_PTR
31 #define HGLOBAL HANDLE
32 
33 #define OT_LINK __MSABI_LONG(1)
34 #define OT_EMBEDDED __MSABI_LONG(2)
35 #define OT_STATIC __MSABI_LONG(3)
36 
37 #define OLEVERB_PRIMARY 0
38 
39   typedef struct _OLETARGETDEVICE {
40     USHORT otdDeviceNameOffset;
41     USHORT otdDriverNameOffset;
42     USHORT otdPortNameOffset;
43     USHORT otdExtDevmodeOffset;
44     USHORT otdExtDevmodeSize;
45     USHORT otdEnvironmentOffset;
46     USHORT otdEnvironmentSize;
47     BYTE otdData[1];
48   } OLETARGETDEVICE;
49   typedef OLETARGETDEVICE *LPOLETARGETDEVICE;
50 
51 #define OF_SET 0x1
52 #define OF_GET 0x2
53 #define OF_HANDLER 0x4
54 
55   typedef enum {
56     OLE_OK,
57     OLE_WAIT_FOR_RELEASE,
58     OLE_BUSY,
59     OLE_ERROR_PROTECT_ONLY,
60     OLE_ERROR_MEMORY,
61     OLE_ERROR_STREAM,
62     OLE_ERROR_STATIC,
63     OLE_ERROR_BLANK,
64     OLE_ERROR_DRAW,
65     OLE_ERROR_METAFILE,
66     OLE_ERROR_ABORT,
67     OLE_ERROR_CLIPBOARD,
68     OLE_ERROR_FORMAT,
69     OLE_ERROR_OBJECT,
70     OLE_ERROR_OPTION,
71     OLE_ERROR_PROTOCOL,
72     OLE_ERROR_ADDRESS,
73     OLE_ERROR_NOT_EQUAL,
74     OLE_ERROR_HANDLE,
75     OLE_ERROR_GENERIC,
76     OLE_ERROR_CLASS,
77     OLE_ERROR_SYNTAX,
78     OLE_ERROR_DATATYPE,
79     OLE_ERROR_PALETTE,
80     OLE_ERROR_NOT_LINK,
81     OLE_ERROR_NOT_EMPTY,
82     OLE_ERROR_SIZE,
83     OLE_ERROR_DRIVE,
84     OLE_ERROR_NETWORK,
85     OLE_ERROR_NAME,
86     OLE_ERROR_TEMPLATE,
87     OLE_ERROR_NEW,
88     OLE_ERROR_EDIT,
89     OLE_ERROR_OPEN,
90     OLE_ERROR_NOT_OPEN,
91     OLE_ERROR_LAUNCH,
92     OLE_ERROR_COMM,
93     OLE_ERROR_TERMINATE,
94     OLE_ERROR_COMMAND,
95     OLE_ERROR_SHOW,
96     OLE_ERROR_DOVERB,
97     OLE_ERROR_ADVISE_NATIVE,
98     OLE_ERROR_ADVISE_PICT,
99     OLE_ERROR_ADVISE_RENAME,
100     OLE_ERROR_POKE_NATIVE,
101     OLE_ERROR_REQUEST_NATIVE,
102     OLE_ERROR_REQUEST_PICT,
103     OLE_ERROR_SERVER_BLOCKED,
104     OLE_ERROR_REGISTRATION,
105     OLE_ERROR_ALREADY_REGISTERED,
106     OLE_ERROR_TASK,
107     OLE_ERROR_OUTOFDATE,
108     OLE_ERROR_CANT_UPDATE_CLIENT,
109     OLE_ERROR_UPDATE,
110     OLE_ERROR_SETDATA_FORMAT,
111     OLE_ERROR_STATIC_FROM_OTHER_OS,
112     OLE_ERROR_FILE_VER,
113     OLE_WARN_DELETE_DATA = 1000
114   } OLESTATUS;
115 
116   typedef enum {
117     OLE_CHANGED,
118     OLE_SAVED,
119     OLE_CLOSED,
120     OLE_RENAMED,
121     OLE_QUERY_PAINT,
122     OLE_RELEASE,
123     OLE_QUERY_RETRY
124   } OLE_NOTIFICATION;
125 
126   typedef enum {
127     OLE_NONE,
128     OLE_DELETE,
129     OLE_LNKPASTE,
130     OLE_EMBPASTE,
131     OLE_SHOW,
132     OLE_RUN,
133     OLE_ACTIVATE,
134     OLE_UPDATE,
135     OLE_CLOSE,
136     OLE_RECONNECT,
137     OLE_SETUPDATEOPTIONS,
138     OLE_SERVERUNLAUNCH,
139     OLE_LOADFROMSTREAM,
140     OLE_SETDATA,
141     OLE_REQUESTDATA,
142     OLE_OTHER,
143     OLE_CREATE,
144     OLE_CREATEFROMTEMPLATE,
145     OLE_CREATELINKFROMFILE,
146     OLE_COPYFROMLNK,
147     OLE_CREATEFROMFILE,
148     OLE_CREATEINVISIBLE
149   } OLE_RELEASE_METHOD;
150 
151   typedef enum {
152     olerender_none,
153     olerender_draw,
154     olerender_format
155   } OLEOPT_RENDER;
156 
157   typedef WORD OLECLIPFORMAT;
158 
159   typedef enum {
160     oleupdate_always,
161     oleupdate_onsave,
162 #ifdef OLE_INTERNAL
163     oleupdate_oncall,
164     oleupdate_onclose
165 #else
166     oleupdate_oncall
167 #endif
168   } OLEOPT_UPDATE;
169 
170   typedef HANDLE HOBJECT;
171   typedef LONG_PTR LHSERVER;
172   typedef LONG_PTR LHCLIENTDOC;
173   typedef LONG_PTR LHSERVERDOC;
174   typedef struct _OLEOBJECT *LPOLEOBJECT;
175   typedef struct _OLESTREAM *LPOLESTREAM;
176   typedef struct _OLECLIENT *LPOLECLIENT;
177   typedef struct _OLEOBJECTVTBL {
178     void *(CALLBACK *QueryProtocol) (LPOLEOBJECT, OLE_LPCSTR);
179     OLESTATUS (CALLBACK *Release) (LPOLEOBJECT);
180     OLESTATUS (CALLBACK *Show) (LPOLEOBJECT, WINBOOL);
181     OLESTATUS (CALLBACK *DoVerb) (LPOLEOBJECT, UINT, WINBOOL, WINBOOL);
182     OLESTATUS (CALLBACK *GetData) (LPOLEOBJECT, OLECLIPFORMAT, HANDLE *);
183     OLESTATUS (CALLBACK *SetData) (LPOLEOBJECT, OLECLIPFORMAT, HANDLE);
184     OLESTATUS (CALLBACK *SetTargetDevice) (LPOLEOBJECT, HGLOBAL);
185     OLESTATUS (CALLBACK *SetBounds) (LPOLEOBJECT, OLE_CONST RECT *);
186     OLECLIPFORMAT (CALLBACK *EnumFormats) (LPOLEOBJECT, OLECLIPFORMAT);
187     OLESTATUS (CALLBACK *SetColorScheme) (LPOLEOBJECT, OLE_CONST LOGPALETTE *);
188 #ifndef SERVERONLY
189     OLESTATUS (CALLBACK *Delete) (LPOLEOBJECT);
190     OLESTATUS (CALLBACK *SetHostNames) (LPOLEOBJECT, OLE_LPCSTR, OLE_LPCSTR);
191     OLESTATUS (CALLBACK *SaveToStream) (LPOLEOBJECT, LPOLESTREAM);
192     OLESTATUS (CALLBACK *Clone) (LPOLEOBJECT, LPOLECLIENT, LHCLIENTDOC, OLE_LPCSTR, LPOLEOBJECT *);
193     OLESTATUS (CALLBACK *CopyFromLink) (LPOLEOBJECT, LPOLECLIENT, LHCLIENTDOC, OLE_LPCSTR, LPOLEOBJECT *);
194     OLESTATUS (CALLBACK *Equal) (LPOLEOBJECT, LPOLEOBJECT);
195     OLESTATUS (CALLBACK *CopyToClipboard) (LPOLEOBJECT);
196     OLESTATUS (CALLBACK *Draw) (LPOLEOBJECT, HDC, OLE_CONST RECT *, OLE_CONST RECT *, HDC);
197     OLESTATUS (CALLBACK *Activate) (LPOLEOBJECT, UINT, WINBOOL, WINBOOL, HWND, OLE_CONST RECT *);
198     OLESTATUS (CALLBACK *Execute) (LPOLEOBJECT, HGLOBAL, UINT);
199     OLESTATUS (CALLBACK *Close) (LPOLEOBJECT);
200     OLESTATUS (CALLBACK *Update) (LPOLEOBJECT);
201     OLESTATUS (CALLBACK *Reconnect) (LPOLEOBJECT);
202     OLESTATUS (CALLBACK *ObjectConvert) (LPOLEOBJECT, OLE_LPCSTR, LPOLECLIENT, LHCLIENTDOC, OLE_LPCSTR, LPOLEOBJECT *);
203     OLESTATUS (CALLBACK *GetLinkUpdateOptions) (LPOLEOBJECT, OLEOPT_UPDATE *);
204     OLESTATUS (CALLBACK *SetLinkUpdateOptions) (LPOLEOBJECT, OLEOPT_UPDATE);
205     OLESTATUS (CALLBACK *Rename) (LPOLEOBJECT, OLE_LPCSTR);
206     OLESTATUS (CALLBACK *QueryName) (LPOLEOBJECT, LPSTR, UINT *);
207     OLESTATUS (CALLBACK *QueryType) (LPOLEOBJECT, LONG *);
208     OLESTATUS (CALLBACK *QueryBounds) (LPOLEOBJECT, RECT *);
209     OLESTATUS (CALLBACK *QuerySize) (LPOLEOBJECT, DWORD *);
210     OLESTATUS (CALLBACK *QueryOpen) (LPOLEOBJECT);
211     OLESTATUS (CALLBACK *QueryOutOfDate) (LPOLEOBJECT);
212     OLESTATUS (CALLBACK *QueryReleaseStatus) (LPOLEOBJECT);
213     OLESTATUS (CALLBACK *QueryReleaseError) (LPOLEOBJECT);
214     OLE_RELEASE_METHOD (CALLBACK *QueryReleaseMethod) (LPOLEOBJECT);
215     OLESTATUS (CALLBACK *RequestData) (LPOLEOBJECT, OLECLIPFORMAT);
216     OLESTATUS (CALLBACK *ObjectLong) (LPOLEOBJECT, UINT, LONG *);
217     OLESTATUS (CALLBACK *ChangeData) (LPOLEOBJECT, HANDLE, LPOLECLIENT, WINBOOL);
218 #endif
219   } OLEOBJECTVTBL;
220 
221   typedef OLEOBJECTVTBL *LPOLEOBJECTVTBL;
222 #ifndef OLE_INTERNAL
223   typedef struct _OLEOBJECT {
224     LPOLEOBJECTVTBL lpvtbl;
225   } OLEOBJECT;
226 #endif
227 
228   typedef struct _OLECLIENTVTBL {
229     int (CALLBACK *CallBack) (LPOLECLIENT, OLE_NOTIFICATION, LPOLEOBJECT);
230   } OLECLIENTVTBL;
231 
232   typedef OLECLIENTVTBL *LPOLECLIENTVTBL;
233 
234   typedef struct _OLECLIENT {
235     LPOLECLIENTVTBL lpvtbl;
236   } OLECLIENT;
237 
238   typedef struct _OLESTREAMVTBL {
239     DWORD (CALLBACK *Get) (LPOLESTREAM, void *, DWORD);
240     DWORD (CALLBACK *Put) (LPOLESTREAM, OLE_CONST void *, DWORD);
241   } OLESTREAMVTBL;
242   typedef OLESTREAMVTBL *LPOLESTREAMVTBL;
243 
244   typedef struct _OLESTREAM {
245     LPOLESTREAMVTBL lpstbl;
246   } OLESTREAM;
247 
248 #if WINAPI_FAMILY_PARTITION (WINAPI_PARTITION_DESKTOP)
249   OLESTATUS WINAPI OleDelete (LPOLEOBJECT);
250   OLESTATUS WINAPI OleRelease (LPOLEOBJECT);
251   OLESTATUS WINAPI OleSaveToStream (LPOLEOBJECT, LPOLESTREAM);
252   OLESTATUS WINAPI OleEqual (LPOLEOBJECT, LPOLEOBJECT);
253   OLESTATUS WINAPI OleCopyToClipboard (LPOLEOBJECT);
254   OLESTATUS WINAPI OleSetHostNames (LPOLEOBJECT, LPCSTR, LPCSTR);
255   OLESTATUS WINAPI OleSetTargetDevice (LPOLEOBJECT, HGLOBAL);
256   OLESTATUS WINAPI OleSetBounds (LPOLEOBJECT, const RECT *);
257   OLESTATUS WINAPI OleSetColorScheme (LPOLEOBJECT, const LOGPALETTE *);
258   OLESTATUS WINAPI OleQueryBounds (LPOLEOBJECT, RECT *);
259   OLESTATUS WINAPI OleQuerySize (LPOLEOBJECT, DWORD *);
260   OLESTATUS WINAPI OleDraw (LPOLEOBJECT, HDC, const RECT *, const RECT *, HDC);
261   OLESTATUS WINAPI OleQueryOpen (LPOLEOBJECT);
262   OLESTATUS WINAPI OleActivate (LPOLEOBJECT, UINT, WINBOOL, WINBOOL, HWND, const RECT *);
263   OLESTATUS WINAPI OleExecute (LPOLEOBJECT, HGLOBAL, UINT);
264   OLESTATUS WINAPI OleClose (LPOLEOBJECT);
265   OLESTATUS WINAPI OleUpdate (LPOLEOBJECT);
266   OLESTATUS WINAPI OleReconnect (LPOLEOBJECT);
267   OLESTATUS WINAPI OleGetLinkUpdateOptions (LPOLEOBJECT, OLEOPT_UPDATE *);
268   OLESTATUS WINAPI OleSetLinkUpdateOptions (LPOLEOBJECT, OLEOPT_UPDATE);
269   void *WINAPI OleQueryProtocol (LPOLEOBJECT, LPCSTR);
270   OLESTATUS WINAPI OleQueryReleaseStatus (LPOLEOBJECT);
271   OLESTATUS WINAPI OleQueryReleaseError (LPOLEOBJECT);
272   OLE_RELEASE_METHOD WINAPI OleQueryReleaseMethod (LPOLEOBJECT);
273   OLESTATUS WINAPI OleQueryType (LPOLEOBJECT, LONG *);
274   DWORD WINAPI OleQueryClientVersion (void);
275   DWORD WINAPI OleQueryServerVersion (void);
276   OLECLIPFORMAT WINAPI OleEnumFormats (LPOLEOBJECT, OLECLIPFORMAT);
277   OLESTATUS WINAPI OleGetData (LPOLEOBJECT, OLECLIPFORMAT, HANDLE *);
278   OLESTATUS WINAPI OleSetData (LPOLEOBJECT, OLECLIPFORMAT, HANDLE);
279   OLESTATUS WINAPI OleQueryOutOfDate (LPOLEOBJECT);
280   OLESTATUS WINAPI OleRequestData (LPOLEOBJECT, OLECLIPFORMAT);
281   OLESTATUS WINAPI OleQueryLinkFromClip (LPCSTR, OLEOPT_RENDER, OLECLIPFORMAT);
282   OLESTATUS WINAPI OleQueryCreateFromClip (LPCSTR, OLEOPT_RENDER, OLECLIPFORMAT);
283   OLESTATUS WINAPI OleCreateFromClip (LPCSTR, LPOLECLIENT, LHCLIENTDOC, LPCSTR, LPOLEOBJECT *, OLEOPT_RENDER, OLECLIPFORMAT);
284   OLESTATUS WINAPI OleCreateLinkFromClip (LPCSTR, LPOLECLIENT, LHCLIENTDOC, LPCSTR, LPOLEOBJECT *, OLEOPT_RENDER, OLECLIPFORMAT);
285   OLESTATUS WINAPI OleCreateFromFile (LPCSTR, LPOLECLIENT, LPCSTR, LPCSTR, LHCLIENTDOC, LPCSTR, LPOLEOBJECT *, OLEOPT_RENDER, OLECLIPFORMAT);
286   OLESTATUS WINAPI OleCreateLinkFromFile (LPCSTR, LPOLECLIENT, LPCSTR, LPCSTR, LPCSTR, LHCLIENTDOC, LPCSTR, LPOLEOBJECT *, OLEOPT_RENDER, OLECLIPFORMAT);
287   OLESTATUS WINAPI OleLoadFromStream (LPOLESTREAM, LPCSTR, LPOLECLIENT, LHCLIENTDOC, LPCSTR, LPOLEOBJECT *);
288   OLESTATUS WINAPI OleCreate (LPCSTR, LPOLECLIENT, LPCSTR, LHCLIENTDOC, LPCSTR, LPOLEOBJECT *, OLEOPT_RENDER, OLECLIPFORMAT);
289   OLESTATUS WINAPI OleCreateInvisible (LPCSTR, LPOLECLIENT, LPCSTR, LHCLIENTDOC, LPCSTR, LPOLEOBJECT *, OLEOPT_RENDER, OLECLIPFORMAT, WINBOOL);
290   OLESTATUS WINAPI OleCreateFromTemplate (LPCSTR, LPOLECLIENT, LPCSTR, LHCLIENTDOC, LPCSTR, LPOLEOBJECT *, OLEOPT_RENDER, OLECLIPFORMAT);
291   OLESTATUS WINAPI OleClone (LPOLEOBJECT, LPOLECLIENT, LHCLIENTDOC, LPCSTR, LPOLEOBJECT *);
292   OLESTATUS WINAPI OleCopyFromLink (LPOLEOBJECT, LPCSTR, LPOLECLIENT, LHCLIENTDOC, LPCSTR, LPOLEOBJECT *);
293   OLESTATUS WINAPI OleObjectConvert (LPOLEOBJECT, LPCSTR, LPOLECLIENT, LHCLIENTDOC, LPCSTR, LPOLEOBJECT *);
294   OLESTATUS WINAPI OleRename (LPOLEOBJECT, LPCSTR);
295   OLESTATUS WINAPI OleQueryName (LPOLEOBJECT lpobj, LPSTR lpBuf, UINT *lpcbBuf);
296   OLESTATUS WINAPI OleRevokeObject (LPOLECLIENT);
297   WINBOOL WINAPI OleIsDcMeta (HDC);
298   OLESTATUS WINAPI OleRegisterClientDoc (LPCSTR, LPCSTR, LONG, LHCLIENTDOC *);
299   OLESTATUS WINAPI OleRevokeClientDoc (LHCLIENTDOC);
300   OLESTATUS WINAPI OleRenameClientDoc (LHCLIENTDOC, LPCSTR);
301   OLESTATUS WINAPI OleRevertClientDoc (LHCLIENTDOC);
302   OLESTATUS WINAPI OleSavedClientDoc (LHCLIENTDOC);
303   OLESTATUS WINAPI OleEnumObjects (LHCLIENTDOC, LPOLEOBJECT *);
304 
305   typedef enum {
306     OLE_SERVER_MULTI,
307     OLE_SERVER_SINGLE
308   } OLE_SERVER_USE;
309   typedef struct _OLESERVER *LPOLESERVER;
310 
311   typedef struct _OLESERVERDOC *LPOLESERVERDOC;
312 
313   OLESTATUS WINAPI OleRegisterServer (LPCSTR, LPOLESERVER, LHSERVER *, HINSTANCE, OLE_SERVER_USE);
314   OLESTATUS WINAPI OleRevokeServer (LHSERVER);
315   OLESTATUS WINAPI OleBlockServer (LHSERVER);
316   OLESTATUS WINAPI OleUnblockServer (LHSERVER, WINBOOL *);
317   OLESTATUS WINAPI OleLockServer (LPOLEOBJECT, LHSERVER *);
318   OLESTATUS WINAPI OleUnlockServer (LHSERVER);
319   OLESTATUS WINAPI OleRegisterServerDoc (LHSERVER, LPCSTR, LPOLESERVERDOC, LHSERVERDOC *);
320   OLESTATUS WINAPI OleRevokeServerDoc (LHSERVERDOC);
321   OLESTATUS WINAPI OleRenameServerDoc (LHSERVERDOC, LPCSTR);
322   OLESTATUS WINAPI OleRevertServerDoc (LHSERVERDOC);
323   OLESTATUS WINAPI OleSavedServerDoc (LHSERVERDOC);
324 #endif
325 
326   typedef struct _OLESERVERVTBL {
327     OLESTATUS (CALLBACK *Open) (LPOLESERVER, LHSERVERDOC, OLE_LPCSTR, LPOLESERVERDOC *);
328     OLESTATUS (CALLBACK *Create) (LPOLESERVER, LHSERVERDOC, OLE_LPCSTR, OLE_LPCSTR, LPOLESERVERDOC *);
329     OLESTATUS (CALLBACK *CreateFromTemplate) (LPOLESERVER, LHSERVERDOC, OLE_LPCSTR, OLE_LPCSTR, OLE_LPCSTR, LPOLESERVERDOC *);
330     OLESTATUS (CALLBACK *Edit) (LPOLESERVER, LHSERVERDOC, OLE_LPCSTR, OLE_LPCSTR, LPOLESERVERDOC *);
331     _Analysis_noreturn_ OLESTATUS (CALLBACK *Exit) (LPOLESERVER);
332     OLESTATUS (CALLBACK *Release) (LPOLESERVER);
333     OLESTATUS (CALLBACK *Execute) (LPOLESERVER, HGLOBAL);
334   } OLESERVERVTBL;
335   typedef OLESERVERVTBL *LPOLESERVERVTBL;
336 
337   typedef struct _OLESERVER {
338     LPOLESERVERVTBL lpvtbl;
339   } OLESERVER;
340 
341   typedef struct _OLESERVERDOCVTBL {
342     OLESTATUS (CALLBACK *Save) (LPOLESERVERDOC);
343     OLESTATUS (CALLBACK *Close) (LPOLESERVERDOC);
344     OLESTATUS (CALLBACK *SetHostNames) (LPOLESERVERDOC, OLE_LPCSTR, OLE_LPCSTR);
345     OLESTATUS (CALLBACK *SetDocDimensions) (LPOLESERVERDOC, OLE_CONST RECT *);
346     OLESTATUS (CALLBACK *GetObject) (LPOLESERVERDOC, OLE_LPCSTR, LPOLEOBJECT *, LPOLECLIENT);
347     OLESTATUS (CALLBACK *Release) (LPOLESERVERDOC);
348     OLESTATUS (CALLBACK *SetColorScheme) (LPOLESERVERDOC, OLE_CONST LOGPALETTE *);
349     OLESTATUS (CALLBACK *Execute) (LPOLESERVERDOC, HGLOBAL);
350   } OLESERVERDOCVTBL;
351   typedef OLESERVERDOCVTBL *LPOLESERVERDOCVTBL;
352 
353   typedef struct _OLESERVERDOC {
354     LPOLESERVERDOCVTBL lpvtbl;
355   } OLESERVERDOC;
356 
357 #ifdef __cplusplus
358 }
359 #endif
360 
361 #endif
362