/* OpenChange MAPI implementation. Copyright (C) Julien Kerihuel 2007. 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 3 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, see . */ #include "idl_types.h" [ uuid("a4f1db00-ca47-1067-b31f-00dd010662da"), pointer_default(unique), endpoint("ncacn_np:[\\pipe\\lsass]","ncacn_np:[\\pipe\\protected_storage]","ncacn_ip_tcp:"), version(0.82), helpstring("Exchange 5.5 EMSMDB") ] interface mapi { #include "mapitags_enum.h" #include "mapicodes_enum.h" /*****************/ /* Function 0x00 */ typedef struct datablob { uint8 *data; uint8 length; } DATA_BLOB; typedef struct { uint32 language; uint32 method; } input_locale; MAPISTATUS EcDoConnect( [out] policy_handle *handle, [in,string] uint8 name[], [in] uint32 unknown1[3], [in] uint32 code_page, [in] input_locale input_locale, [in] uint32 unknown2, [in] uint16 unknown3, [out] uint32 unknown4[3], [out] uint16 *session_nb, [out,unique,string] uint8 *org_group, [out,unique,string] uint8 *user, [out] uint16 store_version[3], [in,out] uint16 emsmdb_client_version[3], [in,out] uint32 *alloc_space ); /*****************/ /* Function 0x01 */ MAPISTATUS EcDoDisconnect( [in,out] policy_handle *handle ); /*****************/ /* Function 0x02 */ /* EcDoRpc opnums */ typedef [public, enum8bit, flag(NDR_PAHEX)] enum { MAPI_STORE = 0x1, MAPI_ADDRBOOK = 0x2, MAPI_FOLDER = 0x3, MAPI_ABCONT = 0x4, MAPI_MESSAGE = 0x5, MAPI_MAILUSER = 0x6, /* Individual Recipient */ MAPI_ATTACH = 0x7, MAPI_DISTLIST = 0x8, MAPI_PROFSECT = 0x9, MAPI_STATUS = 0xA, MAPI_SESSION = 0xB, MAPI_FORMINFO = 0xC } MAPI_OBJTYPE; typedef [public, v1_enum, flag(NDR_PAHEX)] enum { RightsNone = 0x00000000, RightsReadItems = 0x00000001, RightsCreateItems = 0x00000002, RightsEditOwn = 0x00000008, RightsDeleteOwn = 0x00000010, RightsEditAll = 0x00000020, RightsDeleteAll = 0x00000040, RightsCreateSubfolders = 0x00000080, RightsFolderOwner = 0x00000100, RightsFolderContact = 0x00000200, RoleNone = 0x00000400, RoleReviewer = 0x00000401, RoleContributor = 0x00000402, RoleNoneditingAuthor = 0x00000413, RoleAuthor = 0x0000041B, RoleEditor = 0x0000047B, RolePublishAuthor = 0x0000049B, RolePublishEditor = 0x000004FB, RightsAll = 0x000005FB, RoleOwner = 0x000007FB } ACLRIGHTS; typedef [public, enum8bit, flag(NDR_PAHEX)] enum { op_MAPI_Release = 0x1, op_MAPI_OpenFolder = 0x2, op_MAPI_OpenMessage = 0x3, op_MAPI_GetHierarchyTable = 0x4, op_MAPI_GetContentsTable = 0x5, op_MAPI_CreateMessage = 0x6, op_MAPI_GetProps = 0x7, op_MAPI_GetPropsAll = 0x8, op_MAPI_GetPropList = 0x9, op_MAPI_SetProps = 0xa, op_MAPI_DeleteProps = 0xb, op_MAPI_SaveChangesMessage = 0xc, op_MAPI_ModifyRecipients = 0xe, op_MAPI_SetReadFlags = 0x11, op_MAPI_SetColumns = 0x12, op_MAPI_SortTable = 0x13, op_MAPI_Restrict = 0x14, op_MAPI_QueryRows = 0x15, op_MAPI_GetRowCount = 0x17, op_MAPI_SeekRow = 0x18, op_MAPI_SeekRowBookmark = 0x19, op_MAPI_SeekRowApprox = 0x1a, op_MAPI_CreateBookmark = 0x1b, op_MAPI_CreateFolder = 0x1c, op_MAPI_DeleteFolder = 0x1d, op_MAPI_DeleteMessages = 0x1e, op_MAPI_GetMessageStatus = 0x1f, op_MAPI_SetMessageStatus = 0x20, op_MAPI_GetAttachmentTable = 0x21, op_MAPI_OpenAttach = 0x22, op_MAPI_CreateAttach = 0x23, op_MAPI_DeleteAttach = 0x24, op_MAPI_SaveChanges = 0x25, op_MAPI_SetReceiveFolder = 0x26, op_MAPI_GetReceiveFolder = 0x27, op_MAPI_Advise = 0x29, op_MAPI_Notify = 0x2a, op_MAPI_OpenStream = 0x2b, op_MAPI_ReadStream = 0x2c, op_MAPI_WriteStream = 0x2d, op_MAPI_SetSearchCriteria = 0x30, op_MAPI_GetSearchCriteria = 0x31, op_MAPI_SubmitMessage = 0x32, op_MAPI_CopyMessages = 0x33, op_MAPI_QueryColumns = 0x37, op_MAPI_GetTable = 0x3e, op_MAPI_ModifyTable = 0x40, op_MAPI_FindRow = 0x4f, op_MAPI_AddressTypes = 0x49, op_MAPI_GetNamesFromIDs = 0x55, op_MAPI_GetIDsFromNames = 0x56, op_MAPI_EmptyFolder = 0x58, op_MAPI_QueryNamesFromIDs = 0x5f, op_MAPI_GetReceiveFolderTable = 0x68, op_MAPI_OpenMsgStore = 0xfe } MAPI_OPNUM; typedef struct { uint32 dwLowDateTime; uint32 dwHighDateTime; } FILETIME; // typedef [noprint,flag(NDR_NOALIGN)] struct { // uint16 cb; // [flag(NDR_BUFFERS)]uint8 lpb[cb]; // } SBinary_short; typedef struct { uint32 cValues; uint32 lpl[cValues]; } MV_LONG_STRUCT; typedef struct { astring lppszA; } LPSTR; typedef struct { uint32 cValues; LPSTR strings[cValues]; } SLPSTRArray; // typedef struct { // uint32 cValues; // SBinary_short bin[cValues]; // } SBinaryArray; typedef struct { uint32 cValues; GUID lpguid[cValues]; } SGuidArray; 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; typedef [switch_type(property_types),flag(NDR_NOALIGN)] union { [case(PT_I2)] uint16 i; [case(PT_LONG)] uint32 l; [case(PT_DOUBLE)] dlong dbl; [case(PT_ERROR)] uint32 err; [case(PT_BOOLEAN)] uint8 b; [case(PT_I8)] dlong d; [case(PT_STRING8)] astring lpszA; [case(PT_UNICODE)] nstring lpszW; [case(PT_SYSTIME)] FILETIME ft; [case(PT_CLSID)] GUID lpguid; // [case(PT_BINARY)] SBinary_short bin; // [case(0xFB)] SBinary_short bin; // [case(PT_MV_LONG)] MV_LONG_STRUCT MVl; // [case(PT_MV_STRING8)] SLPSTRArray MVszA; // [case(PT_MV_CLSID)] SGuidArray MVguid; // [case(PT_MV_BINARY)] SBinaryArray MVbin; } SPropValue_CTR; typedef [public,flag(NDR_NOALIGN)] struct { MAPITAGS ulPropTag; [switch_is(ulPropTag & 0xFFFF)] SPropValue_CTR value; } SPropValue; typedef [flag(NDR_NOALIGN)] struct { uint16 cValues; [flag(NDR_REMAINING)]SPropValue lpProps[cValues]; } SPropValue_array; typedef [flag(NDR_NOALIGN)] struct { uint16 cValues; MAPITAGS aulPropTag[cValues]; } SPropTagArray; typedef [enum8bit, flag(NDR_PAHEX)] enum { ROW_ADD = 0x1, ROW_MODIFY = 0x2, ROW_REMOVE = 0x4 } ulRowFlags; typedef [flag(NDR_NOALIGN)] struct { ulRowFlags ulRowFlags; // SPropValue_array lpProps; } SRow; typedef [flag(NDR_NOALIGN)] struct { uint8 padding; uint16 cEntries; SRow aEntries[cEntries]; } SRowList; /**************************/ /* EcDoRpc Function 0x1 */ typedef [nopush,nopull,flag(NDR_NOALIGN)] struct { } Release_req; typedef [nopush,nopull,flag(NDR_NOALIGN)] struct { } Release_repl; /**************************/ /* EcDoRpc Function 0x2 */ typedef [flag(NDR_NOALIGN)] struct { uint8 handle_idx; hyper folder_id; uint8 unknown; } OpenFolder_req; typedef [flag(NDR_NOALIGN)] struct { uint16 unknown; } OpenFolder_repl; /**************************/ /* EcDoRpc Function 0x3 */ typedef [flag(NDR_NOALIGN)] struct { uint8 folder_handle_idx; uint16 max_data; hyper folder_id; uint8 message_permissions; hyper message_id; } OpenMessage_req; typedef [v1_enum, flag(NDR_PAHEX)] enum { CP_USASCII = 0x04E4, CP_UNICODE = 0x04B0, CP_JAUTODETECT = 0xC6F4, CP_KAUTODETECT = 0xC705, CP_ISO2022JPESC = 0xC42D, CP_ISO2022JPSIO = 0xC42E } CODEPAGEID; typedef [enum8bit, flag(NDR_PAHEX)] enum { MAPI_ORIG = 0x0, MAPI_TO = 0x1, MAPI_CC = 0x2, MAPI_BCC = 0x3 } ulRecipClass; /**************** EXPERIMENTAL ******************/ typedef [enum8bit, flag(NDR_PAHEX)] enum { SINGLE_RECIPIENT = 0x0, DISTRIBUTION_LIST = 0x1 } addr_type; typedef [flag(NDR_NOALIGN)]struct { uint8 organization_length; addr_type addr_type; } RecipExchange; typedef [flag(NDR_NOALIGN)] struct { } RecipSMTP; typedef [enum16bit] enum { EXCHANGE = 0x0, SMTP = 0x1 } OM_recipient_type; typedef [switch_type(OM_recipient_type),flag(NDR_NOALIGN)] union { [case(0x0)] RecipExchange EXCHANGE; [case(0xA)] RecipSMTP SMTP; [default]; } recipient_type; typedef [enum16bit] enum { DISPLAYNAME = 0x400 } OM_recipient_displayname_7bit; /* Bit 5: always UTF8 encoded */ typedef [switch_type(OM_recipient_displayname_7bit),flag(NDR_NOALIGN)] union { [case(0x400)] astring lpszA; [default]; } recipient_displayname_7bit; // /* Bit 10 */ // typedef [switch_type(recipient_email),flag(NDR_NOALIGN)] union { // [case(0x20)] astring lpszA; // [case(0x220)] nstring lpszW; // [default]; // } recipient_email; /* Bit 11 */ /* First Name = PR_GIVEN_NAME */ // typedef [switch_type(recipient_firstname),flag(NDR_NOALIGN)] union { // [case(0x10)] astring lpszA; // [case(0x210)] nstring lpszW; // [default]; // } recipient_firstname; // /* Bit 15 */ // typedef [switch_type(recipient_displayname),flag(NDR_NOALIGN)] union { // [case(0x1)] astring lpszA; // [case(0x201)] nstring lpszW; // [default]; // } recipient_displayname; typedef [flag(NDR_NOALIGN)] struct { uint16 bitmask; [switch_is(bitmask & 0xA)] recipient_type type; [switch_is(bitmask & 0x400)] recipient_displayname_7bit username; // [switch_is(bitmask & 0x210)] recipient_firstname firstname; // [switch_is(bitmask & 0x201)] recipient_displayname displayname; // [switch_is(bitmask & 0x220)] recipient_email email_address; uint16 prop_count; uint8 layout; [flag(NDR_REMAINING)] DATA_BLOB prop_values; } recipients_headers; /**************** EXPERIMENTAL *****************/ typedef [flag(NDR_NOALIGN)] struct { ulRecipClass RecipClass; CODEPAGEID codepage; [subcontext(2)] recipients_headers recipients_headers; } OpenMessage_recipients; // typedef [public, nodiscriminant]union { // [case(0x0)]; // [case(0x1)]; // [case(0x3)] astring subject; // } OpenMessage_repl_UNION; typedef [flag(NDR_NOALIGN)] struct { uint8 unknown; uint8 type_prefix; // [switch_is(type_prefix)] OpenMessage_repl_UNION prefix; // uint8 type_subject; // [switch_is(type_subject)] OpenMessage_repl_UNION subject; uint16 recipient_count; SPropTagArray SPropTagArray; // uint8 recipient_count_again; // OpenMessage_recipients recipients[recipient_count]; } OpenMessage_repl; // /**************************/ // /* EcDoRpc Function 0x4 */ // typedef [flag(NDR_NOALIGN)] struct { // uint8 handle_idx; // uint8 unknown; // } GetHierarchyTable_req; // typedef [flag(NDR_NOALIGN)] struct { // uint16 cn_rows; // uint16 unknown; // } GetHierarchyTable_repl; // /**************************/ // /* EcDoRpc Function 0x5 */ // typedef [flag(NDR_NOALIGN)] struct { // uint8 handle_idx; // uint8 unknown; // } GetContentsTable_req; // typedef [flag(NDR_NOALIGN)] struct { // uint16 cn_rows; // uint16 unknown; // } GetContentsTable_repl; // /**************************/ // /* EcDoRpc Function 0x6 */ // typedef [flag(NDR_NOALIGN)] struct { // uint8 handle_idx; // uint16 max_data; // hyper folder_id; // uint8 padding; // } CreateMessage_req; // typedef [flag(NDR_NOALIGN)] struct { // uint8 padding; // } CreateMessage_repl; // /*************************/ // /* EcDoRpc Function 0x7 */ typedef [flag(NDR_NOALIGN)] struct { uint32 unknown; uint16 prop_count; MAPITAGS properties[prop_count]; } GetProps_req; typedef [flag(NDR_NOALIGN)] struct { uint8 layout; [flag(NDR_REMAINING)] DATA_BLOB prop_data; } GetProps_repl; // /*************************/ // /* EcDoRpc Function 0x8 */ // typedef [flag(NDR_NOALIGN)] struct { // uint16 dwAlignPad; // uint16 unknown; // } GetPropsAll_req; // typedef [flag(NDR_NOALIGN)] struct { // SPropValue_array properties; // } GetPropsAll_repl; // /*************************/ // /* EcDoRpc Function 0x9 */ // typedef [flag(NDR_NOALIGN)] struct { // } GetPropList_req; // typedef [flag(NDR_NOALIGN)] struct { // uint16 count; // MAPITAGS tags[count]; // } GetPropList_repl; // /*************************/ // /* EcDoRpc Function 0xa */ // typedef [flag(NDR_NOALIGN)] struct { // [subcontext(2)] SPropValue_array values; // } SetProps_req; // typedef [flag(NDR_NOALIGN)] struct { // uint16 unknown; // } SetProps_repl; // /*************************/ // /* EcDoRpc Function 0xb */ // typedef [flag(NDR_NOALIGN)] struct { // uint16 count; // MAPITAGS tags[count]; // } DeleteProps_req; // typedef [flag(NDR_NOALIGN)] struct { // uint16 unknown; // } DeleteProps_repl; // /*************************/ // /* EcDoRpc Function 0xc */ // typedef [flag(NDR_NOALIGN)] struct { // uint8 handle_idx; // uint8 prop_nb; // } SaveChangesMessage_req; // typedef [flag(NDR_NOALIGN)] struct { // uint8 unknown; // hyper message_id; // } SaveChangesMessage_repl; // /*************************/ // /* EcDoRpc Function 0xe */ // /* // * MODRECIP_NULL and INVALID are not part of the msdn flags // * but are added for printing support // */ // typedef [enum8bit,flag(NDR_PAHEX)] enum { // MODRECIP_NULL = 0x0, // MODRECIP_INVALID = 0x1, // MODRECIP_ADD = 0x2, // MODRECIP_MODIFY = 0x4, // MODRECIP_REMOVE = 0x8 // } modrecip; // typedef [flag(NDR_NOALIGN)]struct { // uint32 idx; // ulRecipClass RecipClass; // [subcontext(2),flag(NDR_REMAINING)] recipients_headers headers; // } recipients; // typedef [flag(NDR_NOALIGN)] struct { // uint16 prop_count; // MAPITAGS properties[prop_count]; // uint16 cValues; // recipients recipient[cValues]; // } ModifyRecipients_req; // typedef [flag(NDR_NOALIGN)] struct { // } ModifyRecipients_repl; // /*************************/ // /* EcDoRpc Function 0x11 */ // typedef [bitmap8bit] bitmap { // SUPPRESS_RECEIPT = 0x01, // CLEAR_READ_FLAG = 0x04, // MAPI_DEFERRED_ERRORS = 0x08, // GENERATE_RECEIPT_ONLY = 0x10, // CLEAR_RN_PENDING = 0x20, // CLEAR_NRN_PENDING = 0x40 // } MSGFLAG_READ; // typedef [flag(NDR_NOALIGN)] struct { // uint8 handle_idx; // MSGFLAG_READ flags; // } SetReadFlags_req; // typedef [flag(NDR_NOALIGN)] struct { // uint8 unknown; // } SetReadFlags_repl; // /*************************/ // /* EcDoRpc Function 0x12 */ // typedef [flag(NDR_NOALIGN)] struct { // uint8 unknown; // uint16 prop_count; // MAPITAGS properties[prop_count]; // } SetColumns_req; // typedef [flag(NDR_NOALIGN)] struct { // uint8 unknown; // } SetColumns_repl; // /**************************/ // /* EcDoRpc Function 0x13 */ // typedef [enum8bit, flag(NDR_PAHEX)] enum { // TBL_ASYNC = 0x1, // TBL_BATCH = 0x2 // } TBL_FLAGS; // typedef [enum8bit, flag(NDR_PAHEX)] enum { // TABLE_SORT_ASCEND = 0x0, // TABLE_SORT_COMBINE = 0x1, // TABLE_SORT_DESCEND = 0x2 // } TABLE_SORT; // typedef [public, flag(NDR_NOALIGN)] struct _SSortOrder{ // MAPITAGS ulPropTag; // TABLE_SORT ulOrder; // } SSortOrder; // typedef [public, flag(NDR_NOALIGN)] struct _SSortOrderSet { // uint16 cSorts; // uint16 cCategories; // uint16 cExpanded; // SSortOrder aSort[cSorts]; // } SSortOrderSet; // typedef [flag(NDR_NOALIGN)]struct { // uint8 unknown; // SSortOrderSet lpSortCriteria; // } SortTable_req; // typedef [flag(NDR_NOALIGN)] struct { // uint8 unknown; // } SortTable_repl; // /**************************/ // /* EcDoRpc Function 0x14 */ // typedef [flag(NDR_NOALIGN)] struct { // uint16 cRes; // SRestriction_and res[cRes]; // } SAndRestriction; // typedef [flag(NDR_NOALIGN)] struct { // uint16 cRes; // SRestriction_or res[cRes]; // } SOrRestriction; // typedef [nopull,nopush,noprint,flag(NDR_NOALIGN)] struct { // SRestriction_not *res; // } SNotRestriction; // typedef [noprint, bitmap32bit] bitmap { // FL_FULLSTRING = 0x00000, // FL_SUBSTRING = 0x00001, // FL_PREFIX = 0x00002, // FL_IGNORECASE = 0x10000, // FL_IGNORENONSPACE = 0x20000, // FL_LOOSE = 0x40000 // } fuzzyLevel; // typedef [flag(NDR_NOALIGN)] struct { // fuzzyLevel fuzzy; // MAPITAGS ulPropTag; // SPropValue lpProp; // } SContentRestriction; // typedef [enum8bit, flag(NDR_PAHEX)] enum { // BMR_EQZ = 0x0, // BMR_NEZ = 0x1 // } relMBR; // typedef [flag(NDR_NOALIGN)] struct { // relMBR relMBR; // MAPITAGS ulPropTag; // uint32 ulMask; // } SBitmaskRestriction; // typedef [enum8bit, flag(NDR_PAHEX)] enum { // RELOP_LT = 0x0, /* < */ // RELOP_LE = 0x1, /* <= */ // RELOP_GT = 0x2, /* > */ // RELOP_GE = 0x3, /* >= */ // RELOP_EQ = 0x4, /* == */ // RELOP_NE = 0x5, /* != */ // RELOP_RE = 0x6 /* LIKE (Regular expression) */ // } CompareRelop; // typedef [flag(NDR_NOALIGN)] struct { // CompareRelop relop; // MAPITAGS ulPropTag; // uint32 size; // } SSizeRestriction; // typedef [flag(NDR_NOALIGN)] struct { // uint8 relop; // MAPITAGS ulPropTag; // SPropValue lpProp; // } SPropertyRestriction; // typedef [flag(NDR_NOALIGN)] struct { // CompareRelop relop; // MAPITAGS ulPropTag1; // MAPITAGS ulPropTag2; // } SCompareProps; // typedef [flag(NDR_NOALIGN)] struct { // MAPITAGS ulPropTag; // } SExistRestriction; // typedef [flag(NDR_NOALIGN)] struct { // MAPITAGS ulSubObject; // SRestriction_sub res[ulSubObject - ulSubObject + 1]; /* nasty hack - generates fake pointer */ // } SSubRestriction; // typedef [flag(NDR_NOALIGN)] struct { // uint8 cValues; // uint16 cRes; // uint16 unknown; // SRestriction_comment res[cRes]; // SPropValue lpProp[cValues]; // } SCommentRestriction; // typedef [nodiscriminant] 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)] SCompareProps resCompareProps; // [case(RES_BITMASK)] SBitmaskRestriction resBitmask; // [case(RES_SIZE)] SSizeRestriction resSize; // [case(RES_EXIST)] SExistRestriction resExist; // [case(RES_SUBRESTRICTION)] SSubRestriction resSub; // [case(RES_COMMENT)] SCommentRestriction resComment; // } SRestriction_CTR; // typedef [flag(NDR_NOALIGN)] struct { // uint8 rt; // [switch_is(rt)] SRestriction_CTR res; // } SRestriction; // typedef [public,flag(NDR_NOALIGN)] struct _SRestriction { // uint8 rt; // [switch_is(rt)] SRestriction_CTR res; // } SRestriction_and; // typedef [public,flag(NDR_NOALIGN)] struct _SRestriction { // uint8 rt; // [switch_is(rt)] SRestriction_CTR res; // } SRestriction_or; // typedef [public,flag(NDR_NOALIGN)] struct _SRestriction { // uint8 rt; // [switch_is(rt)] SRestriction_CTR res; // } SRestriction_not; // typedef [public,flag(NDR_NOALIGN)] struct _SRestriction { // uint8 rt; // [switch_is(rt)] SRestriction_CTR res; // } SRestriction_sub; // typedef [public,flag(NDR_NOALIGN)] struct _SRestriction { // uint8 rt; // [switch_is(rt)] SRestriction_CTR res; // } SRestriction_comment; // typedef [flag(NDR_NOALIGN)] struct { // uint8 handle_idx; // [subcontext(2)] SRestriction restrictions; // } Restrict_req; // typedef [flag(NDR_NOALIGN)] struct { // uint8 unknown; // } Restrict_repl; // /**************************/ // /* EcDoRpc Function 0x15 */ // typedef [enum8bit] enum { // TBL_ADVANCE = 0x0, // TBL_NOADVANCE = 0x1 // } tbl_advance; // typedef [flag(NDR_NOALIGN)] struct { // tbl_advance flag_advance; // uint8 layout; // uint16 row_count; // } QueryRows_req; // typedef [nopull,flag(NDR_NOALIGN)] struct { // uint8 unknown; // uint16 results_count; // uint8 layout; // [flag(NDR_REMAINING)]DATA_BLOB rows; // } QueryRows_repl; // /**************************/ // /* EcDoRpc Function 0x17 */ // typedef [flag(NDR_NOALIGN)] struct { // } GetRowCount_req; // typedef [flag(NDR_NOALIGN)] struct { // uint32 unknown; // uint32 count; // } GetRowCount_repl; // /**************************/ // /* EcDoRpc Function 0x18 */ // typedef [enum8bit] enum { // BOOKMARK_BEGINNING = 0x0, // BOOKMARK_CURRENT = 0x1, // BOOKMARK_END = 0x2, // BOOKMARK_USER = 0x3 // } BOOKMARK; // typedef [flag(NDR_NOALIGN)] struct { // BOOKMARK origin; // int32 offset; // uint8 unknown_1; // } SeekRow_req; // typedef [flag(NDR_NOALIGN)] struct { // uint32 row; // uint8 unknown; // } SeekRow_repl; // /**************************/ // /* EcDoRpc Function 0x19 */ // typedef [flag(NDR_NOALIGN)] struct { // SBinary_short bookmark; // uint32 offset; // uint8 unknown; // } SeekRowBookmark_req; // typedef [flag(NDR_NOALIGN)] struct { // uint16 unknown; // uint32 row; // } SeekRowBookmark_repl; // /**************************/ // /* EcDoRpc Function 0x1a */ // typedef [flag(NDR_NOALIGN)] struct { // uint32 ulNumerator; // uint32 ulDenominator; // } SeekRowApprox_req; // typedef [flag(NDR_NOALIGN)] struct { // } SeekRowApprox_repl; // /**************************/ // /* EcDoRpc Function 0x1b */ // typedef [flag(NDR_NOALIGN)] struct { // } CreateBookmark_req; // typedef [flag(NDR_NOALIGN)] struct { // SBinary_short bookmark; // } CreateBookmark_repl; // /**************************/ // /* EcDoRpc Function 0x1c */ // typedef [enum8bit] enum { // FOLDER_GENERIC = 0x1, // FOLDER_SEARCH = 0x2 // } FOLDER_TYPE; // typedef [enum8bit] enum { // MAPI_FOLDER_ANSI = 0x0, // MAPI_FOLDER_UNICODE = 0x1 // } FOLDER_STRING; // typedef [nodiscriminant, flag(NDR_NOALIGN)] union { // [case(MAPI_FOLDER_ANSI)] astring lpszA; // [case(MAPI_FOLDER_UNICODE)] nstring lpszW; // } LPTSTR; // typedef [enum16bit] enum { // NONE = 0x0000, // OPEN_IF_EXISTS = 0x0001 // } FOLDER_FLAGS; // typedef [flag(NDR_NOALIGN)] struct { // uint8 handle_idx; // FOLDER_TYPE ulFolderType; // FOLDER_STRING ulType; // FOLDER_FLAGS ulFlags; // [switch_is(ulType)] LPTSTR FolderName; // [switch_is(ulType)] LPTSTR FolderComment; // } CreateFolder_req; // typedef [flag(NDR_NOALIGN)] struct { // hyper folder_id; // uint8 unknown; // } CreateFolder_repl; // /**************************/ // /* EcDoRpc Function 0x1d */ // typedef [flag(NDR_NOALIGN)] struct { // uint8 flags; // hyper folder_id; // } DeleteFolder_req; // typedef [flag(NDR_NOALIGN)] struct { // uint8 unknown; // } DeleteFolder_repl; // /**************************/ // /* EcDoRpc Function 0x1e */ // typedef [flag(NDR_NOALIGN)] struct { // uint16 flags; // uint16 cn_ids; // hyper message_ids[cn_ids]; // } DeleteMessages_req; // typedef [flag(NDR_NOALIGN)] struct { // uint8 align_pad; // } DeleteMessages_repl; // /**************************/ // /* EcDoRpc Function 0x1f */ // typedef [flag(NDR_NOALIGN)] struct { // hyper msgid; // } GetMessageStatus_req; // /**************************/ // /* EcDoRpc Function 0x20 */ // typedef [bitmap32bit] bitmap { // MSGSTATUS_HIGHLIGHTED = 0x1, // MSGSTATUS_TAGGED = 0x2, // MSGSTATUS_HIDDEN = 0x4, // MSGSTATUS_DELMARKED = 0x8, // MSGSTATUS_REMOTE_DOWNLOAD = 0x1000, // MSGSTATUS_REMOTE_DELETE = 0x2000 // } ulMessageStatus; // typedef [flag(NDR_NOALIGN)] struct { // hyper msgid; // uint32 ulNewStatus; // ulMessageStatus ulNewStatusMask; // } SetMessageStatus_req; // typedef [flag(NDR_NOALIGN)] struct { // ulMessageStatus ulOldStatus; // } SetMessageStatus_repl; // /**************************/ // /* EcDoRpc Function 0x21 */ // typedef [flag(NDR_NOALIGN)] struct { // uint8 handle_idx; // uint8 unknown; // } GetAttachmentTable_req; // typedef [flag(NDR_NOALIGN)] struct { // } GetAttachmentTable_repl; // /*************************/ // /* EcDoRpc Function 0x22 */ // typedef [flag(NDR_NOALIGN)] struct { // uint8 handle_idx; // uint8 unknown; // uint32 num_attach; // } OpenAttach_req; // typedef [flag(NDR_NOALIGN)] struct { // } OpenAttach_repl; // /*************************/ // /* EcDoRpc Function 0x23 */ // typedef [flag(NDR_NOALIGN)] struct { // uint8 handle_idx; // } CreateAttach_req; // typedef [flag(NDR_NOALIGN)] struct { // uint32 unknown; // } CreateAttach_repl; // /*************************/ // /* EcDoRpc Function 0x24 */ // typedef [flag(NDR_NOALIGN)] struct { // uint32 num_attach; // } DeleteAttach_req; // typedef [flag(NDR_NOALIGN)] struct { // } DeleteAttach_repl; // /*************************/ // /* EcDoRpc Function 0x25 */ // typedef [flag(NDR_NOALIGN)] struct { // uint8 handle_idx; // uint8 ulFlags; // } SaveChanges_req; // typedef [flag(NDR_NOALIGN)] struct { // } SaveChanges_repl; // /*************************/ // /* EcDoRpc Function 0x26 */ // typedef [flag(NDR_NOALIGN)] struct { // hyper fid; // astring lpszMessageClass; // } SetReceiveFolder_req; // typedef [flag(NDR_NOALIGN)] struct { // } SetReceiveFolder_repl; // /*************************/ // /* EcDoRpc Function 0x27 */ // typedef [flag(NDR_NOALIGN)] struct { // uint8 unknown; // } GetReceiveFolder_req; // typedef [flag(NDR_NOALIGN)] struct { // hyper folder_id; // } GetReceiveFolder_repl; // /*************************/ // /* EcDoRpc Function 0x29 */ typedef [bitmap16bit] bitmap { fnevCriticalError = 0x00000001, fnevNewMail = 0x00000002, fnevObjectCreated = 0x00000004, fnevObjectDeleted = 0x00000008, fnevObjectModified = 0x00000010, fnevObjectMoved = 0x00000020, fnevObjectCopied = 0x00000040, fnevSearchComplete = 0x00000080, fnevTableModified = 0x00000100, fnevStatusObjectModified= 0x00000200, fnevReservedForMapi = 0x40000000, fnevExtended = 0x80000000 } ulEventType; // typedef struct { // hyper entryid[2]; // } notif_entryid; // typedef [nodiscriminant] union { // [case (0x0)] notif_entryid entryids; // [case (0x1)]; // } notification_data; // typedef [flag(NDR_NOALIGN)] struct { // uint8 handle_idx; // ulEventType notification_type; // uint8 layout; // [switch_is(layout)] notification_data u; // } Advise_req; // typedef [flag(NDR_NOALIGN)] struct { // } Advise_repl; // /*************************/ // /* EcDoRpc Function 0x2a */ // /******************** EXPERIMENTAL *********************/ // typedef [bitmap32bit] bitmap { // MSGFLAG_READ = 0x1, // MSGFLAG_UNMODIFIED = 0x2, // MSGFLAG_SUBMIT = 0x4, // MSGFLAG_UNSENT = 0x8, // MSGFLAG_HASATTACH = 0x10, // MSGFLAG_FROMME = 0x20, // MSGFLAG_ASSOCIATED = 0x40, // MSGFLAG_RESEND = 0x80, // MSGFLAG_RN_PENDING = 0x100, // MSGFLAG_NRN_PENDING = 0x200 // } MsgFlags; // typedef [flag(NDR_NOALIGN)] struct { // uint8 type; // hyper lpParentID; // hyper lpEntryID; // MsgFlags MsgFlags; // uint8 unknown; // astring lpszMessageClass; // uint8 unknown2[3]; // } NEWMAIL_NOTIFICATION; // typedef [flag(NDR_NOALIGN)] struct { // SPropTagArray lpPropTagArray; // uint32 msg_count;//fixme // uint8 unknown[3]; // } obj_change; // typedef [flag(NDR_NOALIGN)] struct { // SPropValue_array properties; // uint8 unknown[3]; // } obj_update; // typedef [flag(NDR_NOALIGN)] struct { // SPropTagArray lpPropTagArray; // uint32 row_idx; // uint32 unread_count; // } obj_received; // typedef [flag(NDR_NOALIGN)] struct { // hyper lpEntryID; // SPropTagArray lpPropTagArray; // } obj_created; // typedef [flag(NDR_NOALIGN),nodiscriminant] union { // [case(0x0)] obj_change change; // [case(0x10)] obj_change change; // [case(0x20)] obj_update update; // [case(0x30)] obj_received received; // [case(0x80)] obj_created created; // [default] [flag(NDR_REMAINING)]DATA_BLOB blob; // } OBJECT_TYPE; // typedef [flag(NDR_NOALIGN)] struct { // uint8 type; // hyper lpParentID; // [switch_is(type)]OBJECT_TYPE object_type; // } OBJECT_NOTIFICATION; // typedef [nodiscriminant] union { // [case(fnevNewMail)] NEWMAIL_NOTIFICATION newmail; // [case(fnevObjectCreated)] OBJECT_NOTIFICATION obj; // [default][flag(NDR_REMAINING)] DATA_BLOB data; // } NOTIFICATION; // /******************** EXPERIMENTAL *********************/ // typedef [flag(NDR_NOALIGN)] struct { // uint8 unknown[5]; // uint8 ulEventType; // [switch_is(ulEventType)]NOTIFICATION info; // } Notify_repl; // /*************************/ // /* EcDoRpc Function 0x2b */ // typedef [flag(NDR_NOALIGN)] struct { // uint8 stream_handle_idx; // MAPITAGS prop; // uint8 access_flags; // } OpenStream_req; // typedef [flag(NDR_NOALIGN)] struct { // uint32 length; // } OpenStream_repl; // /*************************/ // /* EcDoRpc Function 0x2c */ // typedef [flag(NDR_NOALIGN)] struct { // uint16 size; // } ReadStream_req; // typedef [flag(NDR_ALIGN2)] struct { // [subcontext(2), flag(NDR_REMAINING)] DATA_BLOB data; // } ReadStream_repl; // /*************************/ // /* EcDoRpc Function 0x2d */ // typedef [flag(NDR_NOALIGN)] struct { // [subcontext(2), flag(NDR_REMAINING)] DATA_BLOB data; // } WriteStream_req; // typedef [flag(NDR_NOALIGN)] struct { // uint16 size; // } WriteStream_repl; // /*************************/ // /* EcDoRpc Function 0x30 */ // typedef [bitmap32bit, flag(NDR_PAHEX)] bitmap { // STOP_SEARCH = 0x1, // RESTART_SEARCH = 0x2, // RECURSIVE_SEARCH = 0x4, // SHALLOW_SEARCH = 0x8, // FOREGROUND_SEARCH = 0x10, // BACKGROUND_SEARCH = 0x20 // } ulSearchFlags; // typedef [flag(NDR_NOALIGN)] struct { // [subcontext(2)] SRestriction res; // uint16 count; // hyper lpContainerList[count]; // ulSearchFlags ulSearchFlags; // } SetSearchCriteria_req; // typedef [flag(NDR_NOALIGN)] struct { // } SetSearchCriteria_repl; // /*************************/ // /* EcDoRpc Function 0x31 */ // typedef [flag(NDR_NOALIGN)] struct { // uint8 unknown[3]; // } GetSearchCriteria_req; // typedef [flag(NDR_NOALIGN)] struct { // [subcontext(2)] SRestriction res; // uint8 unknown; // uint16 count; // hyper lpContainerList[count]; // ulSearchFlags ulSearchFlags; // } GetSearchCriteria_repl; // /*************************/ // /* EcDoRpc Function 0x32 */ // typedef [flag(NDR_NOALIGN)] struct { // uint8 unknown; // } SubmitMessage_req; // typedef [flag(NDR_NOALIGN)] struct { // // uint8 unknown[3]; // } SubmitMessage_repl; // /*************************/ // /* EcDoRpc Function 0x33 */ // typedef [flag(NDR_NOALIGN)] struct { // uint8 handle_idx; // uint16 count; // hyper message_id[count]; // uint16 row_nb; // } CopyMessages_req; // typedef [flag(NDR_NOALIGN)] struct { // uint8 unknown; // } CopyMessages_repl; // /*************************/ // /* EcDoRpc Function 0x37 */ // typedef [flag(NDR_NOALIGN)] struct { // } QueryColumns_req; // typedef [flag(NDR_NOALIGN)] struct { // uint16 count; // MAPITAGS tags[count]; // } QueryColumns_repl; // /*************************/ // /* EcDoRpc Function 0x3e */ // typedef [flag(NDR_NOALIGN)] struct { // uint8 handle_idx; // uint8 padding; // } GetTable_req; // typedef [flag(NDR_NOALIGN)] struct { // } GetTable_repl; // /*************************/ // /* EcDoRpc Function 0x40 */ // typedef [flag(NDR_NOALIGN)] struct { // SRowList rowList; // } ModifyTable_req; // typedef [flag(NDR_NOALIGN)] struct { // [flag(NDR_REMAINING)] DATA_BLOB remaining; // } ModifyTable_repl; // /*************************/ // /* EcDoRpc Function 0x49 */ // typedef [flag(NDR_NOALIGN)] struct { // } AddressTypes_req; // typedef [flag(NDR_NOALIGN)] struct { // uint16 cValues; // uint16 size; // LPSTR transport[cValues]; // } AddressTypes_repl; // /**************************/ // /* EcDoRpc Function 0x4f */ // typedef [enum8bit] enum { // DIR_FORWARD = 0x0, // DIR_BACKWARD = 0x1 // } FindRow_ulFlags; // typedef [flag(NDR_NOALIGN)] struct { // FindRow_ulFlags ulFlags; // [subcontext(2)] SRestriction res; // BOOKMARK origin; // SBinary_short bookmark; // } FindRow_req; // typedef [flag(NDR_NOALIGN)] struct { // uint16 unknown; // uint8 layout; // [flag(NDR_NOALIGN)] DATA_BLOB row; // } FindRow_repl; // /*************************/ // /* EcDoRpc Function 0x55 */ // typedef [enum8bit] enum { // MNID_ID = 0, // MNID_STRING = 1 // } ulKind; // typedef struct { // uint8 length; // nstring lpwstrName; // } LPWSTR; // typedef [nodiscriminant] union { // [case(MNID_ID)] uint32 lid; // [case(MNID_STRING)] LPWSTR lpwstr; // } Kind; // typedef [flag(NDR_NOALIGN)] struct { // ulKind ulKind; // GUID lpguid; // [switch_is(ulKind)] Kind kind; // } MAPINAMEID; // typedef [flag(NDR_NOALIGN)] struct { // MAPITAGS ulPropTag; // } GetNamesFromIDs_req; // typedef [flag(NDR_NOALIGN)] struct { // uint16 count; // MAPINAMEID nameid[count]; // } GetNamesFromIDs_repl; // /*************************/ // /* EcDoRpc Function 0x56 */ // typedef [flag(NDR_NOALIGN)] struct { // uint8 ulFlags; // uint16 count; // MAPINAMEID nameid[count]; // } GetIDsFromNames_req; // typedef [flag(NDR_NOALIGN)] struct { // uint16 count; // uint16 propID[count]; // } GetIDsFromNames_repl; // /*************************/ // /* EcDoRpc Function 0x58 */ // typedef [flag(NDR_NOALIGN)] struct { // uint16 unknown; // } EmptyFolder_req; // typedef [flag(NDR_NOALIGN)] struct { // uint8 unknown; // } EmptyFolder_repl; // /*************************/ // /* EcDoRpc Function 0x5f */ // typedef [flag(NDR_NOALIGN)] struct { // uint16 propID; // } QueryNamesFromIDs_req; // typedef [flag(NDR_NOALIGN)] struct { // uint16 count; // uint16 propID[count]; // MAPINAMEID nameid[count]; // } QueryNamesFromIDs_repl; // /*************************/ // /* EcDoRpc Function 0x68 */ // typedef [flag(NDR_NOALIGN)] struct { // uint8 unknown; // hyper fid; // astring lpszMessageClass; // FILETIME modiftime; // } ReceiveFolder; // typedef [flag(NDR_NOALIGN)] struct { // } GetReceiveFolderTable_req; // typedef [flag(NDR_NOALIGN)] struct { // uint32 cValues; // ReceiveFolder entries[cValues]; // } GetReceiveFolderTable_repl; /*************************/ /* EcDoRpc Function 0xFE */ typedef [flag(NDR_NOALIGN)] struct { uint32 codepage; uint32 padding; uint8 row; uint16 mailbox_str_size; [string,charset(DOS)] uint8 *mailbox; } OpenMsgStore_req; /* ** 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; // typedef [flag(NDR_NOALIGN)] struct { // hyper folder_id[13]; // uint16 unknown; // MAPIUID entryid; // MAPIUID msgstore; // } store_pf; // typedef [flag(NDR_NOALIGN)] struct { // hyper folder_id[13]; // uint8 unknown3; // MAPIUID entryid; // uint16 default_store; // MAPIUID msgstore; // FILETIME ts_access; // astring creation_date; // uint8 terminator; // uint16 unknown4; // } store_mailbox; // typedef [switch_type(uint8)] union { // [case(0x0)] store_pf store_pf; // [case(0x1)] store_mailbox store_mailbox; // } store_type; // typedef [enum8bit,flag(NDR_NOALIGN)] enum { // PROVIDER_TYPE_PF = 0x0, // PROVIDER_TYPE_MAILBOX = 0x1 // } PROVIDER_TYPE; // typedef [flag(NDR_NOALIGN)] struct { // PROVIDER_TYPE PR_OBJECT_TYPE; // [switch_is(PR_OBJECT_TYPE)] store_type type; // } OpenMsgStore_repl; typedef [switch_type(MAPI_OPNUM)] union { [case(op_MAPI_Release)] Release_req mapi_Release; [case(op_MAPI_OpenFolder)] OpenFolder_req mapi_OpenFolder; // [case(op_MAPI_OpenMessage)] OpenMessage_req mapi_OpenMessage; // [case(op_MAPI_GetHierarchyTable)] GetHierarchyTable_req mapi_GetHierarchyTable; // [case(op_MAPI_GetContentsTable)] GetContentsTable_req mapi_GetContentsTable; // [case(op_MAPI_CreateMessage)] CreateMessage_req mapi_CreateMessage; [case(op_MAPI_GetProps)] GetProps_req mapi_GetProps; // [case(op_MAPI_GetPropsAll)] GetPropsAll_req mapi_GetPropsAll; // [case(op_MAPI_GetPropList)] GetPropList_req mapi_GetPropList; // [case(op_MAPI_SetProps)] SetProps_req mapi_SetProps; // [case(op_MAPI_DeleteProps)] DeleteProps_req mapi_DeleteProps; // [case(op_MAPI_SaveChangesMessage)] SaveChangesMessage_req mapi_SaveChangesMessage; // [case(op_MAPI_SetReadFlags)] SetReadFlags_req mapi_SetReadFlags; // [case(op_MAPI_SetColumns)] SetColumns_req mapi_SetColumns; // [case(op_MAPI_SortTable)] SortTable_req mapi_SortTable; // [case(op_MAPI_Restrict)] Restrict_req mapi_Restrict; // [case(op_MAPI_ModifyRecipients)] ModifyRecipients_req mapi_ModifyRecipients; // [case(op_MAPI_QueryRows)] QueryRows_req mapi_QueryRows; // [case(op_MAPI_GetRowCount)] GetRowCount_req mapi_GetRowCount; // [case(op_MAPI_SeekRow)] SeekRow_req mapi_SeekRow; // [case(op_MAPI_SeekRowBookmark)] SeekRowBookmark_req mapi_SeekRowBookmark; // [case(op_MAPI_SeekRowApprox)] SeekRowApprox_req mapi_SeekRowApprox; // [case(op_MAPI_CreateBookmark)] CreateBookmark_req mapi_CreateBookmark; // [case(op_MAPI_CreateFolder)] CreateFolder_req mapi_CreateFolder; // [case(op_MAPI_DeleteFolder)] DeleteFolder_req mapi_DeleteFolder; // [case(op_MAPI_DeleteMessages)] DeleteMessages_req mapi_DeleteMessages; // [case(op_MAPI_GetMessageStatus)] GetMessageStatus_req mapi_GetMessageStatus; // [case(op_MAPI_SetMessageStatus)] SetMessageStatus_req mapi_SetMessageStatus; // [case(op_MAPI_GetAttachmentTable)] GetAttachmentTable_req mapi_GetAttachmentTable; // [case(op_MAPI_OpenAttach)] OpenAttach_req mapi_OpenAttach; // [case(op_MAPI_CreateAttach)] CreateAttach_req mapi_CreateAttach; // [case(op_MAPI_DeleteAttach)] DeleteAttach_req mapi_DeleteAttach; // [case(op_MAPI_SaveChanges)] SaveChanges_req mapi_SaveChanges; // [case(op_MAPI_SetReceiveFolder)] SetReceiveFolder_req mapi_SetReceiveFolder; // [case(op_MAPI_GetReceiveFolder)] GetReceiveFolder_req mapi_GetReceiveFolder; // [case(op_MAPI_Advise)] Advise_req mapi_Advise; // [case(op_MAPI_OpenStream)] OpenStream_req mapi_OpenStream; // [case(op_MAPI_ReadStream)] ReadStream_req mapi_ReadStream; // [case(op_MAPI_WriteStream)] WriteStream_req mapi_WriteStream; // [case(op_MAPI_SetSearchCriteria)] SetSearchCriteria_req mapi_SetSearchCriteria; // [case(op_MAPI_GetSearchCriteria)] GetSearchCriteria_req mapi_GetSearchCriteria; // [case(op_MAPI_SubmitMessage)] SubmitMessage_req mapi_SubmitMessage; // [case(op_MAPI_CopyMessages)] CopyMessages_req mapi_CopyMessages; // [case(op_MAPI_QueryColumns)] QueryColumns_req mapi_QueryColumns; // [case(op_MAPI_GetTable)] GetTable_req mapi_GetTable; // [case(op_MAPI_ModifyTable)] ModifyTable_req mapi_ModifyTable; // [case(op_MAPI_AddressTypes)] AddressTypes_req mapi_AddressTypes; // [case(op_MAPI_FindRow)] FindRow_req mapi_FindRow; // [case(op_MAPI_GetNamesFromIDs)] GetNamesFromIDs_req mapi_GetNamesFromIDs; // [case(op_MAPI_GetIDsFromNames)] GetIDsFromNames_req mapi_GetIDsFromNames; // [case(op_MAPI_EmptyFolder)] EmptyFolder_req mapi_EmptyFolder; // [case(op_MAPI_QueryNamesFromIDs)] QueryNamesFromIDs_req mapi_QueryNamesFromIDs; // [case(op_MAPI_GetReceiveFolderTable)] GetReceiveFolderTable_req mapi_GetReceiveFolderTable; [case(op_MAPI_OpenMsgStore)] OpenMsgStore_req mapi_OpenMsgStore; } EcDoRpc_MAPI_REQ_UNION; typedef [public, switch_type(MAPI_OPNUM)] union { [case(op_MAPI_Release)] Release_repl mapi_Release; [case(op_MAPI_OpenFolder)] OpenFolder_repl mapi_OpenFolder; // [case(op_MAPI_OpenMessage)] OpenMessage_repl mapi_OpenMessage; // [case(op_MAPI_GetHierarchyTable)] GetHierarchyTable_repl mapi_GetHierarchyTable; // [case(op_MAPI_GetContentsTable)] GetContentsTable_repl mapi_GetContentsTable; // [case(op_MAPI_CreateMessage)] CreateMessage_repl mapi_CreateMessage; [case(op_MAPI_GetProps)] GetProps_repl mapi_GetProps; // [case(op_MAPI_GetPropsAll)] GetPropsAll_repl mapi_GetPropsAll; // [case(op_MAPI_GetPropList)] GetPropList_repl mapi_GetPropList; // [case(op_MAPI_SetProps)] SetProps_repl mapi_SetProps; // [case(op_MAPI_DeleteProps)] DeleteProps_repl mapi_DeleteProps; // [case(op_MAPI_SaveChangesMessage)] SaveChangesMessage_repl mapi_SaveChangesMessage; // [case(op_MAPI_ModifyRecipients)] ModifyRecipients_repl mapi_ModifyRecipients; // [case(op_MAPI_SetReadFlags)] SetReadFlags_repl mapi_SetReadFlags; // [case(op_MAPI_SetColumns)] SetColumns_repl mapi_SetColumns; // [case(op_MAPI_SortTable)] SortTable_repl mapi_SortTable; // [case(op_MAPI_Restrict)] Restrict_repl mapi_Restrict; // [case(op_MAPI_QueryRows)] QueryRows_repl mapi_QueryRows; // [case(op_MAPI_GetRowCount)] GetRowCount_repl mapi_GetRowCount; // [case(op_MAPI_SeekRow)] SeekRow_repl mapi_SeekRow; // [case(op_MAPI_SeekRowBookmark)] SeekRowBookmark_repl mapi_SeekRowBookmark; // [case(op_MAPI_SeekRowApprox)] SeekRowApprox_repl mapi_SeekRowApprox; // [case(op_MAPI_CreateBookmark)] CreateBookmark_repl mapi_CreateBookmark; // [case(op_MAPI_CreateFolder)] CreateFolder_repl mapi_CreateFolder; // [case(op_MAPI_DeleteFolder)] DeleteFolder_repl mapi_DeleteFolder; // [case(op_MAPI_DeleteMessages)] DeleteMessages_repl mapi_DeleteMessages; // [case(op_MAPI_SetMessageStatus)] SetMessageStatus_repl mapi_SetMessageStatus; // [case(op_MAPI_GetAttachmentTable)] GetAttachmentTable_repl mapi_GetAttachmentTable; // [case(op_MAPI_OpenAttach)] OpenAttach_repl mapi_OpenAttach; // [case(op_MAPI_CreateAttach)] CreateAttach_repl mapi_CreateAttach; // [case(op_MAPI_DeleteAttach)] DeleteAttach_repl mapi_DeleteAttach; // [case(op_MAPI_SaveChanges)] SaveChanges_repl mapi_SaveChanges; // [case(op_MAPI_SetReceiveFolder)] SetReceiveFolder_repl mapi_SetReceiveFolder; // [case(op_MAPI_GetReceiveFolder)] GetReceiveFolder_repl mapi_GetReceiveFolder; // [case(op_MAPI_Advise)] Advise_repl mapi_Advise; // [case(op_MAPI_Notify)] Notify_repl mapi_Notify; // [case(op_MAPI_OpenStream)] OpenStream_repl mapi_OpenStream; // [case(op_MAPI_ReadStream)] ReadStream_repl mapi_ReadStream; // [case(op_MAPI_WriteStream)] WriteStream_repl mapi_WriteStream; // [case(op_MAPI_SetSearchCriteria)] SetSearchCriteria_repl mapi_SetSearchCriteria; // [case(op_MAPI_GetSearchCriteria)] GetSearchCriteria_repl mapi_GetSearchCriteria; // [case(op_MAPI_SubmitMessage)] SubmitMessage_repl mapi_SubmitMessage; // [case(op_MAPI_CopyMessages)] CopyMessages_repl mapi_CopyMessages; // [case(op_MAPI_QueryColumns)] QueryColumns_repl mapi_QueryColumns; // [case(op_MAPI_GetTable)] GetTable_repl mapi_GetTable; // [case(op_MAPI_ModifyTable)] ModifyTable_repl mapi_ModifyTable; // [case(op_MAPI_AddressTypes)] AddressTypes_repl mapi_AddressTypes; // [case(op_MAPI_FindRow)] FindRow_repl mapi_FindRow; // [case(op_MAPI_GetNamesFromIDs)] GetNamesFromIDs_repl mapi_GetNamesFromIDs; // [case(op_MAPI_GetIDsFromNames)] GetIDsFromNames_repl mapi_GetIDsFromNames; // [case(op_MAPI_EmptyFolder)] EmptyFolder_repl mapi_EmptyFolder; // [case(op_MAPI_QueryNamesFromIDs)] QueryNamesFromIDs_repl mapi_QueryNamesFromIDs; // [case(op_MAPI_GetReceiveFolderTable)] GetReceiveFolderTable_repl mapi_GetReceiveFolderTable; // [case(op_MAPI_OpenMsgStore)] OpenMsgStore_repl mapi_OpenMsgStore; } EcDoRpc_MAPI_REPL_UNION; typedef [public,flag(NDR_NOALIGN)] struct { uint8 opnum; uint8 mapi_flags; uint8 handle_idx; [switch_is(opnum)] EcDoRpc_MAPI_REQ_UNION u; } EcDoRpc_MAPI_REQ; typedef [public,nopull,noprint,flag(NDR_NOALIGN)] struct { uint8 opnum; uint8 handle_idx; MAPISTATUS error_code; [switch_is(opnum)] EcDoRpc_MAPI_REPL_UNION u; } EcDoRpc_MAPI_REPL; /* Abstract way to represent MAPI content */ typedef [public,nopull,nopush,noprint] struct { uint32 mapi_len; /* whole mapi_data length */ uint16 length; /* content length */ EcDoRpc_MAPI_REQ *mapi_req; uint32 *handles; /* handles id array */ } mapi_request; typedef [public,nopull,nopush,noprint] struct { uint32 mapi_len; uint16 length; EcDoRpc_MAPI_REPL *mapi_repl; uint32 *handles; } mapi_response; [public] MAPISTATUS EcDoRpc( [in,out] policy_handle *handle, [in,out] uint32 size, [in,out] uint32 offset, [in][subcontext(4),flag(NDR_REMAINING|NDR_NOALIGN)] mapi_request *mapi_request, [out][subcontext(4),flag(NDR_REMAINING|NDR_NOALIGN)] mapi_response *mapi_response, [in,out] uint16 *length, [in] uint16 max_data ); // /*****************/ // /* Function 0x03 */ void EcGetMoreRpc(); /*****************/ /* Function 0x04 */ /* we could directly use a NOTIFKEY structure rather than a uint8 array, but this makes the IDL more robust sockaddr array is made of: - family (unsigned short in) sa_family_t - address data sa_data[14]; */ typedef struct { uint16 cb; uint8 ab[cb]; } NOTIFKEY; MAPISTATUS EcRRegisterPushNotification( [in,out] policy_handle *handle, [in] ulEventType ulEventMask, [in, size_is(notif_len)] uint8 notifkey[*], [in] uint16 notif_len, [in] uint32 unknown2, [in, size_is(sockaddr_len)] uint8 sockaddr[*], [in] uint16 sockaddr_len, [out,ref] uint32 *retval ); /*****************/ /* Function 0x05 */ MAPISTATUS EcRUnregisterPushNotification( [in,out] policy_handle *handle, [in] uint32 unknown[2] ); /*****************/ /* Function 0x06 */ void EcDummyRpc(); /*****************/ /* Function 0x07 */ void EcRGetDCName(); /*****************/ /* Function 0x08 */ void EcRNetGetDCName(); /*****************/ /* Function 0x09 */ void EcDoRpcExt(); }