Fixed VarBstrCmp/Cat .spec entries.
[wine] / include / wtypes.idl
1 /*
2  * Basic types used by COM interfaces
3  *
4  * Copyright 2002 Ove Kaaven
5  *
6  * This library is free software; you can redistribute it and/or
7  * modify it under the terms of the GNU Lesser General Public
8  * License as published by the Free Software Foundation; either
9  * version 2.1 of the License, or (at your option) any later version.
10  *
11  * This library is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
14  * Lesser General Public License for more details.
15  *
16  * You should have received a copy of the GNU Lesser General Public
17  * License along with this library; if not, write to the Free Software
18  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
19  */
20
21 [
22   uuid(D3980A60-910C-1068-9341-00DD010F2F1C),
23   version(0.1),
24   pointer_default(unique)
25 ]
26 interface IWinTypes
27 {
28
29 /******************** WINE STUFF ********************/
30
31 cpp_quote("#include \"basetsd.h\"")
32 cpp_quote("#include \"guiddef.h\"")
33
34 /******************** BASIC WIN32 TYPES ********************/
35 cpp_quote("#if 0 /* winnt.h */") /* don't redefine these */
36
37 typedef unsigned char BYTE;
38 typedef unsigned short WORD;
39 typedef unsigned long DWORD;
40 typedef long BOOL;
41 typedef unsigned char UCHAR;
42 typedef int INT;
43 typedef unsigned int UINT;
44 typedef short SHORT;
45 typedef unsigned short USHORT;
46 typedef long LONG;
47 typedef unsigned long ULONG;
48 typedef float FLOAT;
49 typedef double DOUBLE;
50
51 typedef void *PVOID, *LPVOID;
52
53 typedef char CHAR;
54 typedef [string] CHAR *LPSTR;
55 typedef [string] const CHAR *LPCSTR;
56
57 typedef wchar_t WCHAR;
58 typedef [string] WCHAR *LPWSTR;
59 typedef [string] const WCHAR *LPCWSTR;
60
61 typedef boolean BOOLEAN;
62
63 typedef void *HANDLE;
64 #define DECLARE_HANDLE(name) typedef void *name
65 #define DECLARE_WIREM_HANDLE(name) typedef [wire_marshal(wire##name)] void*name
66
67 DECLARE_HANDLE(HMODULE);
68 DECLARE_HANDLE(HINSTANCE);
69 DECLARE_HANDLE(HRGN);
70 DECLARE_HANDLE(HTASK);
71 DECLARE_HANDLE(HKEY);
72
73 typedef double DATE;
74 typedef LONG HRESULT;
75 typedef DWORD LCID;
76
77 typedef unsigned __int64 DWORDLONG;
78 typedef __int64 LONGLONG;
79 typedef unsigned __int64 ULONGLONG;
80
81 typedef struct _LARGE_INTEGER {
82   LONGLONG QuadPart;
83 } LARGE_INTEGER;
84
85 typedef struct _ULARGE_INTEGER {
86   ULONGLONG QuadPart;
87 } ULARGE_INTEGER;
88
89 typedef struct _SID_IDENTIFIER_AUTHORITY {
90   UCHAR Value[6];
91 } SID_IDENTIFIER_AUTHORITY, *PSID_IDENTIFIER_AUTHORITY;
92
93 typedef struct _SID {
94   UCHAR Revision;
95   UCHAR SubAuthorityCount;
96   SID_IDENTIFIER_AUTHORITY IdentifierAuthority;
97   [size_is(SubAuthorityCount)] ULONG SubAuthority[*];
98 } SID, *PSID;
99
100 typedef USHORT SECURITY_DESCRIPTOR_CONTROL, *PSECURITY_DESCRIPTOR_CONTROL;
101
102 typedef struct _ACL {
103   UCHAR AclRevision;
104   UCHAR Sbz1;
105   USHORT AclSize;
106   USHORT AceCount;
107   USHORT Sbz2;
108 } ACL;
109 typedef ACL *PACL;
110
111 typedef struct _SECURITY_DESCRIPTOR {
112   UCHAR Revision;
113   UCHAR Sbz1;
114   SECURITY_DESCRIPTOR_CONTROL Control;
115   PSID Owner;
116   PSID Group;
117   PACL Sacl;
118   PACL Dacl;
119 } SECURITY_DESCRIPTOR, *PSECURITY_DESCRIPTOR;
120
121 cpp_quote("#endif /* winnt.h */")
122
123 cpp_quote("#ifndef _PALETTEENTRY_DEFINED")
124 cpp_quote("#define _PALETTEENTRY_DEFINED")
125 typedef struct tagPALETTEENTRY {
126   BYTE peRed;
127   BYTE peGreen;
128   BYTE peBlue;
129   BYTE peFlags;
130 } PALETTEENTRY, *PPALETTEENTRY, *LPPALETTEENTRY;
131 cpp_quote("#endif")
132
133 cpp_quote("#ifndef _LOGPALETTE_DEFINED")
134 cpp_quote("#define _LOGPALETTE_DEFINED")
135 typedef struct tagLOGPALETTE
136 {
137   WORD palVersion;
138   WORD palNumEntries;
139   [size_is(palNumEntries)] PALETTEENTRY palPalEntry[*];
140 } LOGPALETTE, *PLOGPALETTE, *LPLOGPALETTE;
141 cpp_quote("#endif")
142
143 cpp_quote("#ifndef _FILETIME_")
144 cpp_quote("#define _FILETIME_")
145 typedef struct _FILETIME {
146   DWORD dwLowDateTime;
147   DWORD dwHighDateTime;
148 } FILETIME, *PFILETIME, *LPFILETIME;
149 cpp_quote("#endif")
150
151 /******************** BASIC COM/OLE TYPES ********************/
152
153 typedef WCHAR OLECHAR;
154 typedef [string] OLECHAR *LPOLESTR;
155 typedef [string] const OLECHAR *LPCOLESTR;
156 cpp_quote("#ifndef __WINE__")
157 cpp_quote("#define OLESTR(str) WINE_UNICODE_TEXT(str)")
158 cpp_quote("#endif")
159
160 /* from Wine's pre-WIDL wtypes.h */
161 /* FIXME: does not belong here */
162 typedef CHAR OLECHAR16;
163 typedef LPSTR LPOLESTR16;
164 typedef LPCSTR LPCOLESTR16;
165 /* quoted because if BSTR16 is ever used in IDL files,
166  * it'll probably need some wire_marshal stuff too,
167  * and quoting these will detect any such necessity */
168 cpp_quote("typedef OLECHAR16 *BSTR16;")
169 cpp_quote("typedef BSTR16 *LPBSTR16;")
170 cpp_quote("#define OLESTR16(x) x")
171
172 typedef LONG SCODE;
173
174 typedef struct _COAUTHIDENTITY {
175   [size_is(UserLength+1)] USHORT *User;
176   ULONG UserLength;
177   [size_is(DomainLength+1)] USHORT *Domain;
178   ULONG DomainLength;
179   [size_is(PasswordLength+1)] USHORT *Password;
180   ULONG PasswordLength;
181   ULONG Flags;
182 } COAUTHIDENTITY;
183
184 typedef struct _COAUTHINFO {
185   DWORD dwAuthnSvc;
186   DWORD dwAuthzSvc;
187   LPWSTR pwszServerPrincName;
188   DWORD dwAuthnLevel;
189   DWORD dwImpersonationLevel;
190   COAUTHIDENTITY *pAuthIdentityData;
191   DWORD dwCapabilities;
192 } COAUTHINFO;
193
194 /* FIXME: COSERVERINFO was in Wine's pre-WIDL wtypes.h, but should be in objidl.idl */
195 typedef struct _COSERVERINFO {
196   DWORD dwReserved1;
197   LPWSTR pwszName;
198   COAUTHINFO *pAuthInfo;
199   DWORD dwReserved2;
200 } COSERVERINFO;
201
202 typedef enum tagMEMCTX {
203   MEMCTX_TASK      = 1,
204   MEMCTX_SHARED    = 2,
205   MEMCTX_MACSYSTEM = 3,
206   MEMCTX_UNKNOWN   = -1,
207   MEMCTX_SAME      = -2
208 } MEMCTX;
209
210 cpp_quote("#ifndef _ROTFLAGS_DEFINED")
211 cpp_quote("#define _ROTFLAGS_DEFINED")
212 cpp_quote("#define ROTFLAGS_REGISTRATIONKEEPSALIVE 0x1")
213 cpp_quote("#define ROTFLAGS_ALLOWANYCLIENT 0x2")
214 cpp_quote("#endif")
215
216 typedef enum tagCLSCTX {
217   CLSCTX_INPROC_SERVER        = 0x1,
218   CLSCTX_INPROC_HANDLER       = 0x2,
219   CLSCTX_LOCAL_SERVER         = 0x4,
220   CLSCTX_INPROC_SERVER16      = 0x8,
221   CLSCTX_REMOTE_SERVER        = 0x10,
222   CLSCTX_INPROC_HANDLER16     = 0x20,
223   CLSCTX_INPROC_SERVERX86     = 0x40,
224   CLSCTX_INPROC_HANDLERX86    = 0x80,
225   CLSCTX_ESERVER_HANDLER      = 0x100,
226   CLSCTX_NO_CODE_DOWNLOAD     = 0x400,
227   CLSCTX_NO_CUSTOM_MARSHAL    = 0x1000,
228   CLSCTX_ENABLE_CODE_DOWNLOAD = 0x2000,
229   CLSCTX_NO_FAILURE_LOG       = 0x4000,
230   CLSCTX_DISABLE_AAA          = 0x8000,
231   CLSCTX_ENABLE_AAA           = 0x10000,
232   CLSCTX_FROM_DEFAULT_CONTEXT = 0x20000
233 } CLSCTX;
234
235 cpp_quote("#define CLSCTX_INPROC (CLSCTX_INPROC_SERVER | CLSCTX_INPROC_HANDLER)")
236 cpp_quote("#define CLSCTX_ALL (CLSCTX_INPROC_SERVER | CLSCTX_INPROC_HANDLER | CLSCTX_LOCAL_SERVER | CLSCTX_REMOTE_SERVER)")
237 cpp_quote("#define CLSCTX_SERVER (CLSCTX_INPROC_SERVER | CLSCTX_LOCAL_SERVER | CLSCTX_REMOTE_SERVER)")
238
239 typedef enum tagMSHLFLAGS {
240   MSHLFLAGS_NORMAL      = 0,
241   MSHLFLAGS_TABLESTRONG = 1,
242   MSHLFLAGS_TABLEWEAK   = 2,
243   MSHLFLAGS_NOPING      = 4
244 } MSHLFLAGS;
245
246 typedef enum tagMSHCTX {
247   MSHCTX_LOCAL            = 0,
248   MSHCTX_NOSHAREDMEM      = 1,
249   MSHCTX_DIFFERENTMACHINE = 2,
250   MSHCTX_INPROC           = 3,
251   MSHCTX_CROSSCTX         = 4
252 } MSHCTX;
253
254 /******************** BLOB TYPES ********************/
255
256 typedef struct _BYTE_BLOB {
257   unsigned long clSize;
258   [size_is(clSize)] byte abData[];
259 } BYTE_BLOB;
260 typedef [unique] BYTE_BLOB *UP_BYTE_BLOB;
261
262 typedef struct _FLAGGED_BYTE_BLOB {
263   unsigned long fFlags;
264   unsigned long clSize;
265   [size_is(clSize)] byte abData[];
266 } FLAGGED_BYTE_BLOB;
267 typedef [unique] FLAGGED_BYTE_BLOB *UP_FLAGGED_BYTE_BLOB;
268
269 typedef struct _FLAGGED_WORD_BLOB {
270   unsigned long fFlags;
271   unsigned long clSize;
272   [size_is(clSize)] unsigned short asData[];
273 } FLAGGED_WORD_BLOB;
274 typedef [unique] FLAGGED_WORD_BLOB *UP_FLAGGED_WORD_BLOB;
275
276 typedef struct _BYTE_SIZEDARR {
277   unsigned long clSize;
278   [size_is(clSize)] byte *pData;
279 } BYTE_SIZEDARR;
280
281 typedef struct _SHORT_SIZEDARR {
282   unsigned long clSize;
283   [size_is(clSize)] unsigned short *pData;
284 } WORD_SIZEDARR;
285
286 typedef struct _LONG_SIZEDARR {
287   unsigned long clSize;
288   [size_is(clSize)] unsigned long *pData;
289 } DWORD_SIZEDARR;
290
291 typedef struct _HYPER_SIZEDARR {
292   unsigned long clSize;
293   [size_is(clSize)] hyper *pData;
294 } HYPER_SIZEDARR;
295
296 /******************** GDI TYPES ********************/
297
298 const unsigned long WDT_INPROC_CALL = 0x48746457;
299 const unsigned long WDT_REMOTE_CALL = 0x52746457;
300
301 typedef union _userCLIPFORMAT switch(long fContext) u {
302   case WDT_INPROC_CALL: DWORD dwValue;
303   case WDT_REMOTE_CALL: LPWSTR pwszName;
304 } userCLIPFORMAT;
305
306 typedef [unique] userCLIPFORMAT *wireCLIPFORMAT;
307 typedef [wire_marshal(wireCLIPFORMAT)] WORD CLIPFORMAT;
308
309 typedef struct tagRemHGLOBAL {
310   long fNullHGlobal;
311   unsigned long cbData;
312   [size_is(cbData)] byte data[];
313 } RemHGLOBAL;
314
315 typedef union _userHGLOBAL switch(long fContext) u {
316   case WDT_INPROC_CALL: long               hInproc;
317   case WDT_REMOTE_CALL: FLAGGED_BYTE_BLOB *hRemote;
318   default:              long               hGlobal;
319 } userHGLOBAL;
320
321 typedef [unique] userHGLOBAL *wireHGLOBAL;
322
323 typedef struct tagRemHMETAFILEPICT {
324   long mm;
325   long xExt;
326   long yExt;
327   unsigned long cbData;
328   [size_is(cbData)] byte data[];
329 } RemHMETAFILEPICT;
330
331 typedef union _userHMETAFILE switch(long fContext) u {
332   case WDT_INPROC_CALL: long       hInproc;
333   case WDT_REMOTE_CALL: BYTE_BLOB *hRemote;
334   default:              long       hGlobal;
335 } userHMETAFILE;
336
337 typedef [unique] userHMETAFILE *wireHMETAFILE;
338
339 typedef struct _remoteMETAFILEPICT {
340   long mm;
341   long xExt;
342   long yExt;
343   userHMETAFILE *hMF;
344 } remoteMETAFILEPICT;
345
346 typedef union _userHMETAFILEPICT switch(long fContext) u {
347   case WDT_INPROC_CALL: long                hInproc;
348   case WDT_REMOTE_CALL: remoteMETAFILEPICT *hRemote;
349   default:              long                hGlobal;
350 } userHMETAFILEPICT;
351
352 typedef [unique] userHMETAFILEPICT *wireHMETAFILEPICT;
353
354 typedef struct tagRemHENHMETAFILE {
355   unsigned long cbData;
356   [size_is(cbData)] byte data[];
357 } RemHENHMETAFILE;
358
359 typedef union _userHENHMETAFILE switch(long fContext) u {
360   case WDT_INPROC_CALL: long       hInproc;
361   case WDT_REMOTE_CALL: BYTE_BLOB *hRemote;
362   default:              long       hGlobal;
363 } userHENHMETAFILE;
364
365 typedef [unique] userHENHMETAFILE *wireHENHMETAFILE;
366
367 typedef struct tagRemHBITMAP
368 {
369   unsigned long cbData;
370   [size_is(cbData)] byte data[];
371 } RemHBITMAP;
372
373 typedef struct _userBITMAP {
374   LONG bmType;
375   LONG bmWidth;
376   LONG bmHeight;
377   LONG bmWidthBytes;
378   WORD bmPlanes;
379   WORD bmBitsPixel;
380   ULONG cbSize;
381   [size_is(cbSize)] byte pBuffer[];
382 } userBITMAP;
383
384 typedef union _userHBITMAP switch(long fContext) u {
385   case WDT_INPROC_CALL: long        hInproc;
386   case WDT_REMOTE_CALL: userBITMAP *hRemote;
387   default:              long        hGlobal;
388 } userHBITMAP;
389
390 typedef [unique] userHBITMAP *wireHBITMAP;
391
392 typedef struct tagRemHPALETTE {
393   unsigned long cbData;
394   [size_is(cbData)] byte data[];
395 } RemHPALETTE;
396
397 typedef struct tagrpcLOGPALETTE {
398   WORD palVersion;
399   WORD palNumEntries;
400   [size_is(palNumEntries)] PALETTEENTRY palPalEntry[];
401 } rpcLOGPALETTE;
402
403 typedef union _userHPALETTE switch(long fContext) u {
404   case WDT_INPROC_CALL: long           hInproc;
405   case WDT_REMOTE_CALL: rpcLOGPALETTE *hRemote;
406   default:              long           hGlobal;
407 } userHPALETTE;
408
409 typedef [unique] userHPALETTE *wireHPALETTE;
410
411 cpp_quote("#if 0")
412 DECLARE_WIREM_HANDLE(HGLOBAL);
413 typedef HGLOBAL HLOCAL;
414 DECLARE_WIREM_HANDLE(HBITMAP);
415 DECLARE_WIREM_HANDLE(HPALETTE);
416 DECLARE_WIREM_HANDLE(HENHMETAFILE);
417 DECLARE_WIREM_HANDLE(HMETAFILE);
418 cpp_quote("#endif")
419 DECLARE_WIREM_HANDLE(HMETAFILEPICT);
420
421 /******************** GUID TYPES ********************/
422
423 cpp_quote("#ifndef GUID_DEFINED")
424 cpp_quote("#define GUID_DEFINED")
425 typedef struct _GUID {
426   DWORD Data1;
427   WORD  Data2;
428   WORD  Data3;
429   BYTE  Data4[8];
430 } GUID;
431 cpp_quote("#endif")
432
433 cpp_quote("#if 0 /* guiddef.h */")
434 typedef GUID *LPGUID;
435
436 typedef GUID IID;
437 typedef IID *LPIID;
438
439 typedef GUID CLSID;
440 typedef CLSID *LPCLSID;
441
442 typedef GUID FMTID;
443 typedef FMTID *LPFMTID;
444
445 cpp_quote("#if 0") /* for IDL only (C/C++ defs are in guiddef.h) */
446 typedef GUID *REFGUID;
447 typedef IID *REFIID;
448 typedef CLSID *REFCLSID;
449 typedef FMTID *REFFMTID;
450 cpp_quote("#endif")
451
452 cpp_quote("#endif /* guiddef.h */")
453
454 /******************** MISC TYPES ********************/
455
456 typedef enum tagDVASPECT {
457   DVASPECT_CONTENT   = 1,
458   DVASPECT_THUMBNAIL = 2,
459   DVASPECT_ICON      = 4,
460   DVASPECT_DOCPRINT  = 8
461 } DVASPECT;
462
463 typedef enum tagSTGC {
464   STGC_DEFAULT       = 0,
465   STGC_OVERWRITE     = 1,
466   STGC_ONLYIFCURRENT = 2,
467   STGC_DANGEROUSLYCOMMITMERELYTODISKCACHE = 4,
468   STGC_CONSOLIDATE   = 8
469 } STGC;
470
471 typedef enum tagSTGMOVE {
472   STGMOVE_MOVE        = 0,
473   STGMOVE_COPY        = 1,
474   STGMOVE_SHALLOWCOPY = 2
475 } STGMOVE;
476
477 typedef enum tagSTATFLAG {
478   STATFLAG_DEFAULT = 0,
479   STATFLAG_NONAME  = 1,
480   STATFLAG_NOOPEN  = 2
481 } STATFLAG;
482
483 /******************** OLE Automation ********************/
484
485 cpp_quote("#if 0") /* for IDL only */
486 typedef struct tagCY {
487   LONGLONG int64;
488 } CY;
489 cpp_quote("#else") /* C/C++ defs */
490 cpp_quote("typedef union tagCY {")
491 cpp_quote("    struct {")
492 cpp_quote("#ifdef WORDS_BIGENDIAN")
493 cpp_quote("        LONG  Hi;")
494 cpp_quote("        ULONG Lo;")
495 cpp_quote("#else")
496 cpp_quote("        ULONG Lo;")
497 cpp_quote("        LONG  Hi;")
498 cpp_quote("#endif")
499 cpp_quote("    } DUMMYSTRUCTNAME;")
500 cpp_quote("    LONGLONG int64;")
501 cpp_quote("} CY;")
502 cpp_quote("#endif")
503
504 typedef CY *LPCY;
505
506 typedef struct tagDEC {
507   USHORT wReserved;
508   BYTE scale;
509   BYTE sign;
510   ULONG Hi32;
511   ULONGLONG Lo64;
512 } DECIMAL;
513 typedef DECIMAL *LPDECIMAL;
514
515 typedef [unique] FLAGGED_WORD_BLOB *wireBSTR;
516 typedef [wire_marshal(wireBSTR)] OLECHAR *BSTR;
517 typedef BSTR *LPBSTR;
518
519 typedef short VARIANT_BOOL;
520 typedef VARIANT_BOOL _VARIANT_BOOL;
521 cpp_quote("#define VARIANT_TRUE  ((VARIANT_BOOL)0xFFFF)")
522 cpp_quote("#define VARIANT_FALSE ((VARIANT_BOOL)0x0000)")
523
524 typedef struct tagBSTRBLOB {
525   ULONG cbSize;
526   [size_is(cbSize)] BYTE *pData;
527 } BSTRBLOB, *LPBSTRBLOB;
528
529 typedef struct tagBLOB {
530   ULONG cbSize;
531   [size_is(cbSize)] BYTE *pBlobData;
532 } BLOB, *LPBLOB;
533
534 typedef struct tagCLIPDATA {
535   ULONG cbSize;
536   long ulClipFmt;
537   [size_is(cbSize-sizeof(long))] BYTE *pClipData;
538 } CLIPDATA;
539 cpp_quote("#define CBPCLIPDATA(cb) ((cb).cbSize - sizeof((cb).ulClipFmt))")
540
541 typedef ULONG PROPID;
542
543 /******************** VARTYPE ********************/
544
545 typedef unsigned short VARTYPE;
546 enum VARENUM {
547   VT_EMPTY           = 0,
548   VT_NULL            = 1,
549   VT_I2              = 2,
550   VT_I4              = 3,
551   VT_R4              = 4,
552   VT_R8              = 5,
553   VT_CY              = 6,
554   VT_DATE            = 7,
555   VT_BSTR            = 8,
556   VT_DISPATCH        = 9,
557   VT_ERROR           = 10,
558   VT_BOOL            = 11,
559   VT_VARIANT         = 12,
560   VT_UNKNOWN         = 13,
561   VT_DECIMAL         = 14,
562   VT_I1              = 16,
563   VT_UI1             = 17,
564   VT_UI2             = 18,
565   VT_UI4             = 19,
566   VT_I8              = 20,
567   VT_UI8             = 21,
568   VT_INT             = 22,
569   VT_UINT            = 23,
570   VT_VOID            = 24,
571   VT_HRESULT         = 25,
572   VT_PTR             = 26,
573   VT_SAFEARRAY       = 27,
574   VT_CARRAY          = 28,
575   VT_USERDEFINED     = 29,
576   VT_LPSTR           = 30,
577   VT_LPWSTR          = 31,
578   VT_RECORD          = 36,
579   VT_FILETIME        = 64,
580   VT_BLOB            = 65,
581   VT_STREAM          = 66,
582   VT_STORAGE         = 67,
583   VT_STREAMED_OBJECT = 68,
584   VT_STORED_OBJECT   = 69,
585   VT_BLOB_OBJECT     = 70,
586   VT_CF              = 71,
587   VT_CLSID           = 72,
588   VT_BSTR_BLOB       = 0x0fff,
589   VT_VECTOR          = 0x1000,
590   VT_ARRAY           = 0x2000,
591   VT_BYREF           = 0x4000,
592   VT_RESERVED        = 0x8000,
593   VT_ILLEGAL         = 0xffff,
594   VT_ILLEGALMASKED   = 0x0fff,
595   VT_TYPEMASK        = 0x0fff
596 };
597
598 } /* interface IWinTypes */