[ uuid(f5cc5a18-4264-101a-8c59-08002b2f8426), version(56.0), implicit_handle(handle_t rpc_binding) ] interface emsabp { /* this is mostly identical to wine/include/mapidefs.h, * up until MAPIERROR, at which point it looks completely * unfamiliar and alien. * * the functions in the IMAPITable only look _vaguely_ * familiar but are like, utterly different. * really odd. same data structures. different functions. * oh well. */ #define PR_ENTRYID 0x0fff0102 #define PR_OBJECTID 0xfffd0003 #define PR_DISPLAY_NAME 0x3001001e #define PT_CONTAINER_FLAGS 0x36000003 /* PCF_ISCONTAINER | PCF_HASCHILDCONTAINER */ #define PR_DEPTH 0x30050003 #define PR_PARENTENTRYID 0xfffc0102 typedef unsigned short WCHAR; typedef struct { long element_1; long element_2; long element_3; long element_4; long element_5; long element_6; long element_7; long element_8; long element_9; } EMS_MAPI_UNIDENTIFIED; typedef struct { char ab[16]; } MAPIUID; typedef [context_handle] void *emsabp_hnd_t; long NspiBind( [in] handle_t element_11, [in] long element_12, [in, ref] EMS_MAPI_UNIDENTIFIED *element_13, [in,out, unique] MAPIUID *element_14, [out] emsabp_hnd_t *element_15 ); long NspiUnbind( [in,out] emsabp_hnd_t *element_16, [in] long element_17 ); long NspiUpdateStat( [in] emsabp_hnd_t element_18, [in] long element_19, [in,out, ref] EMS_MAPI_UNIDENTIFIED *element_20, [in,out, unique] long *element_21 ); /* typedef [ptr, string] unsigned long *EMS_SPropTagArray;*/ /* this is probably an SPropTagArray. although it doesn't match * up with the definition in wine/includes/mapidefs.h, it also * is the data structure i've had the most difficulty with, matching * it to on-wire format. */ typedef struct { [unique, length_is(cValues), size_is(cValues)] long *aulPropTag; long cValues; /*long element_24;*/ } EMS_SPropTagArray; typedef [unique] EMS_SPropTagArray *EMS_LPSPropTagArray ; typedef struct { long cb; [size_is(cb), ptr] char *lpb; } EMS_SBinary; typedef struct { long dwLowDateTime; long dwHighDateTime; } EMS_FILETIME; typedef struct { long cValues; [size_is(cValues), ptr] short *lpi; } EMS_SShortArray; typedef struct { long cValues; [size_is(cValues), ptr] long *lpl; } EMS_MULTIVALUE_LONG_STRUCT; typedef struct { long cValues; [size_is(cValues), ptr] long *lppszA; /* this doesn't look right: should be a LPSTR */ } EMS_SLPSTRArray; typedef struct { long cValues; [size_is(cValues), ptr] EMS_SBinary *lpbin; } EMS_SBinaryArray; typedef struct { long cValues; [size_is(cValues), ptr] long *lpguid; /* this doesn't look right: it should be a GUID* */ } EMS_SGuidArray; typedef struct { long cValues; [size_is(cValues), ptr] long *lpi; /* this doesn't look right: it should be a LPWSTR* */ } EMS_MULTIVALUE_UNICODE_STRUCT; typedef struct { long cValues; [size_is(cValues), ptr] EMS_FILETIME *lpft; } EMS_SDateTimeArray; typedef [ptr, string] unsigned short *WSTRING; typedef [ptr, string] char *STRING; #define PT_UNSPECIFIED 0x0000 #define PT_NULL 0x0001 #define PT_I2 0002 #define PT_LONG 0003 #define PT_R4 0004 #define PT_DOUBLE 0x0005 #define PT_CURRENCY 0x0006 #define PT_APPTIME 0x0007 /*#define PT_CLSID 0x0008 */ #define PT_ERROR 0x000a /* means in a response package, that the given attribute contains no value, or not exists. -> So it won't be contained in the enumeration of the attrib. values array. */ #define PT_BOOLEAN 0x000b #define PT_OBJECT 0x000d #define PT_I8 0x0014 #define PT_STRING8 0x001e #define PT_UNICODE 0x001f #define PT_SYSTIME 0x0040 #define PT_CLSID 0x0048 #define PT_BINARY 0x0102 /*(the corresponding ???HDR entry is 4 bytes longer in this case!) 1??? */ /* MV means MultiValued*/ #define PT_MV_I2 0x1002 #define PT_MV_LONG 0x1003 #define PT_MV_R4 0x1004 #define PT_MV_DOUBLE 0x1005 #define PT_MV_CURRENCY 0x1006 #define PT_MV_APPTIME 0x1007 #define PT_MV_I8 0x1014 #define PT_MV_STRING8 0x101e #define PT_MV_TSTRING 0x101e #define PT_MV_UNICODE 0x101f #define PT_MV_SYSTIME 0x1040 #define PT_MV_CLSID 0x1048 #define PT_MV_BINARY 0x1102 typedef [switch_type(long)] union { [case(PT_I2)] short i; [case(PT_LONG)] long l; [case(PT_BOOLEAN)] short b; [case(PT_STRING8)] STRING lpszA; [case(PT_BINARY)] EMS_SBinary bin; [case(PT_UNICODE)] WSTRING lpszW; [case(PT_CLSID), ptr] MAPIUID *lpguid; [case(PT_SYSTIME)] EMS_FILETIME ft; [case(PT_ERROR)] long err; [case(PT_MV_I2)] EMS_SShortArray MVi; [case(PT_MV_LONG)] EMS_MULTIVALUE_LONG_STRUCT MVl; [case(PT_MV_STRING8)] EMS_SLPSTRArray MVszA; [case(PT_MV_BINARY)] EMS_SBinaryArray MVbin; [case(PT_MV_CLSID)] EMS_SGuidArray MVguid; [case(PT_MV_UNICODE)] EMS_MULTIVALUE_UNICODE_STRUCT MVszW; [case(PT_MV_SYSTIME)] EMS_SDateTimeArray MVft; [case(PT_NULL)] long null; [case(PT_OBJECT)] long object; } EMS_SPropValue_CTR; typedef struct { long ulPropTag; long dwAlignPad; [switch_is(ulPropTag)] EMS_SPropValue_CTR Value; } EMS_SPropValue; typedef struct { long ulAdrEntryPad; long cValues; [size_is(cValues), unique] EMS_SPropValue *lpProps; } EMS_SRow; typedef [unique] EMS_SRow *EMS_SRow_PTR ; typedef struct { long cRows; [size_is(cRows)] EMS_SRow aRow[*]; } EMS_SRowSet; typedef [unique] EMS_SRowSet *EMS_SRowSet_PTR ; long NspiQueryRows( [in] emsabp_hnd_t element_69, [in] long element_70, [in,out, ref] EMS_MAPI_UNIDENTIFIED *element_71, [in] long lRows, [in, size_is(lRows), unique] long *element_73, [in] long element_74, [in, ref] EMS_SPropTagArray *element_75, [out, ref] EMS_SRowSet_PTR *element_76 ); long NspiSeekEntries( [in] emsabp_hnd_t element_77, [in] long element_78, [in,out, ref] EMS_MAPI_UNIDENTIFIED *element_79, [in, ref] EMS_SPropValue *element_80, [in, unique] EMS_SPropTagArray *element_81, [in, unique] EMS_SPropTagArray *element_82, [out, ref] EMS_SRowSet_PTR *element_83 ); typedef [ptr] struct _SRestriction *LPSRestriction; typedef struct { long cRes; [size_is(cRes)] LPSRestriction lpRes; } EMS_SAndRestriction; typedef struct { long cRes; [size_is(cRes)] LPSRestriction lpRes; } EMS_SOrRestriction; typedef struct { /* ULONG ulReserved - perhaps an [ignore] property on this one? */ LPSRestriction lpRes; } EMS_SNotRestriction; typedef struct { long ulFuzzyLevel; long ulPropTag; [ptr] EMS_SPropValue *lpProp; } EMS_SContentRestriction; typedef struct { long relop; long ulPropTag; [ptr] EMS_SPropValue *lpProp; } EMS_SPropertyRestriction; typedef struct { long ulReserved1; long ulPropTag; long ulReserved2; } EMS_SExistRestriction; typedef struct { long relop; long ulPropTag; long cb; } EMS_SSizeRestriction; typedef struct { long relBMR; long ulPropTag; long ulMask; } EMS_SBitMaskRestriction; typedef struct { long relop; long ulPropTag1; long ulPropTag2; } EMS_SComparePropsRestriction; typedef struct { long ulSubObject; LPSRestriction lpRes; } EMS_SSubRestriction; typedef struct { [unique] MAPIUID *lpguid; long ulKind; long lID; /* this is actually a union in mapidefs.h */ } EMS_MAPINAMEID; /* Restriction types */ #define RES_AND 0U #define RES_OR 1U #define RES_NOT 2U #define RES_CONTENT 3U #define RES_PROPERTY 4U #define RES_COMPAREPROPS 5U #define RES_BITMASK 6U #define RES_SIZE 7U #define RES_EXIST 8U #define RES_SUBRESTRICTION 9U #define RES_COMMENT 10U typedef [switch_type(long)] union { [case(RES_AND) ] EMS_SAndRestriction resAnd; [case(RES_OR) ] EMS_SOrRestriction resOr; [case(RES_NOT) ] EMS_SNotRestriction resNot; [case(RES_CONTENT) ] EMS_SContentRestriction resContent; [case(RES_PROPERTY) ] EMS_SPropertyRestriction resProperty; [case(RES_COMPAREPROPS) ] EMS_SComparePropsRestriction resCompareProps; [case(RES_BITMASK) ] EMS_SBitMaskRestriction resBitMask; [case(RES_SUBRESTRICTION)] EMS_SSubRestriction resSub; [case(RES_SIZE) ] EMS_SSizeRestriction resSize; [case(RES_EXIST) ] EMS_SExistRestriction resExist; /* case SCommentRestriction is missing! */ } EMS_SRestriction_CTR; typedef struct _SRestriction { long rt; [switch_is(rt)] EMS_SRestriction_CTR res; } EMS_SRestriction; long NspiGetMatches( [in] emsabp_hnd_t element_110, [in] long element_111, [in,out, ref] EMS_MAPI_UNIDENTIFIED *element_112, [in, unique] EMS_SPropTagArray *element_113, [in] long element_114, [in, unique] EMS_SRestriction *element_115, [in, unique] EMS_MAPINAMEID *element_116, [in] long element_117, [out, ref] EMS_SPropTagArray *element_118, [in, ref] EMS_SPropTagArray *element_119, [out, ref] EMS_SRowSet_PTR *element_120 ); long NspiResortRestriction( [in] emsabp_hnd_t element_121, [in] long element_122, [in,out, ref] EMS_MAPI_UNIDENTIFIED *element_123, [in, ref] EMS_SPropTagArray *element_124, [in,out, ref] EMS_LPSPropTagArray *element_125 ); typedef struct { long element_126; [unique, string] char *element_127; } EMS_NAME_STRING; long NspiDNToEph( [in] emsabp_hnd_t element_128, [in] long element_129, [in, ref] EMS_NAME_STRING *element_130, [out, ref] EMS_SPropTagArray *element_131 ); long NspiGetPropList( [in] emsabp_hnd_t element_132, [in] long element_133, [in] long element_134, [in] long element_135, [out, ref] EMS_LPSPropTagArray *element_136 ); long NspiGetProps( [in] emsabp_hnd_t element_137, [in] long element_138, [in, ref] EMS_MAPI_UNIDENTIFIED *element_139, [in, unique] EMS_SPropTagArray *element_140, [out, ref] EMS_SRow_PTR *element_141 ); long NspiCompareDNTs( [in] emsabp_hnd_t element_142, [in] long element_143, [in, ref] EMS_MAPI_UNIDENTIFIED *element_144, [in] long element_145, [in] long element_146, [out, ref] long *element_147 ); long NspiModProps( [in] emsabp_hnd_t element_148, [in] long element_149, [in, ref] EMS_MAPI_UNIDENTIFIED *element_150, [in, unique] EMS_SPropTagArray *element_151, [in, ref] EMS_SRow *element_152 ); long NspiGetHierarchyInfo( [in] emsabp_hnd_t element_153, [in] long element_154, [in, ref] EMS_MAPI_UNIDENTIFIED *element_155, [in,out, ref] long *element_156, [out, ref] EMS_SRowSet_PTR *element_157 ); long NspiGetTemplateInfo( [in] emsabp_hnd_t element_158, [in] long element_159, [in] long element_160, [in, unique, string] char *element_161, [in] long element_162, [in] long element_163, [out, ref] EMS_SRow_PTR *element_164 ); long NspiModLInkAtt( [in] emsabp_hnd_t element_165, [in] long element_166, [in] long element_167, [in] long element_168, [in, ref] EMS_SBinaryArray *element_169 ); long NspiDeleteEntries( [in] emsabp_hnd_t element_170, [in] long element_171, [in] long element_172, [in, ref] EMS_SBinaryArray *element_173 ); long NspiQueryColumns( [in] emsabp_hnd_t element_174, [in] long element_175, [in] long element_176, [out, ref] EMS_LPSPropTagArray *element_177 ); typedef struct { long element_178; [unique] MAPIUID *element_179; } EMS_NAME_CLSID; typedef [ptr] EMS_NAME_CLSID *EMS_NAME_CLSID_PTR; long NspiGetNamesFromIDs( [in] emsabp_hnd_t element_180, [in] long element_181, [in, unique] MAPIUID *element_182, [in, unique] EMS_SPropTagArray *element_183, [out, ref] EMS_LPSPropTagArray *element_184, [out, ref] EMS_NAME_CLSID_PTR *element_185 ); long NspiGetIDsFromNames( [in] emsabp_hnd_t element_186, [in] long element_187, [in] long element_188, [in] long element_189, [in, size_is(element_189), ref] long *element_190, [out, ref] EMS_LPSPropTagArray *element_191 ); long NspiResolveNames( [in] emsabp_hnd_t element_192, [in] long element_193, [in, ref] EMS_MAPI_UNIDENTIFIED *element_194, [in, unique] EMS_SPropTagArray *element_195, [in, ref] EMS_NAME_STRING *element_196, [out, ref] EMS_LPSPropTagArray *element_197, [out, ref] EMS_SRowSet_PTR *element_198 ); typedef struct { long element_199; [unique, string] WCHAR *element_200; } EMS_NAME_UNICODE; long NspiResolveNamesW( [in] emsabp_hnd_t element_201, [in] long element_202, [in, ref] EMS_MAPI_UNIDENTIFIED *element_203, [in, unique] EMS_SPropTagArray *element_204, [in, ref] EMS_NAME_UNICODE *element_205, [out, ref] EMS_LPSPropTagArray *element_206, [out, ref] EMS_SRowSet_PTR *element_207 ); }