2 * Basic types used by COM interfaces
4 * Copyright 2002 Ove Kaaven
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.
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.
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., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
24 cpp_quote("#ifndef __wtypes_h__")
25 cpp_quote("#define __wtypes_h__")
28 cpp_quote("#ifdef _MSC_VER")
29 cpp_quote("#pragma warning(push)")
30 cpp_quote("#pragma warning(disable:4201)")
31 cpp_quote("#pragma warning(disable:4820)")
35 uuid(D3980A60-910C-1068-9341-00DD010F2F1C),
37 pointer_default(unique)
43 /******************** BASIC WIN32 TYPES ********************/
44 cpp_quote("#if 0 /* winnt.h */") /* don't redefine these */
46 typedef unsigned char BYTE;
47 typedef unsigned short WORD;
48 typedef unsigned long DWORD;
50 typedef unsigned char UCHAR;
52 typedef unsigned int UINT;
54 typedef unsigned short USHORT;
56 typedef unsigned long ULONG;
59 typedef void *PVOID, *LPVOID;
61 typedef DWORD *LPDWORD;
64 typedef [string] CHAR *LPSTR;
65 typedef [string] const CHAR *LPCSTR;
67 typedef wchar_t WCHAR;
68 typedef [string] WCHAR *LPWSTR;
69 typedef [string] const WCHAR *LPCWSTR;
71 typedef boolean BOOLEAN;
73 typedef DWORD COLORREF;
76 #define DECLARE_HANDLE(name) typedef void *name
77 #define DECLARE_WIREM_HANDLE(name) typedef [wire_marshal(wire##name)] void*name
79 DECLARE_HANDLE(HMODULE);
80 DECLARE_HANDLE(HINSTANCE);
82 DECLARE_HANDLE(HTASK);
84 DECLARE_HANDLE(HDESK);
88 DECLARE_HANDLE(HRSRC);
90 DECLARE_HANDLE(HWINSTA);
92 DECLARE_HANDLE(HGDIOBJ);
95 typedef HANDLE HMONITOR;
96 cpp_quote("#endif /* 0 */")
100 typedef LONG_PTR LRESULT;
102 typedef LONG HRESULT;
105 typedef unsigned __int64 DWORDLONG;
106 typedef __int64 LONGLONG;
107 typedef unsigned __int64 ULONGLONG;
109 typedef struct _LARGE_INTEGER {
113 typedef struct _ULARGE_INTEGER {
117 typedef struct _SID_IDENTIFIER_AUTHORITY {
119 } SID_IDENTIFIER_AUTHORITY, *PSID_IDENTIFIER_AUTHORITY;
121 typedef struct _SID {
123 UCHAR SubAuthorityCount;
124 SID_IDENTIFIER_AUTHORITY IdentifierAuthority;
125 [size_is(SubAuthorityCount)] ULONG SubAuthority[*];
128 typedef USHORT SECURITY_DESCRIPTOR_CONTROL, *PSECURITY_DESCRIPTOR_CONTROL;
130 typedef struct _ACL {
139 typedef struct _SECURITY_DESCRIPTOR {
142 SECURITY_DESCRIPTOR_CONTROL Control;
147 } SECURITY_DESCRIPTOR, *PSECURITY_DESCRIPTOR;
149 typedef struct _SECURITY_ATTRIBUTES
152 [size_is(nLength)] LPVOID lpSecurityDescriptor;
154 } SECURITY_ATTRIBUTES, *PSECURITY_ATTRIBUTES, *LPSECURITY_ATTRIBUTES;
156 typedef struct tagSIZE
160 } SIZE, *PSIZE, *LPSIZE;
161 typedef SIZE SIZEL, *PSIZEL, *LPSIZEL;
163 typedef struct tagPOINT
167 } POINT, *PPOINT, *LPPOINT;
169 typedef struct _POINTL
175 typedef struct tagRECT
181 } RECT, *PRECT, *LPRECT;
182 typedef const RECT *LPCRECT;
184 typedef struct _RECTL
190 } RECTL, *PRECTL, *LPRECTL;
191 typedef const RECTL *LPCRECTL;
193 typedef UINT_PTR WPARAM;
194 typedef LONG_PTR LPARAM;
196 cpp_quote("#endif /* winnt.h */")
198 cpp_quote("#ifdef _MSC_VER") /* for IDL and MSVC only */
199 typedef double DOUBLE;
201 cpp_quote("typedef double DECLSPEC_ALIGN(8) DOUBLE;")
204 cpp_quote("#ifndef _PALETTEENTRY_DEFINED")
205 cpp_quote("#define _PALETTEENTRY_DEFINED")
206 typedef struct tagPALETTEENTRY {
211 } PALETTEENTRY, *PPALETTEENTRY, *LPPALETTEENTRY;
214 cpp_quote("#ifndef _LOGPALETTE_DEFINED")
215 cpp_quote("#define _LOGPALETTE_DEFINED")
216 typedef struct tagLOGPALETTE
220 [size_is(palNumEntries)] PALETTEENTRY palPalEntry[*];
221 } LOGPALETTE, *PLOGPALETTE, *LPLOGPALETTE;
224 cpp_quote("#ifndef _SYSTEMTIME_")
225 cpp_quote("#define _SYSTEMTIME_")
226 typedef struct _SYSTEMTIME{
235 } SYSTEMTIME, *PSYSTEMTIME, *LPSYSTEMTIME;
238 cpp_quote("#ifndef _FILETIME_")
239 cpp_quote("#define _FILETIME_")
240 typedef struct _FILETIME {
242 DWORD dwHighDateTime;
243 } FILETIME, *PFILETIME, *LPFILETIME;
246 cpp_quote("#ifndef _TEXTMETRIC_DEFINED")
247 cpp_quote("#define _TEXTMETRIC_DEFINED")
248 typedef struct tagTEXTMETRICA
253 LONG tmInternalLeading;
254 LONG tmExternalLeading;
259 LONG tmDigitizedAspectX;
260 LONG tmDigitizedAspectY;
268 BYTE tmPitchAndFamily;
270 } TEXTMETRICA, *LPTEXTMETRICA, *PTEXTMETRICA;
272 typedef struct tagTEXTMETRICW
277 LONG tmInternalLeading;
278 LONG tmExternalLeading;
283 LONG tmDigitizedAspectX;
284 LONG tmDigitizedAspectY;
292 BYTE tmPitchAndFamily;
294 } TEXTMETRICW, *LPTEXTMETRICW, *PTEXTMETRICW;
297 /******************** BASIC COM/OLE TYPES ********************/
299 typedef WCHAR OLECHAR;
300 typedef [string] OLECHAR *LPOLESTR;
301 typedef [string] const OLECHAR *LPCOLESTR;
302 cpp_quote("#ifndef __WINESRC__")
303 cpp_quote("#define OLESTR(str) L##str")
308 typedef struct _COAUTHIDENTITY {
309 [size_is(UserLength+1)] USHORT *User;
311 [size_is(DomainLength+1)] USHORT *Domain;
313 [size_is(PasswordLength+1)] USHORT *Password;
314 ULONG PasswordLength;
318 typedef struct _COAUTHINFO {
321 LPWSTR pwszServerPrincName;
323 DWORD dwImpersonationLevel;
324 COAUTHIDENTITY *pAuthIdentityData;
325 DWORD dwCapabilities;
328 typedef enum tagMEMCTX {
331 MEMCTX_MACSYSTEM = 3,
336 cpp_quote("#ifndef _ROT_COMPARE_MAX_DEFINED")
337 cpp_quote("#define _ROT_COMPARE_MAX_DEFINED")
338 cpp_quote("#define ROT_COMPARE_MAX 2048")
341 cpp_quote("#ifndef _ROTFLAGS_DEFINED")
342 cpp_quote("#define _ROTFLAGS_DEFINED")
343 cpp_quote("#define ROTFLAGS_REGISTRATIONKEEPSALIVE 0x1")
344 cpp_quote("#define ROTFLAGS_ALLOWANYCLIENT 0x2")
347 typedef enum tagCLSCTX {
348 CLSCTX_INPROC_SERVER = 0x1,
349 CLSCTX_INPROC_HANDLER = 0x2,
350 CLSCTX_LOCAL_SERVER = 0x4,
351 CLSCTX_INPROC_SERVER16 = 0x8,
352 CLSCTX_REMOTE_SERVER = 0x10,
353 CLSCTX_INPROC_HANDLER16 = 0x20,
354 CLSCTX_INPROC_SERVERX86 = 0x40,
355 CLSCTX_INPROC_HANDLERX86 = 0x80,
356 CLSCTX_ESERVER_HANDLER = 0x100,
357 CLSCTX_NO_CODE_DOWNLOAD = 0x400,
358 CLSCTX_NO_CUSTOM_MARSHAL = 0x1000,
359 CLSCTX_ENABLE_CODE_DOWNLOAD = 0x2000,
360 CLSCTX_NO_FAILURE_LOG = 0x4000,
361 CLSCTX_DISABLE_AAA = 0x8000,
362 CLSCTX_ENABLE_AAA = 0x10000,
363 CLSCTX_FROM_DEFAULT_CONTEXT = 0x20000
366 cpp_quote("#define CLSCTX_INPROC (CLSCTX_INPROC_SERVER | CLSCTX_INPROC_HANDLER)")
367 cpp_quote("#define CLSCTX_ALL (CLSCTX_INPROC_SERVER | CLSCTX_INPROC_HANDLER | CLSCTX_LOCAL_SERVER | CLSCTX_REMOTE_SERVER)")
368 cpp_quote("#define CLSCTX_SERVER (CLSCTX_INPROC_SERVER | CLSCTX_LOCAL_SERVER | CLSCTX_REMOTE_SERVER)")
370 typedef enum tagMSHLFLAGS {
371 MSHLFLAGS_NORMAL = 0,
372 MSHLFLAGS_TABLESTRONG = 1,
373 MSHLFLAGS_TABLEWEAK = 2,
377 typedef enum tagMSHCTX {
379 MSHCTX_NOSHAREDMEM = 1,
380 MSHCTX_DIFFERENTMACHINE = 2,
385 /******************** BLOB TYPES ********************/
387 typedef struct _BYTE_BLOB {
388 unsigned long clSize;
389 [size_is(clSize)] byte abData[];
391 typedef [unique] BYTE_BLOB *UP_BYTE_BLOB;
393 typedef struct _FLAGGED_BYTE_BLOB {
394 unsigned long fFlags;
395 unsigned long clSize;
396 [size_is(clSize)] byte abData[];
398 typedef [unique] FLAGGED_BYTE_BLOB *UP_FLAGGED_BYTE_BLOB;
400 typedef struct _FLAGGED_WORD_BLOB {
401 unsigned long fFlags;
402 unsigned long clSize;
403 [size_is(clSize)] unsigned short asData[];
405 typedef [unique] FLAGGED_WORD_BLOB *UP_FLAGGED_WORD_BLOB;
407 typedef struct _BYTE_SIZEDARR {
408 unsigned long clSize;
409 [size_is(clSize)] byte *pData;
412 typedef struct _SHORT_SIZEDARR {
413 unsigned long clSize;
414 [size_is(clSize)] unsigned short *pData;
417 typedef struct _LONG_SIZEDARR {
418 unsigned long clSize;
419 [size_is(clSize)] unsigned long *pData;
422 typedef struct _HYPER_SIZEDARR {
423 unsigned long clSize;
424 [size_is(clSize)] hyper *pData;
427 /******************** GDI TYPES ********************/
429 const unsigned long WDT_INPROC_CALL = 0x48746457;
430 const unsigned long WDT_REMOTE_CALL = 0x52746457;
431 const unsigned long WDT_INPROC64_CALL = 0x50746457;
433 typedef union _userCLIPFORMAT switch(long fContext) u {
434 case WDT_INPROC_CALL: DWORD dwValue;
435 case WDT_REMOTE_CALL: LPWSTR pwszName;
438 typedef [unique] userCLIPFORMAT *wireCLIPFORMAT;
439 typedef [wire_marshal(wireCLIPFORMAT)] WORD CLIPFORMAT;
441 typedef struct tagRemHGLOBAL {
443 unsigned long cbData;
444 [size_is(cbData)] byte data[];
447 typedef union _userHGLOBAL switch(long fContext) u {
448 case WDT_INPROC_CALL: long hInproc;
449 case WDT_REMOTE_CALL: FLAGGED_BYTE_BLOB *hRemote;
450 default: long hGlobal;
453 typedef [unique] userHGLOBAL *wireHGLOBAL;
455 typedef struct tagRemHMETAFILEPICT {
459 unsigned long cbData;
460 [size_is(cbData)] byte data[];
463 typedef union _userHMETAFILE switch(long fContext) u {
464 case WDT_INPROC_CALL: long hInproc;
465 case WDT_REMOTE_CALL: BYTE_BLOB *hRemote;
466 default: long hGlobal;
469 typedef [unique] userHMETAFILE *wireHMETAFILE;
471 typedef struct _remoteMETAFILEPICT {
476 } remoteMETAFILEPICT;
478 typedef union _userHMETAFILEPICT switch(long fContext) u {
479 case WDT_INPROC_CALL: long hInproc;
480 case WDT_REMOTE_CALL: remoteMETAFILEPICT *hRemote;
481 default: long hGlobal;
484 typedef [unique] userHMETAFILEPICT *wireHMETAFILEPICT;
486 typedef struct tagRemHENHMETAFILE {
487 unsigned long cbData;
488 [size_is(cbData)] byte data[];
491 typedef union _userHENHMETAFILE switch(long fContext) u {
492 case WDT_INPROC_CALL: long hInproc;
493 case WDT_REMOTE_CALL: BYTE_BLOB *hRemote;
494 default: long hGlobal;
497 typedef [unique] userHENHMETAFILE *wireHENHMETAFILE;
499 typedef struct tagRemHBITMAP
501 unsigned long cbData;
502 [size_is(cbData)] byte data[];
505 typedef struct _userBITMAP {
513 [size_is(cbSize)] byte pBuffer[];
516 typedef union _userHBITMAP switch(long fContext) u {
517 case WDT_INPROC_CALL: long hInproc;
518 case WDT_REMOTE_CALL: userBITMAP *hRemote;
519 default: long hGlobal;
522 typedef [unique] userHBITMAP *wireHBITMAP;
524 typedef struct tagRemHPALETTE {
525 unsigned long cbData;
526 [size_is(cbData)] byte data[];
529 typedef struct tagrpcLOGPALETTE {
532 [size_is(palNumEntries)] PALETTEENTRY palPalEntry[];
535 typedef union _userHPALETTE switch(long fContext) u {
536 case WDT_INPROC_CALL: long hInproc;
537 case WDT_REMOTE_CALL: rpcLOGPALETTE *hRemote;
538 default: long hGlobal;
541 typedef [unique] userHPALETTE *wireHPALETTE;
544 DECLARE_WIREM_HANDLE(HGLOBAL);
545 typedef HGLOBAL HLOCAL;
546 DECLARE_WIREM_HANDLE(HBITMAP);
547 DECLARE_WIREM_HANDLE(HPALETTE);
548 DECLARE_WIREM_HANDLE(HENHMETAFILE);
549 DECLARE_WIREM_HANDLE(HMETAFILE);
551 DECLARE_WIREM_HANDLE(HMETAFILEPICT);
553 typedef union _RemotableHandle switch (long fContext) u
555 case WDT_INPROC_CALL: long hInproc;
556 case WDT_REMOTE_CALL: long hRemote;
559 typedef [unique] RemotableHandle *wireHACCEL;
560 typedef [unique] RemotableHandle *wireHBRUSH;
561 typedef [unique] RemotableHandle *wireHDC;
562 typedef [unique] RemotableHandle *wireHFONT;
563 typedef [unique] RemotableHandle *wireHICON;
564 typedef [unique] RemotableHandle *wireHMENU;
565 typedef [unique] RemotableHandle *wireHWND;
567 cpp_quote("#if 0") /* for IDL only (C/C++ defs are in windef.h) */
568 DECLARE_WIREM_HANDLE(HACCEL);
569 DECLARE_WIREM_HANDLE(HBRUSH);
570 DECLARE_WIREM_HANDLE(HDC);
571 DECLARE_WIREM_HANDLE(HFONT);
572 DECLARE_WIREM_HANDLE(HICON);
573 DECLARE_WIREM_HANDLE(HMENU);
574 DECLARE_WIREM_HANDLE(HWND);
576 typedef HICON HCURSOR;
578 typedef struct tagMSG
586 } MSG, *PMSG, *NPMSG, *LPMSG;
588 typedef struct tagCREATESTRUCTA {
589 LPVOID lpCreateParams;
601 } CREATESTRUCTA, *LPCREATESTRUCTA;
603 typedef struct tagCREATESTRUCTW {
604 LPVOID lpCreateParams;
616 } CREATESTRUCTW, *LPCREATESTRUCTW;
620 /******************** GUID TYPES ********************/
622 cpp_quote("#if 0") /* for IDL only (C/C++ defs are in guiddef.h) */
623 typedef GUID *REFGUID;
625 typedef CLSID *REFCLSID;
626 typedef FMTID *REFFMTID;
629 /******************** MISC TYPES ********************/
631 typedef enum tagDVASPECT {
632 DVASPECT_CONTENT = 1,
633 DVASPECT_THUMBNAIL = 2,
635 DVASPECT_DOCPRINT = 8
638 typedef enum tagSTGC {
641 STGC_ONLYIFCURRENT = 2,
642 STGC_DANGEROUSLYCOMMITMERELYTODISKCACHE = 4,
646 typedef enum tagSTGMOVE {
649 STGMOVE_SHALLOWCOPY = 2
652 typedef enum tagSTATFLAG {
653 STATFLAG_DEFAULT = 0,
658 /******************** OLE Automation ********************/
660 cpp_quote("#ifdef _MSC_VER") /* for IDL and MSVC only */
663 cpp_quote("typedef double DECLSPEC_ALIGN(8) DATE;")
666 cpp_quote("#if 0") /* for IDL only */
667 typedef struct tagCY {
670 cpp_quote("#else") /* C/C++ defs */
671 cpp_quote("#ifndef _tagCY_DEFINED")
672 cpp_quote("#define _tagCY_DEFINED")
673 cpp_quote("typedef union tagCY {")
674 cpp_quote(" struct {")
675 cpp_quote("#ifdef WORDS_BIGENDIAN")
676 cpp_quote(" LONG Hi;")
677 cpp_quote(" ULONG Lo;")
679 cpp_quote(" ULONG Lo;")
680 cpp_quote(" LONG Hi;")
682 cpp_quote(" } DUMMYSTRUCTNAME;")
683 cpp_quote(" LONGLONG int64;")
690 cpp_quote("#if 0") /* for IDL only */
691 typedef struct tagDEC {
698 cpp_quote("#else") /* C/C++ defs */
699 cpp_quote("typedef struct tagDEC {")
700 cpp_quote(" USHORT wReserved;")
701 cpp_quote(" union {")
702 cpp_quote(" struct {")
703 cpp_quote(" BYTE scale;")
704 cpp_quote(" BYTE sign;")
705 cpp_quote(" } DUMMYSTRUCTNAME;")
706 cpp_quote(" USHORT signscale;")
707 cpp_quote(" } DUMMYUNIONNAME;")
708 cpp_quote(" ULONG Hi32;")
709 cpp_quote(" union {")
710 cpp_quote(" struct {")
711 cpp_quote("#ifdef WORDS_BIGENDIAN")
712 cpp_quote(" ULONG Mid32;")
713 cpp_quote(" ULONG Lo32;")
715 cpp_quote(" ULONG Lo32;")
716 cpp_quote(" ULONG Mid32;")
718 cpp_quote(" } DUMMYSTRUCTNAME1;")
719 cpp_quote(" ULONGLONG Lo64;")
720 cpp_quote(" } DUMMYUNIONNAME1;")
721 cpp_quote("} DECIMAL;")
723 cpp_quote("#define DECIMAL_NEG ((BYTE)0x80)")
724 cpp_quote("#define DECIMAL_SETZERO(d) do{ memset(((char*)&(d)) + sizeof(USHORT), 0, sizeof(ULONG) * 3u + sizeof(USHORT)); }while (0)")
726 typedef DECIMAL *LPDECIMAL;
728 typedef [unique] FLAGGED_WORD_BLOB *wireBSTR;
729 typedef [wire_marshal(wireBSTR)] OLECHAR *BSTR;
730 typedef BSTR *LPBSTR;
732 typedef short VARIANT_BOOL;
733 typedef VARIANT_BOOL _VARIANT_BOOL;
734 cpp_quote("#define VARIANT_TRUE ((VARIANT_BOOL)0xFFFF)")
735 cpp_quote("#define VARIANT_FALSE ((VARIANT_BOOL)0x0000)")
737 typedef struct tagBSTRBLOB {
739 [size_is(cbSize)] BYTE *pData;
740 } BSTRBLOB, *LPBSTRBLOB;
742 cpp_quote("#ifndef _tagBLOB_DEFINED")
743 cpp_quote("#define _tagBLOB_DEFINED")
744 cpp_quote("#define _BLOB_DEFINED")
745 cpp_quote("#define _LPBLOB_DEFINED")
746 typedef struct tagBLOB {
748 [size_is(cbSize)] BYTE *pBlobData;
752 typedef struct tagCLIPDATA {
755 [size_is(cbSize-sizeof(long))] BYTE *pClipData;
757 cpp_quote("#define CBPCLIPDATA(cb) ((cb).cbSize - sizeof((cb).ulClipFmt))")
759 typedef ULONG PROPID;
761 /******************** VARTYPE ********************/
763 typedef unsigned short VARTYPE;
803 VT_STREAMED_OBJECT = 68,
804 VT_STORED_OBJECT = 69,
808 VT_VERSIONED_STREAM= 73,
809 VT_BSTR_BLOB = 0x0fff,
813 VT_RESERVED = 0x8000,
815 VT_ILLEGALMASKED = 0x0fff,
819 typedef struct tagCSPLATFORM
824 DWORD dwProcessorArch;
827 typedef struct tagQUERYCONTEXT
836 typedef [v1_enum] enum tagTYSPEC
847 typedef union switch(DWORD tyspec)
853 case TYSPEC_MIMETYPE:
857 case TYSPEC_FILENAME:
859 case TYSPEC_PACKAGENAME:
862 LPOLESTR pPackageName;
865 case TYSPEC_OBJECTID:
873 } /* interface IWinTypes */
875 cpp_quote("#ifdef _MSC_VER")
876 cpp_quote("#pragma warning(pop)")