wireshark/epan/dissectors/pidl/nspi/nspi.idl

378 lines
8.7 KiB
Plaintext

/*
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();
}