5 Appendix A: Full IDL
-
import "ms-dtyp.idl"; // forward declaration typedef tag_inner_PROPVARIANT PROPVARIANT; // basic type aliases typedef unsigned long PROPID; typedef short VARIANT_BOOL; typedef struct { unsigned char rgb[16]; } XACTUOW; typedef struct tagBLOB { unsigned long cbSize; [size_is(cbSize)] unsigned char *pBlobData; } BLOB; typedef struct tagCAUB { unsigned long cElems; [size_is( cElems )] unsigned char * pElems; } CAUB; typedef struct tagCAUI { unsigned long cElems; [size_is( cElems )] unsigned short * pElems; } CAUI; typedef struct tagCAL { unsigned long cElems; [size_is( cElems )] long * pElems; } CAL; typedef struct tagCAUL { unsigned long cElems; [size_is( cElems )] unsigned long * pElems; } CAUL; typedef struct tagCAUH { unsigned long cElems; [size_is( cElems )] ULARGE_INTEGER * pElems; } CAUH; typedef struct tagCACLSID { unsigned long cElems; [size_is( cElems )] GUID * pElems; } CACLSID; typedef struct tagCALPWSTR { unsigned long cElems; [size_is( cElems )] [string] wchar_t ** pElems; } CALPWSTR; typedef struct tagCAPROPVARIANT { unsigned long cElems; [size_is( cElems )] PROPVARIANT * pElems; } CAPROPVARIANT; typedef enum { VT_EMPTY = 0, VT_NULL = 1, VT_I2 = 2, VT_I4 = 3, VT_BOOL = 11, VT_VARIANT = 12, VT_I1 = 16, VT_UI1 = 17, VT_UI2 = 18, VT_UI4 = 19, VT_I8 = 20, VT_UI8 = 21, VT_LPWSTR = 31, VT_BLOB = 65, VT_CLSID = 72, VT_VECTOR = 0x1000, } VARENUM; typedef unsigned short VARTYPE; typedef struct _tag_inner_PROPVARIANT { VARTYPE vt; UCHAR wReserved1; UCHAR wReserved2; ULONG wReserved3; [switch_is(vt)] union { [case (VT_EMPTY, VT_NULL)]; [case (VT_I1)] CHAR cVal; [case (VT_UI1)] UCHAR bVal; [case (VT_I2)] SHORT iVal; [case (VT_UI2)] USHORT uiVal; [case (VT_I4)] LONG lVal; [case (VT_UI4)] ULONG ulVal; [case (VT_I8)] LARGE_INTEGER hVal; [case (VT_UI8)] ULARGE_INTEGER uhVal; [case (VT_BOOL)] VARIANT_BOOL boolVal; [case (VT_CLSID)] GUID * puuid; [case (VT_BLOB)] BLOB blob; [case (VT_LPWSTR)] [string] wchar_t * pwszVal; [case (VT_VECTOR|VT_UI1)] CAUB caub; [case (VT_VECTOR|VT_UI2)] CAUI caui; [case (VT_VECTOR|VT_I4)] CAL cal; [case (VT_VECTOR|VT_UI4)] CAUL caul; [case (VT_VECTOR|VT_UI8)] CAUH cauh; [case (VT_VECTOR|VT_CLSID)] CACLSID cauuid; [case (VT_VECTOR|VT_LPWSTR)] CALPWSTR calpwstr; [case (VT_VECTOR|VT_VARIANT)] CAPROPVARIANT capropvar; } _varUnion; } tag_inner_PROPVARIANT; typedef struct _DL_ID { GUID m_DlGuid; [string] wchar_t * m_pwzDomain; } DL_ID; typedef struct _MULTICAST_ID { ULONG m_address; ULONG m_port; } MULTICAST_ID; typedef struct _OBJECTID { GUID Lineage; DWORD Uniquifier; } OBJECTID; typedef enum __QUEUE_FORMAT_TYPE { QUEUE_FORMAT_TYPE_UNKNOWN = 0, QUEUE_FORMAT_TYPE_PUBLIC = 1, QUEUE_FORMAT_TYPE_PRIVATE = 2, QUEUE_FORMAT_TYPE_DIRECT = 3, QUEUE_FORMAT_TYPE_MACHINE = 4, QUEUE_FORMAT_TYPE_CONNECTOR = 5, QUEUE_FORMAT_TYPE_DL = 6, QUEUE_FORMAT_TYPE_MULTICAST = 7, QUEUE_FORMAT_TYPE_SUBQUEUE = 8 } QUEUE_FORMAT_TYPE; typedef struct __QUEUE_FORMAT { unsigned char m_qft; unsigned char m_SuffixAndFlags; unsigned short m_reserved; [switch_is(m_qft)] union { [case(QUEUE_FORMAT_TYPE_UNKNOWN)] ; // No member is set. Selected when an m_qft value // of 0 is returned. [case(QUEUE_FORMAT_TYPE_PUBLIC)] GUID m_gPublicID; [case(QUEUE_FORMAT_TYPE_PRIVATE)] OBJECTID m_oPrivateID; [case(QUEUE_FORMAT_TYPE_DIRECT)] [string] wchar_t* m_pDirectID; [case(QUEUE_FORMAT_TYPE_MACHINE)] GUID m_gMachineID; [case(QUEUE_FORMAT_TYPE_CONNECTOR)] GUID m_GConnectorID; [case(QUEUE_FORMAT_TYPE_DL)] DL_ID m_DlID; [case(QUEUE_FORMAT_TYPE_MULTICAST)] MULTICAST_ID m_MulticastID; [case(QUEUE_FORMAT_TYPE_SUBQUEUE)] [string] wchar_t* m_pDirectSubqueueID; }; } QUEUE_FORMAT;