/* NSPI Implementation OpenChange Project Copyright (C) Julien Kerihuel 2006 This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ #include "idl_types.h" [ uuid("f5cc5a18-4264-101a-8c59-08002b2f8426"), endpoint("ncacn_np:[\\pipe\\exchange_nsp]", "ncacn_ip_tcp:"), pointer_default(unique), version(56.0), helpstring("Exchange 5.5 Name Service Provider"), helper("ndr_mapi.h") ] interface nspi { #include "mapitags_enum.h" #include "mapicodes_enum.h" /*****************/ /* Function 0x00 */ /* ** MAPIUID explanation: ** http://msdn.microsoft.com/library/default.asp?url=/library/en-us/mapi/html/c42065c2-b1f5-4930-84a6-6ef90c6162d0.asp */ typedef struct _MAPIUID{ uint8 ab[16]; } MAPIUID; /* ** input locale combination: ** http://www.microsoft.com/globaldev/reference/win2k/setup/lcid.mspx */ typedef struct { uint32 language; uint32 method; } input_locale; typedef [flag(NDR_NOALIGN)] struct { uint32 handle; uint32 flag; MAPIUID service_provider; uint32 codepage; /* CPID */ input_locale input_locale; /* LCID */ } MAPI_SETTINGS; typedef struct { [unique, length_is(cValues - 1), size_is(cValues - 1)] MAPITAGS *aulPropTag; uint32 cValues; } SPropTagArray; typedef struct { [length_is(cValues - 1), size_is(cValues - 1)] uint32 *value; uint32 cValues; } instance_key; /*****************/ /* Function 0x00 */ MAPISTATUS NspiBind( [in] uint32 unknown, [in] MAPI_SETTINGS *settings, [in,out,unique] GUID *mapiuid, [out] policy_handle *handle ); /*****************/ /* Function 0x01 */ MAPISTATUS NspiUnbind( [in, out] policy_handle *handle, [in] uint32 status ); void NspiUpdateStat(); /*****************/ /* Function 0x03 */ MAPISTATUS NspiQueryRows( [in] policy_handle *handle, [in] uint32 flag, [in,out] MAPI_SETTINGS *settings, [in] uint32 lRows, [in][size_is(lRows)][unique] uint32 *instance_key, [in] uint32 unknown, [in] SPropTagArray *REQ_properties, [out] SRowSet **RowSet ); void NspiSeekEntries(); /*****************/ /* Function 0x05 */ typedef struct { [unique] MAPIUID *lpguid; uint32 ulKind; uint32 lID; /* this is actually a union in mapidefs.h */ } MAPINAMEID; /* Restriction types */ typedef [v1_enum] enum { RES_AND = 0, RES_OR = 1, RES_NOT = 2, RES_CONTENT = 3, RES_PROPERTY = 4, RES_COMPAREPROPS = 5, RES_BITMASK = 6, RES_SIZE = 7, RES_EXIST = 8, RES_SUBRESTRICTION = 9, RES_COMMENT = 10 } nspi_RestrictionType; typedef struct { uint32 relop; MAPITAGS ulPropTag; SPropValue *lpProp; } SPropertyRestriction; typedef struct { uint32 cRes; [size_is(cRes)][unique]SRestriction *lpRes; } SAndRestriction; typedef [switch_type(nspi_RestrictionType)] union { [case(RES_AND) ] SAndRestriction resAnd; // [case(RES_OR) ] SOrRestriction resOr; // [case(RES_NOT) ] SNotRestriction resNot; // [case(RES_CONTENT) ] SContentRestriction resContent; [case(RES_PROPERTY) ] SPropertyRestriction resProperty; // [case(RES_COMPAREPROPS) ] SComparePropsRestriction resCompareProps; // [case(RES_BITMASK) ] SBitMaskRestriction resBitMask; // [case(RES_SUBRESTRICTION)] SSubRestriction resSub; // [case(RES_SIZE) ] SSizeRestriction resSize; // [case(RES_EXIST) ] SExistRestriction resExist; } SRestriction_CTR; typedef [public] struct _SRestriction{ nspi_RestrictionType rt; [switch_is(rt)] SRestriction_CTR res; } SRestriction; /* Sort type */ #define TABLE_SORT_ASCEND 0 #define TABLE_SORT_DESCEND 0 typedef [public] struct _SSortOrder{ uint32 ulPropTag; uint32 ulOrder; } SSortOrder; typedef [public] struct _SSortOrderSet{ uint32 cSorts; uint32 cCategories; uint32 cExpanded; [size_is(cSorts)][unique]SSortOrder *aSort; } SSortOrderSet; MAPISTATUS NspiGetMatches( [in] policy_handle *handle, [in] uint32 unknown1, [in,out] MAPI_SETTINGS *settings, [in][unique] SPropTagArray *PropTagArray, [in] uint32 unknown2, [in][unique] SRestriction *restrictions, [in] uint32 unknown3, [out] instance_key *instance_key, [in][unique] SPropTagArray *REQ_properties, [out] SRowSet **RowSet ); void NspiResortRestriction(); /*****************/ /* Function 0x07 */ typedef struct { [string, charset(DOS)] uint8 *str; } NAME_STRING; MAPISTATUS NspiDNToEph( [in] policy_handle *handle, [in] uint32 flag, [in] uint32 size, [in,ref][size_is(size)] NAME_STRING *server_dn, [out] instance_key *instance_key ); void NspiGetPropList(); /*****************/ /* Function 0x09 */ MAPISTATUS NspiGetProps( [in] policy_handle *handle, [in] uint32 flag, [in] MAPI_SETTINGS *settings, [in] SPropTagArray *REQ_properties, [out] SRow **REPL_values ); void NspiCompareDNTs(); void NspiModProps(); typedef [v1_enum] enum { PT_UNSPECIFIED = 0x0000, PT_NULL = 0x0001, PT_I2 = 0x0002, PT_LONG = 0x0003, PT_R4 = 0x0004, PT_DOUBLE = 0x0005, PT_CURRENCY = 0x0006, PT_APPTIME = 0x0007, PT_ERROR = 0x000a, /* means the given attr contains no value */ PT_BOOLEAN = 0x000b, PT_OBJECT = 0x000d, PT_I8 = 0x0014, PT_STRING8 = 0x001e, PT_UNICODE = 0x001f, PT_SYSTIME = 0x0040, PT_CLSID = 0x0048, PT_BINARY = 0x0102, /* Multi-valued properties */ PT_MV_I2 = 0x1002, PT_MV_LONG = 0x1003, PT_MV_R4 = 0x1004, PT_MV_DOUBLE = 0x1005, PT_MV_CURRENCY = 0x1006, PT_MV_APPTIME = 0x1007, PT_MV_I8 = 0x1014, PT_MV_STRING8 = 0x101e, // PT_MV_TSTRING = 0x101e, PT_MV_UNICODE = 0x101f, PT_MV_SYSTIME = 0x1040, PT_MV_CLSID = 0x1048, PT_MV_BINARY = 0x1102 } property_types; /*****************/ /* Function 0x0c */ typedef struct { uint32 cb; [size_is(cb)][unique] uint8 *lpb; } SBinary; typedef struct { uint32 dwLowDateTime; uint32 dwHighDateTime; } FILETIME; typedef struct { uint32 cValues; [size_is(cValues)] uint16 *lpi; } SShortArray; typedef struct { uint32 cValues; [size_is(cValues)] uint32 *lpl; } MV_LONG_STRUCT; typedef struct { ascstr_noterm lppszA; } LPSTR; typedef struct { uint32 cValues; [size_is(cValues)] LPSTR **strings; } SLPSTRArray; typedef struct { uint32 cValues; [size_is(cValues)] SBinary *lpbin; } SBinaryArray; typedef [flag(NDR_NOALIGN)] struct { uint32 cValues; [size_is(cValues)] uint32 *lpguid; } SGuidArray; typedef struct { uint32 cValues; [size_is(cValues)] uint32 *lpi; } MV_UNICODE_STRUCT; typedef struct { uint32 cValues; [size_is(cValues)] FILETIME *lpft; } SDateTimeArray; typedef [switch_type(property_types)] union { [case(PT_I2)] uint16 i; [case(PT_LONG)] uint32 l; [case(PT_BOOLEAN)] uint16 b; [case(PT_STRING8)][unique][string,charset(DOS)] uint8 *lpszA; [case(PT_BINARY)] SBinary bin; [case(PT_UNICODE)] [string,charset(UTF16)] uint16 *lpszW; [case(PT_CLSID)] MAPIUID *lpguid; [case(PT_SYSTIME)] FILETIME ft; [case(PT_ERROR)] MAPISTATUS err; [case(PT_MV_I2)] SShortArray MVi; [case(PT_MV_LONG)] MV_LONG_STRUCT MVl; [case(PT_MV_STRING8)] SLPSTRArray MVszA; [case(PT_MV_BINARY)] SBinaryArray MVbin; [case(PT_MV_CLSID)] SGuidArray MVguid; [case(PT_MV_UNICODE)] MV_UNICODE_STRUCT MVszW; [case(PT_MV_SYSTIME)] SDateTimeArray MVft; [case(PT_NULL)] uint32 null; [case(PT_OBJECT)] uint32 object; } SPropValue_CTR; typedef [public]struct { MAPITAGS ulPropTag; uint32 dwAlignPad; [switch_is(ulPropTag & 0xFFFF)] SPropValue_CTR value; } SPropValue; typedef struct { uint32 ulAdrEntryPad; uint32 cValues; [size_is(cValues)][unique] SPropValue *lpProps; } SRow; typedef [public] struct { uint32 cRows; [size_is(cRows)] SRow aRow[*]; } SRowSet; MAPISTATUS NspiGetHierarchyInfo( [in] policy_handle *handle, [in] uint32 unknown1, [in] MAPI_SETTINGS *settings, [in,out] uint32 *unknown2, [out] SRowSet **RowSet ); void NspiGetTemplateInfo(); void NspiModLInkAtt(); void NspiDeleteEntries(); void NspiQueryColumns(); void NspiGetNamesFromIDs(); void NspiGetIDsFromNames(); void NspiResolveNames(); void NspiResolveNamesW(); }