| /* | 
 |  * 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., 59 Temple Place, Suite 330, Boston, MA  02111-1307  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 unsigned char 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*name | 
 |  | 
 | DECLARE_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 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, *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, *PSECURITY_DESCRIPTOR; | 
 |  | 
 | typedef struct _SECURITY_ATTRIBUTES | 
 | { | 
 |     DWORD 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 _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("#define OLESTR(str) L##str") | 
 | 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        = 0x1, | 
 |   CLSCTX_INPROC_HANDLER       = 0x2, | 
 |   CLSCTX_LOCAL_SERVER         = 0x4, | 
 |   CLSCTX_INPROC_SERVER16      = 0x8, | 
 |   CLSCTX_REMOTE_SERVER        = 0x10, | 
 |   CLSCTX_INPROC_HANDLER16     = 0x20, | 
 |   CLSCTX_INPROC_SERVERX86     = 0x40, | 
 |   CLSCTX_INPROC_HANDLERX86    = 0x80, | 
 |   CLSCTX_ESERVER_HANDLER      = 0x100, | 
 |   CLSCTX_NO_CODE_DOWNLOAD     = 0x400, | 
 |   CLSCTX_NO_CUSTOM_MARSHAL    = 0x1000, | 
 |   CLSCTX_ENABLE_CODE_DOWNLOAD = 0x2000, | 
 |   CLSCTX_NO_FAILURE_LOG       = 0x4000, | 
 |   CLSCTX_DISABLE_AAA          = 0x8000, | 
 |   CLSCTX_ENABLE_AAA           = 0x10000, | 
 |   CLSCTX_FROM_DEFAULT_CONTEXT = 0x20000 | 
 | } 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; | 
 |   default:              long               hGlobal; | 
 | } 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; | 
 |   default:              long       hGlobal; | 
 | } 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; | 
 |   default:              long                hGlobal; | 
 | } 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; | 
 |   default:              long       hGlobal; | 
 | } 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; | 
 |   default:              long        hGlobal; | 
 | } 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; | 
 |   default:              long           hGlobal; | 
 | } 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; | 
 |  | 
 | 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); | 
 |  | 
 | 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("#ifdef WORDS_BIGENDIAN") | 
 | cpp_quote("        LONG  Hi;") | 
 | cpp_quote("        ULONG Lo;") | 
 | cpp_quote("#else") | 
 | cpp_quote("        ULONG Lo;") | 
 | cpp_quote("        LONG  Hi;") | 
 | cpp_quote("#endif") | 
 | 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("#ifdef WORDS_BIGENDIAN") | 
 | cpp_quote("      ULONG Mid32;") | 
 | cpp_quote("      ULONG Lo32;") | 
 | cpp_quote("#else") | 
 | cpp_quote("      ULONG Lo32;") | 
 | cpp_quote("      ULONG Mid32;") | 
 | cpp_quote("#endif") | 
 | 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; | 
 |  | 
 | } /* interface IWinTypes */ |