Something went wrong. Try again.
Reactos
Something went wrong. Try again.
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847/* * Basic types used by COM interfaces * * Copyright 2002 Ove Kaaven * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */import "basetsd.h";import "guiddef.h";[ uuid(D3980A60-910C-1068-9341-00DD010F2F1C), version(0.1), pointer_default(unique)]interface IWinTypes{/******************** BASIC WIN32 TYPES ********************/cpp_quote("#if 0 /* winnt.h */") /* don't redefine these */typedef byte BYTE;typedef unsigned short WORD;typedef unsigned long DWORD;typedef long BOOL;typedef unsigned char UCHAR;typedef int INT;typedef unsigned int UINT;typedef short SHORT;typedef unsigned short USHORT;typedef long LONG;typedef unsigned long ULONG;typedef float FLOAT;typedef void *PVOID, *LPVOID;typedef DWORD *LPDWORD;typedef char CHAR;typedef [string] CHAR *LPSTR;typedef [string] const CHAR *LPCSTR;typedef wchar_t WCHAR;typedef [string] WCHAR *LPWSTR;typedef [string] const WCHAR *LPCWSTR;typedef boolean BOOLEAN;typedef DWORD COLORREF;typedef void *HANDLE;#define DECLARE_HANDLE(name) typedef void *name#define DECLARE_WIREM_HANDLE(name) typedef [wire_marshal(wire##name)] void*nameDECLARE_HANDLE(HMODULE);DECLARE_HANDLE(HINSTANCE);DECLARE_HANDLE(HRGN);DECLARE_HANDLE(HTASK);DECLARE_HANDLE(HKEY);DECLARE_HANDLE(HDESK);DECLARE_HANDLE(HMF);DECLARE_HANDLE(HEMF);DECLARE_HANDLE(HPEN);DECLARE_HANDLE(HRSRC);DECLARE_HANDLE(HSTR);DECLARE_HANDLE(HWINSTA);DECLARE_HANDLE(HKL);DECLARE_HANDLE(HGDIOBJ);typedef HANDLE HDWP;typedef LONG_PTR LRESULT;typedef LONG HRESULT;typedef DWORD LCID;typedef USHORT LANGID;typedef unsigned __int64 DWORDLONG;typedef __int64 LONGLONG;typedef unsigned __int64 ULONGLONG;typedef struct _LARGE_INTEGER { LONGLONG QuadPart;} LARGE_INTEGER;typedef struct _ULARGE_INTEGER { ULONGLONG QuadPart;} ULARGE_INTEGER;typedef struct _SID_IDENTIFIER_AUTHORITY { UCHAR Value[6];} SID_IDENTIFIER_AUTHORITY, *PSID_IDENTIFIER_AUTHORITY;typedef struct _SID { UCHAR Revision; UCHAR SubAuthorityCount; SID_IDENTIFIER_AUTHORITY IdentifierAuthority; [size_is(SubAuthorityCount)] ULONG SubAuthority[*];} SID, *PISID;typedef void *PSID;typedef USHORT SECURITY_DESCRIPTOR_CONTROL, *PSECURITY_DESCRIPTOR_CONTROL;typedef struct _ACL { UCHAR AclRevision; UCHAR Sbz1; USHORT AclSize; USHORT AceCount; USHORT Sbz2;} ACL;typedef ACL *PACL;typedef struct _SECURITY_DESCRIPTOR { UCHAR Revision; UCHAR Sbz1; SECURITY_DESCRIPTOR_CONTROL Control; PSID Owner; PSID Group; PACL Sacl; PACL Dacl;} SECURITY_DESCRIPTOR, *PISECURITY_DESCRIPTOR;typedef struct _SECURITY_ATTRIBUTES{ DWORD nLength; [size_is(nLength)] LPVOID lpSecurityDescriptor; BOOL bInheritHandle;} SECURITY_ATTRIBUTES, *PSECURITY_ATTRIBUTES, *LPSECURITY_ATTRIBUTES;typedef struct tagSIZE{ LONG cx; LONG cy;} SIZE, *PSIZE, *LPSIZE;typedef SIZE SIZEL, *PSIZEL, *LPSIZEL;typedef struct tagPOINT{ LONG x; LONG y;} POINT, *PPOINT, *LPPOINT;typedef struct _POINTL{ LONG x; LONG y;} POINTL, *PPOINTL;typedef struct tagRECT{ LONG left; LONG top; LONG right; LONG bottom;} RECT, *PRECT, *LPRECT;typedef const RECT *LPCRECT;typedef struct _RECTL{ LONG left; LONG top; LONG right; LONG bottom;} RECTL, *PRECTL, *LPRECTL;typedef const RECTL *LPCRECTL;typedef UINT_PTR WPARAM;typedef LONG_PTR LPARAM;cpp_quote("#endif /* winnt.h */")cpp_quote("#ifdef _MSC_VER") /* for IDL and MSVC only */typedef double DOUBLE;cpp_quote("#else")cpp_quote("typedef double DECLSPEC_ALIGN(8) DOUBLE;")cpp_quote("#endif")cpp_quote("#ifndef _PALETTEENTRY_DEFINED")cpp_quote("#define _PALETTEENTRY_DEFINED")typedef struct tagPALETTEENTRY { BYTE peRed; BYTE peGreen; BYTE peBlue; BYTE peFlags;} PALETTEENTRY, *PPALETTEENTRY, *LPPALETTEENTRY;cpp_quote("#endif")cpp_quote("#ifndef _LOGPALETTE_DEFINED")cpp_quote("#define _LOGPALETTE_DEFINED")typedef struct tagLOGPALETTE{ WORD palVersion; WORD palNumEntries; [size_is(palNumEntries)] PALETTEENTRY palPalEntry[*];} LOGPALETTE, *PLOGPALETTE, *LPLOGPALETTE;cpp_quote("#endif")cpp_quote("#ifndef _SYSTEMTIME_")cpp_quote("#define _SYSTEMTIME_")typedef struct _SYSTEMTIME{ WORD wYear; WORD wMonth; WORD wDayOfWeek; WORD wDay; WORD wHour; WORD wMinute; WORD wSecond; WORD wMilliseconds;} SYSTEMTIME, *PSYSTEMTIME, *LPSYSTEMTIME;cpp_quote("#endif")cpp_quote("#ifndef _FILETIME_")cpp_quote("#define _FILETIME_")typedef struct _FILETIME { DWORD dwLowDateTime; DWORD dwHighDateTime;} FILETIME, *PFILETIME, *LPFILETIME;cpp_quote("#endif")cpp_quote("#ifndef _TEXTMETRIC_DEFINED")cpp_quote("#define _TEXTMETRIC_DEFINED")typedef struct tagTEXTMETRICA{ LONG tmHeight; LONG tmAscent; LONG tmDescent; LONG tmInternalLeading; LONG tmExternalLeading; LONG tmAveCharWidth; LONG tmMaxCharWidth; LONG tmWeight; LONG tmOverhang; LONG tmDigitizedAspectX; LONG tmDigitizedAspectY; BYTE tmFirstChar; BYTE tmLastChar; BYTE tmDefaultChar; BYTE tmBreakChar; BYTE tmItalic; BYTE tmUnderlined; BYTE tmStruckOut; BYTE tmPitchAndFamily; BYTE tmCharSet;} TEXTMETRICA, *LPTEXTMETRICA, *PTEXTMETRICA;typedef struct tagTEXTMETRICW{ LONG tmHeight; LONG tmAscent; LONG tmDescent; LONG tmInternalLeading; LONG tmExternalLeading; LONG tmAveCharWidth; LONG tmMaxCharWidth; LONG tmWeight; LONG tmOverhang; LONG tmDigitizedAspectX; LONG tmDigitizedAspectY; WCHAR tmFirstChar; WCHAR tmLastChar; WCHAR tmDefaultChar; WCHAR tmBreakChar; BYTE tmItalic; BYTE tmUnderlined; BYTE tmStruckOut; BYTE tmPitchAndFamily; BYTE tmCharSet;} TEXTMETRICW, *LPTEXTMETRICW, *PTEXTMETRICW;cpp_quote("#endif")/******************** BASIC COM/OLE TYPES ********************/typedef WCHAR OLECHAR;typedef [string] OLECHAR *LPOLESTR;typedef [string] const OLECHAR *LPCOLESTR;cpp_quote("#ifndef __WINESRC__")cpp_quote("# ifdef WINE_UNICODE_NATIVE")cpp_quote("# define OLESTR(str) L##str")cpp_quote("# else")cpp_quote("# define OLESTR(str) u##str")cpp_quote("# endif")cpp_quote("#endif")typedef LONG SCODE;typedef struct _COAUTHIDENTITY { [size_is(UserLength+1)] USHORT *User; ULONG UserLength; [size_is(DomainLength+1)] USHORT *Domain; ULONG DomainLength; [size_is(PasswordLength+1)] USHORT *Password; ULONG PasswordLength; ULONG Flags;} COAUTHIDENTITY;typedef struct _COAUTHINFO { DWORD dwAuthnSvc; DWORD dwAuthzSvc; LPWSTR pwszServerPrincName; DWORD dwAuthnLevel; DWORD dwImpersonationLevel; COAUTHIDENTITY *pAuthIdentityData; DWORD dwCapabilities;} COAUTHINFO;typedef enum tagMEMCTX { MEMCTX_TASK = 1, MEMCTX_SHARED = 2, MEMCTX_MACSYSTEM = 3, MEMCTX_UNKNOWN = -1, MEMCTX_SAME = -2} MEMCTX;cpp_quote("#ifndef _ROT_COMPARE_MAX_DEFINED")cpp_quote("#define _ROT_COMPARE_MAX_DEFINED")cpp_quote("#define ROT_COMPARE_MAX 2048")cpp_quote("#endif")cpp_quote("#ifndef _ROTFLAGS_DEFINED")cpp_quote("#define _ROTFLAGS_DEFINED")cpp_quote("#define ROTFLAGS_REGISTRATIONKEEPSALIVE 0x1")cpp_quote("#define ROTFLAGS_ALLOWANYCLIENT 0x2")cpp_quote("#endif")typedef enum tagCLSCTX { CLSCTX_INPROC_SERVER = 0x00000001, CLSCTX_INPROC_HANDLER = 0x00000002, CLSCTX_LOCAL_SERVER = 0x00000004, CLSCTX_INPROC_SERVER16 = 0x00000008, CLSCTX_REMOTE_SERVER = 0x00000010, CLSCTX_INPROC_HANDLER16 = 0x00000020, CLSCTX_INPROC_SERVERX86 = 0x00000040, CLSCTX_INPROC_HANDLERX86 = 0x00000080, CLSCTX_ESERVER_HANDLER = 0x00000100, CLSCTX_NO_CODE_DOWNLOAD = 0x00000400, CLSCTX_NO_CUSTOM_MARSHAL = 0x00001000, CLSCTX_ENABLE_CODE_DOWNLOAD = 0x00002000, CLSCTX_NO_FAILURE_LOG = 0x00004000, CLSCTX_DISABLE_AAA = 0x00008000, CLSCTX_ENABLE_AAA = 0x00010000, CLSCTX_FROM_DEFAULT_CONTEXT = 0x00020000, CLSCTX_ACTIVATE_X86_SERVER = 0x00040000, CLSCTX_ACTIVATE_32_BIT_SERVER = CLSCTX_ACTIVATE_X86_SERVER, CLSCTX_ACTIVATE_64_BIT_SERVER = 0x00080000, CLSCTX_ENABLE_CLOAKING = 0x00100000, CLSCTX_APPCONTAINER = 0x00400000, CLSCTX_ACTIVATE_AAA_AS_IU = 0x00800000, CLSCTX_RESERVED6 = 0x01000000, CLSCTX_ACTIVATE_ARM32_SERVER = 0x02000000, CLSCTX_PS_DLL = 0x80000000,} CLSCTX;cpp_quote("#define CLSCTX_INPROC (CLSCTX_INPROC_SERVER | CLSCTX_INPROC_HANDLER)")cpp_quote("#define CLSCTX_ALL (CLSCTX_INPROC_SERVER | CLSCTX_INPROC_HANDLER | CLSCTX_LOCAL_SERVER | CLSCTX_REMOTE_SERVER)")cpp_quote("#define CLSCTX_SERVER (CLSCTX_INPROC_SERVER | CLSCTX_LOCAL_SERVER | CLSCTX_REMOTE_SERVER)")typedef enum tagMSHLFLAGS { MSHLFLAGS_NORMAL = 0, MSHLFLAGS_TABLESTRONG = 1, MSHLFLAGS_TABLEWEAK = 2, MSHLFLAGS_NOPING = 4} MSHLFLAGS;typedef enum tagMSHCTX { MSHCTX_LOCAL = 0, MSHCTX_NOSHAREDMEM = 1, MSHCTX_DIFFERENTMACHINE = 2, MSHCTX_INPROC = 3, MSHCTX_CROSSCTX = 4} MSHCTX;/******************** BLOB TYPES ********************/typedef struct _BYTE_BLOB { unsigned long clSize; [size_is(clSize)] byte abData[];} BYTE_BLOB;typedef [unique] BYTE_BLOB *UP_BYTE_BLOB;typedef struct _FLAGGED_BYTE_BLOB { unsigned long fFlags; unsigned long clSize; [size_is(clSize)] byte abData[];} FLAGGED_BYTE_BLOB;typedef [unique] FLAGGED_BYTE_BLOB *UP_FLAGGED_BYTE_BLOB;typedef struct _FLAGGED_WORD_BLOB { unsigned long fFlags; unsigned long clSize; [size_is(clSize)] unsigned short asData[];} FLAGGED_WORD_BLOB;typedef [unique] FLAGGED_WORD_BLOB *UP_FLAGGED_WORD_BLOB;typedef struct _BYTE_SIZEDARR { unsigned long clSize; [size_is(clSize)] byte *pData;} BYTE_SIZEDARR;typedef struct _SHORT_SIZEDARR { unsigned long clSize; [size_is(clSize)] unsigned short *pData;} WORD_SIZEDARR;typedef struct _LONG_SIZEDARR { unsigned long clSize; [size_is(clSize)] unsigned long *pData;} DWORD_SIZEDARR;typedef struct _HYPER_SIZEDARR { unsigned long clSize; [size_is(clSize)] hyper *pData;} HYPER_SIZEDARR;/******************** GDI TYPES ********************/const unsigned long WDT_INPROC_CALL = 0x48746457;const unsigned long WDT_REMOTE_CALL = 0x52746457;const unsigned long WDT_INPROC64_CALL = 0x50746457;typedef union _userCLIPFORMAT switch(long fContext) u { case WDT_INPROC_CALL: DWORD dwValue; case WDT_REMOTE_CALL: LPWSTR pwszName;} userCLIPFORMAT;typedef [unique] userCLIPFORMAT *wireCLIPFORMAT;typedef [wire_marshal(wireCLIPFORMAT)] WORD CLIPFORMAT;typedef struct tagRemHGLOBAL { long fNullHGlobal; unsigned long cbData; [size_is(cbData)] byte data[];} RemHGLOBAL;typedef union _userHGLOBAL switch(long fContext) u { case WDT_INPROC_CALL: long hInproc; case WDT_REMOTE_CALL: FLAGGED_BYTE_BLOB *hRemote; case WDT_INPROC64_CALL: __int64 hInproc64;} userHGLOBAL;typedef [unique] userHGLOBAL *wireHGLOBAL;typedef struct tagRemHMETAFILEPICT { long mm; long xExt; long yExt; unsigned long cbData; [size_is(cbData)] byte data[];} RemHMETAFILEPICT;typedef union _userHMETAFILE switch(long fContext) u { case WDT_INPROC_CALL: long hInproc; case WDT_REMOTE_CALL: BYTE_BLOB *hRemote; case WDT_INPROC64_CALL: __int64 hInproc64;} userHMETAFILE;typedef [unique] userHMETAFILE *wireHMETAFILE;typedef struct _remoteMETAFILEPICT { long mm; long xExt; long yExt; userHMETAFILE *hMF;} remoteMETAFILEPICT;typedef union _userHMETAFILEPICT switch(long fContext) u { case WDT_INPROC_CALL: long hInproc; case WDT_REMOTE_CALL: remoteMETAFILEPICT *hRemote; case WDT_INPROC64_CALL: __int64 hInproc64;} userHMETAFILEPICT;typedef [unique] userHMETAFILEPICT *wireHMETAFILEPICT;typedef struct tagRemHENHMETAFILE { unsigned long cbData; [size_is(cbData)] byte data[];} RemHENHMETAFILE;typedef union _userHENHMETAFILE switch(long fContext) u { case WDT_INPROC_CALL: long hInproc; case WDT_REMOTE_CALL: BYTE_BLOB *hRemote; case WDT_INPROC64_CALL: __int64 hInproc64;} userHENHMETAFILE;typedef [unique] userHENHMETAFILE *wireHENHMETAFILE;typedef struct tagRemHBITMAP{ unsigned long cbData; [size_is(cbData)] byte data[];} RemHBITMAP;typedef struct _userBITMAP { LONG bmType; LONG bmWidth; LONG bmHeight; LONG bmWidthBytes; WORD bmPlanes; WORD bmBitsPixel; ULONG cbSize; [size_is(cbSize)] byte pBuffer[];} userBITMAP;typedef union _userHBITMAP switch(long fContext) u { case WDT_INPROC_CALL: long hInproc; case WDT_REMOTE_CALL: userBITMAP *hRemote; case WDT_INPROC64_CALL: __int64 hInproc64;} userHBITMAP;typedef [unique] userHBITMAP *wireHBITMAP;typedef struct tagRemHPALETTE { unsigned long cbData; [size_is(cbData)] byte data[];} RemHPALETTE;typedef struct tagrpcLOGPALETTE { WORD palVersion; WORD palNumEntries; [size_is(palNumEntries)] PALETTEENTRY palPalEntry[];} rpcLOGPALETTE;typedef union _userHPALETTE switch(long fContext) u { case WDT_INPROC_CALL: long hInproc; case WDT_REMOTE_CALL: rpcLOGPALETTE *hRemote; case WDT_INPROC64_CALL: __int64 hInproc64;} userHPALETTE;typedef [unique] userHPALETTE *wireHPALETTE;cpp_quote("#if 0")DECLARE_WIREM_HANDLE(HGLOBAL);typedef HGLOBAL HLOCAL;DECLARE_WIREM_HANDLE(HBITMAP);DECLARE_WIREM_HANDLE(HPALETTE);DECLARE_WIREM_HANDLE(HENHMETAFILE);DECLARE_WIREM_HANDLE(HMETAFILE);cpp_quote("#endif")DECLARE_WIREM_HANDLE(HMETAFILEPICT);typedef union _RemotableHandle switch (long fContext) u{ case WDT_INPROC_CALL: long hInproc; case WDT_REMOTE_CALL: long hRemote;} RemotableHandle;typedef [unique] RemotableHandle *wireHACCEL;typedef [unique] RemotableHandle *wireHBRUSH;typedef [unique] RemotableHandle *wireHDC;typedef [unique] RemotableHandle *wireHFONT;typedef [unique] RemotableHandle *wireHICON;typedef [unique] RemotableHandle *wireHMENU;typedef [unique] RemotableHandle *wireHWND;typedef [unique] RemotableHandle *wireHMONITOR;cpp_quote("#if 0") /* for IDL only (C/C++ defs are in windef.h) */DECLARE_WIREM_HANDLE(HACCEL);DECLARE_WIREM_HANDLE(HBRUSH);DECLARE_WIREM_HANDLE(HDC);DECLARE_WIREM_HANDLE(HFONT);DECLARE_WIREM_HANDLE(HICON);DECLARE_WIREM_HANDLE(HMENU);DECLARE_WIREM_HANDLE(HWND);DECLARE_WIREM_HANDLE(HMONITOR);typedef HICON HCURSOR;typedef struct tagMSG{ HWND hwnd; UINT message; WPARAM wParam; LPARAM lParam; DWORD time; POINT pt;} MSG, *PMSG, *NPMSG, *LPMSG;cpp_quote("#endif")/******************** GUID TYPES ********************/cpp_quote("#if 0") /* for IDL only (C/C++ defs are in guiddef.h) */typedef GUID *REFGUID;typedef IID *REFIID;typedef CLSID *REFCLSID;typedef FMTID *REFFMTID;cpp_quote("#endif")/******************** MISC TYPES ********************/typedef enum tagDVASPECT { DVASPECT_CONTENT = 1, DVASPECT_THUMBNAIL = 2, DVASPECT_ICON = 4, DVASPECT_DOCPRINT = 8} DVASPECT;typedef enum tagSTGC { STGC_DEFAULT = 0, STGC_OVERWRITE = 1, STGC_ONLYIFCURRENT = 2, STGC_DANGEROUSLYCOMMITMERELYTODISKCACHE = 4, STGC_CONSOLIDATE = 8} STGC;typedef enum tagSTGMOVE { STGMOVE_MOVE = 0, STGMOVE_COPY = 1, STGMOVE_SHALLOWCOPY = 2} STGMOVE;typedef enum tagSTATFLAG { STATFLAG_DEFAULT = 0, STATFLAG_NONAME = 1, STATFLAG_NOOPEN = 2} STATFLAG;/******************** OLE Automation ********************/cpp_quote("#ifdef _MSC_VER") /* for IDL and MSVC only */typedef double DATE;cpp_quote("#else")cpp_quote("typedef double DECLSPEC_ALIGN(8) DATE;")cpp_quote("#endif")cpp_quote("#if 0") /* for IDL only */typedef struct tagCY { LONGLONG int64;} CY;cpp_quote("#else") /* C/C++ defs */cpp_quote("#ifndef _tagCY_DEFINED")cpp_quote("#define _tagCY_DEFINED")cpp_quote("typedef union tagCY {")cpp_quote(" struct {")cpp_quote(" ULONG Lo;")cpp_quote(" LONG Hi;")cpp_quote(" } DUMMYSTRUCTNAME;")cpp_quote(" LONGLONG int64;")cpp_quote("} CY;")cpp_quote("#endif")cpp_quote("#endif")typedef CY *LPCY;cpp_quote("#if 0") /* for IDL only */typedef struct tagDEC { USHORT wReserved; BYTE scale; BYTE sign; ULONG Hi32; ULONGLONG Lo64;} DECIMAL;cpp_quote("#else") /* C/C++ defs */cpp_quote("typedef struct tagDEC {")cpp_quote(" USHORT wReserved;")cpp_quote(" union {")cpp_quote(" struct {")cpp_quote(" BYTE scale;")cpp_quote(" BYTE sign;")cpp_quote(" } DUMMYSTRUCTNAME;")cpp_quote(" USHORT signscale;")cpp_quote(" } DUMMYUNIONNAME;")cpp_quote(" ULONG Hi32;")cpp_quote(" union {")cpp_quote(" struct {")cpp_quote(" ULONG Lo32;")cpp_quote(" ULONG Mid32;")cpp_quote(" } DUMMYSTRUCTNAME1;")cpp_quote(" ULONGLONG Lo64;")cpp_quote(" } DUMMYUNIONNAME1;")cpp_quote("} DECIMAL;")cpp_quote("#endif")cpp_quote("#define DECIMAL_NEG ((BYTE)0x80)")cpp_quote("#define DECIMAL_SETZERO(d) do{ memset(((char*)&(d)) + sizeof(USHORT), 0, sizeof(ULONG) * 3u + sizeof(USHORT)); }while (0)")typedef DECIMAL *LPDECIMAL;typedef [unique] FLAGGED_WORD_BLOB *wireBSTR;typedef [wire_marshal(wireBSTR)] OLECHAR *BSTR;typedef BSTR *LPBSTR;typedef short VARIANT_BOOL;typedef VARIANT_BOOL _VARIANT_BOOL;cpp_quote("#define VARIANT_TRUE ((VARIANT_BOOL)0xFFFF)")cpp_quote("#define VARIANT_FALSE ((VARIANT_BOOL)0x0000)")typedef struct tagBSTRBLOB { ULONG cbSize; [size_is(cbSize)] BYTE *pData;} BSTRBLOB, *LPBSTRBLOB;cpp_quote("#ifndef _tagBLOB_DEFINED")cpp_quote("#define _tagBLOB_DEFINED")cpp_quote("#define _BLOB_DEFINED")cpp_quote("#define _LPBLOB_DEFINED")typedef struct tagBLOB { ULONG cbSize; [size_is(cbSize)] BYTE *pBlobData;} BLOB, *LPBLOB;cpp_quote("#endif")typedef struct tagCLIPDATA { ULONG cbSize; long ulClipFmt; [size_is(cbSize-sizeof(long))] BYTE *pClipData;} CLIPDATA;cpp_quote("#define CBPCLIPDATA(cb) ((cb).cbSize - sizeof((cb).ulClipFmt))")typedef ULONG PROPID;/******************** VARTYPE ********************/typedef unsigned short VARTYPE;enum VARENUM { VT_EMPTY = 0, VT_NULL = 1, VT_I2 = 2, VT_I4 = 3, VT_R4 = 4, VT_R8 = 5, VT_CY = 6, VT_DATE = 7, VT_BSTR = 8, VT_DISPATCH = 9, VT_ERROR = 10, VT_BOOL = 11, VT_VARIANT = 12, VT_UNKNOWN = 13, VT_DECIMAL = 14, VT_I1 = 16, VT_UI1 = 17, VT_UI2 = 18, VT_UI4 = 19, VT_I8 = 20, VT_UI8 = 21, VT_INT = 22, VT_UINT = 23, VT_VOID = 24, VT_HRESULT = 25, VT_PTR = 26, VT_SAFEARRAY = 27, VT_CARRAY = 28, VT_USERDEFINED = 29, VT_LPSTR = 30, VT_LPWSTR = 31, VT_RECORD = 36, VT_INT_PTR = 37, VT_UINT_PTR = 38, VT_FILETIME = 64, VT_BLOB = 65, VT_STREAM = 66, VT_STORAGE = 67, VT_STREAMED_OBJECT = 68, VT_STORED_OBJECT = 69, VT_BLOB_OBJECT = 70, VT_CF = 71, VT_CLSID = 72, VT_VERSIONED_STREAM= 73, VT_BSTR_BLOB = 0x0fff, VT_VECTOR = 0x1000, VT_ARRAY = 0x2000, VT_BYREF = 0x4000, VT_RESERVED = 0x8000, VT_ILLEGAL = 0xffff, VT_ILLEGALMASKED = 0x0fff, VT_TYPEMASK = 0x0fff};typedef struct tagCSPLATFORM{ DWORD dwPlatformId; DWORD dwVersionHi; DWORD dwVersionLo; DWORD dwProcessorArch;} CSPLATFORM;typedef struct tagQUERYCONTEXT{ DWORD dwContext; CSPLATFORM Platform; LCID Locale; DWORD dwVersionHi; DWORD dwVersionLo;} QUERYCONTEXT;typedef [v1_enum] enum tagTYSPEC { TYSPEC_CLSID, TYSPEC_FILEEXT, TYSPEC_MIMETYPE, TYSPEC_PROGID, TYSPEC_FILENAME, TYSPEC_PACKAGENAME, TYSPEC_OBJECTID} TYSPEC;typedef union switch(DWORD tyspec){ case TYSPEC_CLSID: CLSID clsid; case TYSPEC_FILEEXT: LPOLESTR pFileExt; case TYSPEC_MIMETYPE: LPOLESTR pMimeType; case TYSPEC_PROGID: LPOLESTR pProgId; case TYSPEC_FILENAME: LPOLESTR pFileName; case TYSPEC_PACKAGENAME: struct { LPOLESTR pPackageName; GUID PolicyId; } ByName; case TYSPEC_OBJECTID: struct { GUID ObjectId; GUID PolicyId; } ByObjectId;} uCLSSPEC;cpp_quote("#ifndef PROPERTYKEY_DEFINED")cpp_quote("#define PROPERTYKEY_DEFINED")typedef struct _tagpropertykey{ GUID fmtid; DWORD pid;} PROPERTYKEY;cpp_quote("#endif /*PROPERTYKEY_DEFINED*/")} /* interface IWinTypes */