Hi Murray,
Actually I have just released a couple of tools in master recently that
let you exactly extract this information:
- rpcextract to extract rpc MAPI stub data into individual
request/response files
- mapipropsdump to do the context mapping and dump the DATA_BLOB as
a structureI have planned to release a technical recipe about this next week on openchange.org, but maybe we can start the discussion on the list and you can help writing the technical recipe? Julien. On 21/12/14 17:07, Murray McCulligh wrote: > Hi all, > > I've come across an issue in MAPIProxy. It seems that if a response > buffer contains a response (such as RopFindRow) that holds PropertyRow > data, all responses after that in the buffer are not extracted into > structures and are contained within the data blob. > > Unfortunately I don't see how MAPIProxy can easily fix this since I > believe determining how much data the RopFindRow response contains > requires decoding the properties and that might require knowing the > requested order of properties set in a previous SetColumns request. > > Any ideas on how to address this would be welcome. > > Murray > > Dump of this occurring.... > > EcDoRpc: struct EcDoRpc > in: struct EcDoRpc > handle : * > handle: struct policy_handle > handle_type : 0x00000000 (0) > uuid : > 873babaf-1b2d-40eb-bcaa-33e92e80bf20 > size : 0x00007fff (32767) > offset : 0x00000000 (0) > mapi_request : * > mapi_len : 0x00000142 (322) > length : 0x0122 (290) > mapi_request: struct EcDoRpc_MAPI_REQ > opnum : 0x05 (5) > logon_id : 0x01 (1) > handle_idx : 0x00 (0) > u : union > EcDoRpc_MAPI_REQ_UNION(case 5) > mapi_GetContentsTable: struct GetContentsTable_req > handle_idx : 0x01 (1) > TableFlags : 0x02 (2) > 1: TableFlags_Associated > 0: TableFlags_Depth > 0: TableFlags_DeferredErrors > 0: TableFlags_NoNotifications > 0: TableFlags_SoftDeletes > 0: TableFlags_UseUnicode > 0: TableFlags_SuppressNotifications > mapi_request: struct EcDoRpc_MAPI_REQ > opnum : 0x12 (18) > logon_id : 0x01 (1) > handle_idx : 0x01 (1) > u : union > EcDoRpc_MAPI_REQ_UNION(case 18) > mapi_SetColumns: struct SetColumns_req > SetColumnsFlags : > SetColumns_TBL_SYNC (0) > prop_count : 0x0007 (7) > properties: ARRAY(7) > properties : > PidTagFolderId (0x67480014) > properties : PidTagMid > (0x674A0014) > properties : > PidTagInstID (0x674D0014) > properties : > PidTagInstanceNum (0x674E0003) > properties : > PidTagMessageClass (0x1A001F) > properties : > PidTagConversationTopic (0x70001F) > properties : > PidTagReportName (0x3A001F) > mapi_request: struct EcDoRpc_MAPI_REQ > opnum : 0x13 (19) > logon_id : 0x01 (1) > handle_idx : 0x01 (1) > u : union > EcDoRpc_MAPI_REQ_UNION(case 19) > mapi_SortTable: struct SortTable_req > SortTableFlags : 0x00 (0) > lpSortCriteria: struct SSortOrderSet > cSorts : 0x0001 (1) > cCategories : 0x0000 (0) > cExpanded : 0x0000 (0) > aSort: ARRAY(1) > aSort: struct SSortOrder > ulPropTag : > PidTagMessageClass (0x1A001F) > ulOrder : > TABLE_SORT_ASCEND (0x0) > mapi_request: struct EcDoRpc_MAPI_REQ > opnum : 0x4f (79) > logon_id : 0x01 (1) > handle_idx : 0x01 (1) > u : union > EcDoRpc_MAPI_REQ_UNION(case 79) > mapi_FindRow: struct FindRow_req > ulFlags : DIR_FORWARD (0) > res: struct mapi_SRestriction > rt : 0x04 (4) > res : union > mapi_SRestriction_CTR(case 4) > resProperty: struct > mapi_SPropertyRestriction > relop : 0x03 (3) > ulPropTag : > PidTagMessageClass (0x1A001F) > lpProp: struct mapi_SPropValue > ulPropTag : > PidTagMessageClass (0x1A001F) > value : > union mapi_SPropValue_CTR(case 31) > lpszW : > 'IPM.Microsoft.PendingChange.' > origin : > BOOKMARK_BEGINNING (0) > bookmark : SBinary_short cb=0 > mapi_request: struct EcDoRpc_MAPI_REQ > opnum : 0x02 (2) > logon_id : 0x01 (1) > handle_idx : 0x02 (2) > u : union > EcDoRpc_MAPI_REQ_UNION(case 2) > mapi_OpenFolder: struct OpenFolder_req > handle_idx : 0x03 (3) > folder_id : > 0x4c00000000000001 (5476377146882523137) > OpenModeFlags : > OpenModeFlags_Folder (0) > mapi_request: struct EcDoRpc_MAPI_REQ > opnum : 0x29 (41) > logon_id : 0x01 (1) > handle_idx : 0x02 (2) > u : union > EcDoRpc_MAPI_REQ_UNION(case 41) > mapi_RegisterNotification: struct > RegisterNotification_req > handle_idx : 0x04 (4) > NotificationFlags : 0x0078 (120) > 0: fnevCriticalError > 0: fnevNewMail > 0: fnevObjectCreated > 1: fnevObjectDeleted > 1: fnevObjectModified > 1: fnevObjectMoved > 1: fnevObjectCopied > 0: fnevSearchComplete > 0: fnevTableModified > 0: fnevStatusObjectModified > 0: fnevReserved > 0: fnevTbit > 0: fnevUbit > 0: fnevSbit > 0: fnevMbit > WantWholeStore : 0x00 (0) > FolderId : union > hyperbool(case 0) > ID : > 0x4c00000000000001 (5476377146882523137) > MessageId : union > hyperbool(case 0) > ID : > 0x0000000000000000 (0) > mapi_request: struct EcDoRpc_MAPI_REQ > opnum : 0x07 (7) > logon_id : 0x01 (1) > handle_idx : 0x03 (3) > u : union > EcDoRpc_MAPI_REQ_UNION(case 7) > mapi_GetProps: struct GetProps_req > PropertySizeLimit : 0x0000 (0) > WantUnicode : 0x0001 (1) > prop_count : 0x0012 (18) > properties: ARRAY(18) > properties : > PidTagParentFolderId (0x67490014) > properties : > PidTagAccess (0xFF40003) > properties : > UNKNOWN_ENUM_VALUE (0x66720102) > properties : > PidTagDefaultPostMessageClass (0x36E5001F) > properties : > UNKNOWN_ENUM_VALUE (0x36E6001F) > properties : > PidTagDisplayName (0x3001001F) > properties : > PidTagFolderType (0x36010003) > properties : > PidTagContentCount (0x36020003) > properties : > PidTagContentUnreadCount (0x36030003) > properties : > PidTagSubfolders (0x360A000B) > properties : > PidTagContainerClass (0x3613001F) > properties : > UNKNOWN_ENUM_VALUE (0x36160102) > properties : > UNKNOWN_ENUM_VALUE (0x36DE0003) > properties : > UNKNOWN_ENUM_VALUE (0x36DF0102) > properties : > UNKNOWN_ENUM_VALUE (0x36E00102) > properties : > UNKNOWN_ENUM_VALUE (0x36E10003) > properties : > PidTagExtendedFolderFlags (0x36DA0102) > properties : > UNKNOWN_ENUM_VALUE (0x672D0003) > mapi_request: struct EcDoRpc_MAPI_REQ > opnum : 0x01 (1) > logon_id : 0x01 (1) > handle_idx : 0x05 (5) > u : union > EcDoRpc_MAPI_REQ_UNION(case 1) > mapi_Release: struct Release_req > mapi_request: struct EcDoRpc_MAPI_REQ > opnum : 0x03 (3) > logon_id : 0x01 (1) > handle_idx : 0x02 (2) > u : union > EcDoRpc_MAPI_REQ_UNION(case 3) > mapi_OpenMessage: struct OpenMessage_req > handle_idx : 0x06 (6) > CodePageId : 0x0fff (4095) > FolderId : > 0x8814000000000001 (-8641281785017139199) > OpenModeFlags : BestAccess (3) > MessageId : > 0x0f19000000000001 (1087900784986685441) > mapi_request: struct EcDoRpc_MAPI_REQ > opnum : 0x2b (43) > logon_id : 0x01 (1) > handle_idx : 0x06 (6) > u : union > EcDoRpc_MAPI_REQ_UNION(case 43) > mapi_OpenStream: struct OpenStream_req > handle_idx : 0x07 (7) > PropertyTag : > PidTagRwRulesStream (0x68020102) > OpenModeFlags : > OpenStream_ReadOnly (0) > mapi_request: struct EcDoRpc_MAPI_REQ > opnum : 0x2c (44) > logon_id : 0x01 (1) > handle_idx : 0x07 (7) > u : union > EcDoRpc_MAPI_REQ_UNION(case 44) > mapi_ReadStream: struct ReadStream_req > ByteCount : 0x7c00 (31744) > MaximumByteCount : union > MaximumByteCount(case 31744) > mapi_request : (handles) number=8 > handle : 0x0000006a (106) > handle : 0xffffffff (4294967295) > handle : 0x00000047 (71) > handle : 0xffffffff (4294967295) > handle : 0xffffffff (4294967295) > handle : 0x0000005b (91) > handle : 0xffffffff (4294967295) > handle : 0xffffffff (4294967295) > length : * > length : 0x0142 (322) > max_data : 0x7fff (32767) > EcDoRpc: struct EcDoRpc > out: struct EcDoRpc > handle : * > handle: struct policy_handle > handle_type : 0x00000000 (0) > uuid : > 873babaf-1b2d-40eb-bcaa-33e92e80bf20 > size : 0x00007fff (32767) > offset : 0x00000000 (0) > mapi_response : * > mapi_response : length=571 > mapi_response: ARRAY(569) > mapi_repl: struct EcDoRpc_MAPI_REPL > opnum : 0x05 (5) > handle_idx : 0x01 (1) > error_code : MAPI_E_SUCCESS (0x0) > u : union > EcDoRpc_MAPI_REPL_UNION(case 5) > mapi_GetContentsTable: struct > GetContentsTable_repl > RowCount : 0x0000000b (11) > mapi_repl: struct EcDoRpc_MAPI_REPL > opnum : 0x12 (18) > handle_idx : 0x01 (1) > error_code : MAPI_E_SUCCESS (0x0) > u : union > EcDoRpc_MAPI_REPL_UNION(case 18) > mapi_SetColumns: struct SetColumns_repl > TableStatus : > TBLSTAT_COMPLETE (0) > mapi_repl: struct EcDoRpc_MAPI_REPL > opnum : 0x13 (19) > handle_idx : 0x01 (1) > error_code : MAPI_E_SUCCESS (0x0) > u : union > EcDoRpc_MAPI_REPL_UNION(case 19) > mapi_SortTable: struct SortTable_repl > TableStatus : > TBLSTAT_COMPLETE (0) > mapi_repl: struct EcDoRpc_MAPI_REPL > opnum : 0x4f (79) > handle_idx : 0x01 (1) > error_code : MAPI_E_SUCCESS (0x0) > u : union > EcDoRpc_MAPI_REPL_UNION(case 79) > mapi_FindRow: struct FindRow_repl > RowNoLongerVisible : 0x00 (0) > HasRowData : 0x01 (1) > row : DATA_BLOB > length=537 > [0000] 01 00 01 00 00 00 00 00 14 88 00 01 00 00 00 00 ........ > ........ > [0010] 00 19 0E 00 01 00 00 00 00 00 19 0E 00 00 00 00 ........ > ........ > [0020] 00 00 49 00 50 00 4D 00 2E 00 52 00 75 00 6C 00 ..I.P.M. > ..R.u.l. > [0030] 65 00 2E 00 4D 00 65 00 73 00 73 00 61 00 67 00 e...M.e. > s.s.a.g. > [0040] 65 00 00 00 0A 0F 01 04 80 0A 0F 01 04 80 02 03 e....... > ........ > [0050] 00 00 00 00 00 00 29 04 00 00 00 00 07 03 00 00 ......). > ........ > [0060] 00 00 01 00 01 00 00 00 00 00 14 85 00 3F 00 00 ........ > .....?.. > [0070] 00 0A 0F 01 04 80 0A 0F 01 04 80 0A 0F 01 04 80 ........ > ........ > [0080] 00 43 00 61 00 6C 00 65 00 6E 00 64 00 61 00 72 .C.a.l.e > .n.d.a.r > [0090] 00 00 00 00 01 00 00 00 00 00 00 00 00 00 00 00 ........ > ........ > [00A0] 00 00 00 00 00 49 00 50 00 46 00 2E 00 41 00 70 .....I.P > .F...A.p > [00B0] 00 70 00 6F 00 69 00 6E 00 74 00 6D 00 65 00 6E .p.o.i.n > .t.m.e.n > [00C0] 00 74 00 00 00 0A 0F 01 04 80 00 00 00 00 40 0A .t...... > ......@. > [00D0] 0F 01 04 80 0A 0F 01 04 80 0A 0F 01 04 80 00 06 ........ > ........ > [00E0] 00 01 04 00 00 10 00 0A 0F 01 04 80 03 06 00 00 ........ > ........ > [00F0] 00 00 00 01 03 4F 75 74 6C 6F 6F 6B 20 52 75 6C .....Out > look Rul > [0100] 65 73 20 4F 72 67 61 6E 69 7A 65 72 00 00 00 00 es Organ > izer.... > [0110] 00 00 2B 07 00 00 00 00 F5 00 00 00 2C 07 00 00 ..+..... > ....,... > [0120] 00 00 F5 00 80 4F 12 00 80 4F 12 00 00 00 00 00 .....O.. > .O...... > [0130] 00 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 ........ > ........ > [0140] 00 00 00 00 01 00 00 00 01 00 00 00 00 00 00 00 ........ > ........ > [0150] 01 00 80 4F 12 05 26 43 00 6C 00 65 00 61 00 72 ...O..&C > .l.e.a.r > [0160] 00 20 00 63 00 61 00 74 00 65 00 67 00 6F 00 72 . .c.a.t > .e.g.o.r > [0170] 00 69 00 65 00 73 00 20 00 6F 00 6E 00 20 00 6D .i.e.s. > .o.n. .m > [0180] 00 61 00 69 00 6C 00 20 00 28 00 72 00 65 00 63 .a.i.l. > .(.r.e.c > [0190] 00 6F 00 6D 00 6D 00 65 00 6E 00 64 00 65 00 64 .o.m.m.e > .n.d.e.d > [01A0] 00 29 00 01 00 00 00 00 00 00 00 01 00 00 00 00 .)...... > ........ > [01B0] 00 00 00 01 00 00 00 4A 00 00 00 04 00 FF FF 00 .......J > ........ > [01C0] 00 0C 00 43 52 75 6C 65 45 6C 65 6D 65 6E 74 90 ...CRule > Element. > [01D0] 01 00 00 01 00 00 00 00 00 00 00 01 00 00 00 01 ........ > ........ > [01E0] 80 64 00 00 00 01 00 00 00 00 00 00 00 01 00 00 .d...... > ........ > [01F0] 00 01 80 F6 00 00 00 00 00 00 00 01 80 52 01 00 ........ > .....R.. > [0200] 00 00 00 00 00 00 00 00 00 00 00 00 00 66 66 66 ........ > .....fff > [0210] 66 E1 5D E4 40 00 00 00 00 f.].@... . > mapi_response : (handles) number=8 > handle id : 0x0000006a (106) > handle id : 0x00000070 (112) > handle id : 0x00000047 (71) > handle id : 0x0000005a (90) > handle id : 0x00000059 (89) > handle id : 0x0000005b (91) > handle id : 0x0000005b (91) > handle id : 0x00000057 (87) > length : * > length : 0x025b (603) > result : MAPI_E_SUCCESS (0x0) > > > _______________________________________________ > devel mailing list > [email protected] > http://mailman.openchange.org/listinfo/devel -- Julien Kerihuel [email protected] OpenChange Project Founder Twitter: http://twitter.com/jkerihuel GPG Fingerprint: 0B55 783D A781 6329 108A B609 7EF6 FE11 A35F 1F79
signature.asc
Description: OpenPGP digital signature
_______________________________________________ devel mailing list [email protected] http://mailman.openchange.org/listinfo/devel
