public Parse ( Stream s ) : void | ||
s | Stream | An stream containing RopSaveChangesMessageRequest structure. |
리턴 | void |
/// <summary> /// Parse the ROPInputBuffer structure. /// </summary> /// <param name="s">A stream containing the ROPInputBuffer structure</param> public override void Parse(Stream s) { base.Parse(s); this.RopSize = ReadUshort(); List<object> ropsList = new List<object>(); List<uint> serverObjectHandleTable = new List<uint>(); List<uint> RopRemainSize = new List<uint>(); if (this.RopSize > 2) { do { int CurrentByte = s.ReadByte(); s.Position -= 1; switch ((RopIdType)CurrentByte) { // MS-OXCSTOR ROPs case RopIdType.RopLogon: RopLogonRequest RopLogonRequest = new RopLogonRequest(); RopLogonRequest.Parse(s); ropsList.Add(RopLogonRequest); DecodingContext.SessionLogonFlag = new Dictionary<int, LogonFlags>() { { MapiInspector.MAPIInspector.logonRelatedSessionID, RopLogonRequest.LogonFlags } }; DecodingContext.SessionLogId = new Dictionary<int, byte>() { { MapiInspector.MAPIInspector.logonRelatedSessionID, RopLogonRequest.LogonId } }; break; case RopIdType.RopGetReceiveFolder: RopGetReceiveFolderRequest RopGetReceiveFolderRequest = new RopGetReceiveFolderRequest(); RopGetReceiveFolderRequest.Parse(s); ropsList.Add(RopGetReceiveFolderRequest); break; case RopIdType.RopSetReceiveFolder: RopSetReceiveFolderRequest RopSetReceiveFolderRequest = new RopSetReceiveFolderRequest(); RopSetReceiveFolderRequest.Parse(s); ropsList.Add(RopSetReceiveFolderRequest); break; case RopIdType.RopGetReceiveFolderTable: RopGetReceiveFolderTableRequest RopGetReceiveFolderTableRequest = new RopGetReceiveFolderTableRequest(); RopGetReceiveFolderTableRequest.Parse(s); ropsList.Add(RopGetReceiveFolderTableRequest); break; case RopIdType.RopGetStoreState: RopGetStoreStateRequest RopGetStoreStateRequest = new RopGetStoreStateRequest(); RopGetStoreStateRequest.Parse(s); ropsList.Add(RopGetStoreStateRequest); break; case RopIdType.RopGetOwningServers: RopGetOwningServersRequest RopGetOwningServersRequest = new RopGetOwningServersRequest(); RopGetOwningServersRequest.Parse(s); ropsList.Add(RopGetOwningServersRequest); break; case RopIdType.RopPublicFolderIsGhosted: RopPublicFolderIsGhostedRequest RopPublicFolderIsGhostedRequest = new RopPublicFolderIsGhostedRequest(); RopPublicFolderIsGhostedRequest.Parse(s); ropsList.Add(RopPublicFolderIsGhostedRequest); break; case RopIdType.RopLongTermIdFromId: RopLongTermIdFromIdRequest RopLongTermIdFromIdRequest = new RopLongTermIdFromIdRequest(); RopLongTermIdFromIdRequest.Parse(s); ropsList.Add(RopLongTermIdFromIdRequest); break; case RopIdType.RopIdFromLongTermId: RopIdFromLongTermIdRequest RopIdFromLongTermIdRequest = new RopIdFromLongTermIdRequest(); RopIdFromLongTermIdRequest.Parse(s); ropsList.Add(RopIdFromLongTermIdRequest); break; case RopIdType.RopGetPerUserLongTermIds: RopGetPerUserLongTermIdsRequest RopGetPerUserLongTermIdsRequest = new RopGetPerUserLongTermIdsRequest(); RopGetPerUserLongTermIdsRequest.Parse(s); ropsList.Add(RopGetPerUserLongTermIdsRequest); break; case RopIdType.RopGetPerUserGuid: RopGetPerUserGuidRequest RopGetPerUserGuidRequest = new RopGetPerUserGuidRequest(); RopGetPerUserGuidRequest.Parse(s); ropsList.Add(RopGetPerUserGuidRequest); break; case RopIdType.RopReadPerUserInformation: RopReadPerUserInformationRequest RopReadPerUserInformationRequest = new RopReadPerUserInformationRequest(); RopReadPerUserInformationRequest.Parse(s); ropsList.Add(RopReadPerUserInformationRequest); break; case RopIdType.RopWritePerUserInformation: byte RopId = ReadByte(); byte logonId = ReadByte(); s.Position -= 2; if (!(DecodingContext.SessionLogId != null && DecodingContext.SessionLogId.ContainsKey(MapiInspector.MAPIInspector.currentParsingSessionID) && DecodingContext.SessionLogId[MapiInspector.MAPIInspector.currentParsingSessionID] == logonId)) { throw new MissingInformationException("Missing LogonFlags information for RopWritePerUserInformation", (ushort)CurrentByte, null); } RopWritePerUserInformationRequest RopWritePerUserInformationRequest = new RopWritePerUserInformationRequest(); RopWritePerUserInformationRequest.Parse(s); ropsList.Add(RopWritePerUserInformationRequest); break; // MS-OXCROPS ROPs case RopIdType.RopSubmitMessage: RopSubmitMessageRequest RopSubmitMessageRequest = new RopSubmitMessageRequest(); RopSubmitMessageRequest.Parse(s); ropsList.Add(RopSubmitMessageRequest); break; case RopIdType.RopAbortSubmit: RopAbortSubmitRequest RopAbortSubmitRequest = new RopAbortSubmitRequest(); RopAbortSubmitRequest.Parse(s); ropsList.Add(RopAbortSubmitRequest); break; case RopIdType.RopGetAddressTypes: RopGetAddressTypesRequest RopGetAddressTypesRequest = new RopGetAddressTypesRequest(); RopGetAddressTypesRequest.Parse(s); ropsList.Add(RopGetAddressTypesRequest); break; case RopIdType.RopSetSpooler: RopSetSpoolerRequest RopSetSpoolerRequest = new RopSetSpoolerRequest(); RopSetSpoolerRequest.Parse(s); ropsList.Add(RopSetSpoolerRequest); break; case RopIdType.RopSpoolerLockMessage: RopSpoolerLockMessageRequest RopSpoolerLockMessageRequest = new RopSpoolerLockMessageRequest(); RopSpoolerLockMessageRequest.Parse(s); ropsList.Add(RopSpoolerLockMessageRequest); break; case RopIdType.RopTransportSend: RopTransportSendRequest RopTransportSendRequest = new RopTransportSendRequest(); RopTransportSendRequest.Parse(s); ropsList.Add(RopTransportSendRequest); break; case RopIdType.RopTransportNewMail: RopTransportNewMailRequest RopTransportNewMailRequest = new RopTransportNewMailRequest(); RopTransportNewMailRequest.Parse(s); ropsList.Add(RopTransportNewMailRequest); break; case RopIdType.RopGetTransportFolder: RopGetTransportFolderRequest RopGetTransportFolderRequest = new RopGetTransportFolderRequest(); RopGetTransportFolderRequest.Parse(s); ropsList.Add(RopGetTransportFolderRequest); break; case RopIdType.RopOptionsData: RopOptionsDataRequest RopOptionsDataRequest = new RopOptionsDataRequest(); RopOptionsDataRequest.Parse(s); ropsList.Add(RopOptionsDataRequest); break; case RopIdType.RopRelease: RopReleaseRequest RopReleaseRequest = new RopReleaseRequest(); RopReleaseRequest.Parse(s); ropsList.Add(RopReleaseRequest); break; // MSOXCTABL ROPs case RopIdType.RopSetColumns: RopSetColumnsRequest RopSetColumnsRequest = new RopSetColumnsRequest(); RopSetColumnsRequest.Parse(s); ropsList.Add(RopSetColumnsRequest); break; case RopIdType.RopSortTable: RopSortTableRequest RopSortTableRequest = new RopSortTableRequest(); RopSortTableRequest.Parse(s); ropsList.Add(RopSortTableRequest); break; case RopIdType.RopRestrict: RopRestrictRequest RopRestrictRequest = new RopRestrictRequest(); RopRestrictRequest.Parse(s); ropsList.Add(RopRestrictRequest); break; case RopIdType.RopQueryRows: RopQueryRowsRequest RopQueryRowsRequest = new RopQueryRowsRequest(); RopQueryRowsRequest.Parse(s); ropsList.Add(RopQueryRowsRequest); break; case RopIdType.RopAbort: RopAbortRequest RopAbortRequest = new RopAbortRequest(); RopAbortRequest.Parse(s); ropsList.Add(RopAbortRequest); break; case RopIdType.RopGetStatus: RopGetStatusRequest RopGetStatusRequest = new RopGetStatusRequest(); RopGetStatusRequest.Parse(s); ropsList.Add(RopGetStatusRequest); break; case RopIdType.RopQueryPosition: RopQueryPositionRequest RopQueryPositionRequest = new RopQueryPositionRequest(); RopQueryPositionRequest.Parse(s); ropsList.Add(RopQueryPositionRequest); break; case RopIdType.RopSeekRow: RopSeekRowRequest RopSeekRowRequest = new RopSeekRowRequest(); RopSeekRowRequest.Parse(s); ropsList.Add(RopSeekRowRequest); break; case RopIdType.RopSeekRowBookmark: RopSeekRowBookmarkRequest RopSeekRowBookmarkRequest = new RopSeekRowBookmarkRequest(); RopSeekRowBookmarkRequest.Parse(s); ropsList.Add(RopSeekRowBookmarkRequest); break; case RopIdType.RopSeekRowFractional: RopSeekRowFractionalRequest RopSeekRowFractionalRequest = new RopSeekRowFractionalRequest(); RopSeekRowFractionalRequest.Parse(s); ropsList.Add(RopSeekRowFractionalRequest); break; case RopIdType.RopCreateBookmark: RopCreateBookmarkRequest RopCreateBookmarkRequest = new RopCreateBookmarkRequest(); RopCreateBookmarkRequest.Parse(s); ropsList.Add(RopCreateBookmarkRequest); break; case RopIdType.RopQueryColumnsAll: RopQueryColumnsAllRequest RopQueryColumnsAllRequest = new RopQueryColumnsAllRequest(); RopQueryColumnsAllRequest.Parse(s); ropsList.Add(RopQueryColumnsAllRequest); break; case RopIdType.RopFindRow: RopFindRowRequest RopFindRowRequest = new RopFindRowRequest(); RopFindRowRequest.Parse(s); ropsList.Add(RopFindRowRequest); break; case RopIdType.RopFreeBookmark: RopFreeBookmarkRequest RopFreeBookmarkRequest = new RopFreeBookmarkRequest(); RopFreeBookmarkRequest.Parse(s); ropsList.Add(RopFreeBookmarkRequest); break; case RopIdType.RopResetTable: RopResetTableRequest RopResetTableRequest = new RopResetTableRequest(); RopResetTableRequest.Parse(s); ropsList.Add(RopResetTableRequest); break; case RopIdType.RopExpandRow: RopExpandRowRequest RopExpandRowRequest = new RopExpandRowRequest(); RopExpandRowRequest.Parse(s); ropsList.Add(RopExpandRowRequest); break; case RopIdType.RopCollapseRow: RopCollapseRowRequest RopCollapseRowRequest = new RopCollapseRowRequest(); RopCollapseRowRequest.Parse(s); ropsList.Add(RopCollapseRowRequest); break; case RopIdType.RopGetCollapseState: RopGetCollapseStateRequest RopGetCollapseStateRequest = new RopGetCollapseStateRequest(); RopGetCollapseStateRequest.Parse(s); ropsList.Add(RopGetCollapseStateRequest); break; case RopIdType.RopSetCollapseState: RopSetCollapseStateRequest RopSetCollapseStateRequest = new RopSetCollapseStateRequest(); RopSetCollapseStateRequest.Parse(s); ropsList.Add(RopSetCollapseStateRequest); break; // MSOXORULE ROPs case RopIdType.RopModifyRules: RopModifyRulesRequest RopModifyRulesRequest = new RopModifyRulesRequest(); RopModifyRulesRequest.Parse(s); ropsList.Add(RopModifyRulesRequest); break; case RopIdType.RopGetRulesTable: RopGetRulesTableRequest RopGetRulesTableRequest = new RopGetRulesTableRequest(); RopGetRulesTableRequest.Parse(s); ropsList.Add(RopGetRulesTableRequest); break; case RopIdType.RopUpdateDeferredActionMessages: RopUpdateDeferredActionMessagesRequest RopUpdateDeferredActionMessagesRequest = new RopUpdateDeferredActionMessagesRequest(); RopUpdateDeferredActionMessagesRequest.Parse(s); ropsList.Add(RopUpdateDeferredActionMessagesRequest); break; //MS-OXCFXICS ROPs case RopIdType.RopFastTransferSourceCopyProperties: RopFastTransferSourceCopyPropertiesRequest RopFastTransferSourceCopyPropertiesRequest = new RopFastTransferSourceCopyPropertiesRequest(); RopFastTransferSourceCopyPropertiesRequest.Parse(s); ropsList.Add(RopFastTransferSourceCopyPropertiesRequest); break; case RopIdType.RopFastTransferSourceCopyTo: RopFastTransferSourceCopyToRequest RopFastTransferSourceCopyToRequest = new RopFastTransferSourceCopyToRequest(); RopFastTransferSourceCopyToRequest.Parse(s); ropsList.Add(RopFastTransferSourceCopyToRequest); break; case RopIdType.RopFastTransferSourceCopyMessages: RopFastTransferSourceCopyMessagesRequest RopFastTransferSourceCopyMessagesRequest = new RopFastTransferSourceCopyMessagesRequest(); RopFastTransferSourceCopyMessagesRequest.Parse(s); ropsList.Add(RopFastTransferSourceCopyMessagesRequest); break; case RopIdType.RopFastTransferSourceCopyFolder: RopFastTransferSourceCopyFolderRequest RopFastTransferSourceCopyFolderRequest = new RopFastTransferSourceCopyFolderRequest(); RopFastTransferSourceCopyFolderRequest.Parse(s); ropsList.Add(RopFastTransferSourceCopyFolderRequest); break; case RopIdType.RopFastTransferSourceGetBuffer: RopFastTransferSourceGetBufferRequest RopFastTransferSourceGetBufferRequest = new RopFastTransferSourceGetBufferRequest(); RopFastTransferSourceGetBufferRequest.Parse(s); ropsList.Add(RopFastTransferSourceGetBufferRequest); break; case RopIdType.RopTellVersion: RopTellVersionRequest RopTellVersionRequest = new RopTellVersionRequest(); RopTellVersionRequest.Parse(s); ropsList.Add(RopTellVersionRequest); break; case RopIdType.RopFastTransferDestinationConfigure: RopFastTransferDestinationConfigureRequest RopFastTransferDestinationConfigureRequest = new RopFastTransferDestinationConfigureRequest(); RopFastTransferDestinationConfigureRequest.Parse(s); ropsList.Add(RopFastTransferDestinationConfigureRequest); break; case RopIdType.RopFastTransferDestinationPutBuffer: if (DecodingContext.SessionFastTransferStreamType != null && DecodingContext.SessionFastTransferStreamType.ContainsKey(MapiInspector.MAPIInspector.currentParsingSessionID)) { DecodingContext.StreamType_Getbuffer = DecodingContext.SessionFastTransferStreamType[MapiInspector.MAPIInspector.currentParsingSessionID]; } else { throw new MissingInformationException("Missing TransferStream type information for RopFastTransferDestinationPutBufferRequest", (ushort)CurrentByte, null); } RopFastTransferDestinationPutBufferRequest RopFastTransferDestinationPutBufferRequest = new RopFastTransferDestinationPutBufferRequest(); RopFastTransferDestinationPutBufferRequest.Parse(s); ropsList.Add(RopFastTransferDestinationPutBufferRequest); break; case RopIdType.RopSynchronizationConfigure: RopSynchronizationConfigureRequest RopSynchronizationConfigureRequest = new RopSynchronizationConfigureRequest(); RopSynchronizationConfigureRequest.Parse(s); ropsList.Add(RopSynchronizationConfigureRequest); break; case RopIdType.RopSynchronizationGetTransferState: RopSynchronizationGetTransferStateRequest RopSynchronizationGetTransferStateRequest = new RopSynchronizationGetTransferStateRequest(); RopSynchronizationGetTransferStateRequest.Parse(s); ropsList.Add(RopSynchronizationGetTransferStateRequest); break; case RopIdType.RopSynchronizationUploadStateStreamBegin: RopSynchronizationUploadStateStreamBeginRequest RopSynchronizationUploadStateStreamBeginRequest = new RopSynchronizationUploadStateStreamBeginRequest(); RopSynchronizationUploadStateStreamBeginRequest.Parse(s); ropsList.Add(RopSynchronizationUploadStateStreamBeginRequest); break; case RopIdType.RopSynchronizationUploadStateStreamContinue: RopSynchronizationUploadStateStreamContinueRequest RopSynchronizationUploadStateStreamContinueRequest = new RopSynchronizationUploadStateStreamContinueRequest(); RopSynchronizationUploadStateStreamContinueRequest.Parse(s); ropsList.Add(RopSynchronizationUploadStateStreamContinueRequest); break; case RopIdType.RopSynchronizationUploadStateStreamEnd: RopSynchronizationUploadStateStreamEndRequest RopSynchronizationUploadStateStreamEndRequest = new RopSynchronizationUploadStateStreamEndRequest(); RopSynchronizationUploadStateStreamEndRequest.Parse(s); ropsList.Add(RopSynchronizationUploadStateStreamEndRequest); break; case RopIdType.RopSynchronizationOpenCollector: RopSynchronizationOpenCollectorRequest RopSynchronizationOpenCollectorRequest = new RopSynchronizationOpenCollectorRequest(); RopSynchronizationOpenCollectorRequest.Parse(s); ropsList.Add(RopSynchronizationOpenCollectorRequest); break; case RopIdType.RopSynchronizationImportMessageChange: RopSynchronizationImportMessageChangeRequest RopSynchronizationImportMessageChangeRequest = new RopSynchronizationImportMessageChangeRequest(); RopSynchronizationImportMessageChangeRequest.Parse(s); ropsList.Add(RopSynchronizationImportMessageChangeRequest); break; case RopIdType.RopSynchronizationImportHierarchyChange: RopSynchronizationImportHierarchyChangeRequest RopSynchronizationImportHierarchyChangeRequest = new RopSynchronizationImportHierarchyChangeRequest(); RopSynchronizationImportHierarchyChangeRequest.Parse(s); ropsList.Add(RopSynchronizationImportHierarchyChangeRequest); break; case RopIdType.RopSynchronizationImportMessageMove: RopSynchronizationImportMessageMoveRequest RopSynchronizationImportMessageMoveRequest = new RopSynchronizationImportMessageMoveRequest(); RopSynchronizationImportMessageMoveRequest.Parse(s); ropsList.Add(RopSynchronizationImportMessageMoveRequest); break; case RopIdType.RopSynchronizationImportDeletes: RopSynchronizationImportDeletesRequest RopSynchronizationImportDeletesRequest = new RopSynchronizationImportDeletesRequest(); RopSynchronizationImportDeletesRequest.Parse(s); ropsList.Add(RopSynchronizationImportDeletesRequest); break; case RopIdType.RopSynchronizationImportReadStateChanges: RopSynchronizationImportReadStateChangesRequest RopSynchronizationImportReadStateChangesRequest = new RopSynchronizationImportReadStateChangesRequest(); RopSynchronizationImportReadStateChangesRequest.Parse(s); ropsList.Add(RopSynchronizationImportReadStateChangesRequest); break; case RopIdType.RopGetLocalReplicaIds: RopGetLocalReplicaIdsRequest RopGetLocalReplicaIdsRequest = new RopGetLocalReplicaIdsRequest(); RopGetLocalReplicaIdsRequest.Parse(s); ropsList.Add(RopGetLocalReplicaIdsRequest); break; case RopIdType.RopSetLocalReplicaMidsetDeleted: RopSetLocalReplicaMidsetDeletedRequest RopSetLocalReplicaMidsetDeletedRequest = new RopSetLocalReplicaMidsetDeletedRequest(); RopSetLocalReplicaMidsetDeletedRequest.Parse(s); ropsList.Add(RopSetLocalReplicaMidsetDeletedRequest); break; // MS-OXCPRPT ROPs case RopIdType.RopGetPropertiesSpecific: RopGetPropertiesSpecificRequest RopGetPropertiesSpecificRequest = new RopGetPropertiesSpecificRequest(); RopGetPropertiesSpecificRequest.Parse(s); ropsList.Add(RopGetPropertiesSpecificRequest); DecodingContext.SessionPropertyTags = new Dictionary<int, PropertyTag[]>() { { MapiInspector.MAPIInspector.currentParsingSessionID, RopGetPropertiesSpecificRequest.PropertyTags } }; break; case RopIdType.RopGetPropertiesAll: RopGetPropertiesAllRequest RopGetPropertiesAllRequest = new RopGetPropertiesAllRequest(); RopGetPropertiesAllRequest.Parse(s); ropsList.Add(RopGetPropertiesAllRequest); break; case RopIdType.RopGetPropertiesList: RopGetPropertiesListRequest RopGetPropertiesListRequest = new RopGetPropertiesListRequest(); RopGetPropertiesListRequest.Parse(s); ropsList.Add(RopGetPropertiesListRequest); break; case RopIdType.RopSetProperties: RopSetPropertiesRequest RopSetPropertiesRequest = new RopSetPropertiesRequest(); RopSetPropertiesRequest.Parse(s); ropsList.Add(RopSetPropertiesRequest); break; case RopIdType.RopSetPropertiesNoReplicate: RopSetPropertiesNoReplicateRequest RopSetPropertiesNoReplicateRequest = new RopSetPropertiesNoReplicateRequest(); RopSetPropertiesNoReplicateRequest.Parse(s); ropsList.Add(RopSetPropertiesNoReplicateRequest); break; case RopIdType.RopDeleteProperties: RopDeletePropertiesRequest RopDeletePropertiesRequest = new RopDeletePropertiesRequest(); RopDeletePropertiesRequest.Parse(s); ropsList.Add(RopDeletePropertiesRequest); break; case RopIdType.RopDeletePropertiesNoReplicate: RopDeletePropertiesNoReplicateRequest RopDeletePropertiesNoReplicateRequest = new RopDeletePropertiesNoReplicateRequest(); RopDeletePropertiesNoReplicateRequest.Parse(s); ropsList.Add(RopDeletePropertiesNoReplicateRequest); break; case RopIdType.RopQueryNamedProperties: RopQueryNamedPropertiesRequest RopQueryNamedPropertiesRequest = new RopQueryNamedPropertiesRequest(); RopQueryNamedPropertiesRequest.Parse(s); ropsList.Add(RopQueryNamedPropertiesRequest); break; case RopIdType.RopCopyProperties: RopCopyPropertiesRequest RopCopyPropertiesRequest = new RopCopyPropertiesRequest(); RopCopyPropertiesRequest.Parse(s); ropsList.Add(RopCopyPropertiesRequest); break; case RopIdType.RopCopyTo: RopCopyToRequest RopCopyToRequest = new RopCopyToRequest(); RopCopyToRequest.Parse(s); ropsList.Add(RopCopyToRequest); break; case RopIdType.RopGetPropertyIdsFromNames: RopGetPropertyIdsFromNamesRequest RopGetPropertyIdsFromNamesRequest = new RopGetPropertyIdsFromNamesRequest(); RopGetPropertyIdsFromNamesRequest.Parse(s); ropsList.Add(RopGetPropertyIdsFromNamesRequest); break; case RopIdType.RopGetNamesFromPropertyIds: RopGetNamesFromPropertyIdsRequest RopGetNamesFromPropertyIdsRequest = new RopGetNamesFromPropertyIdsRequest(); RopGetNamesFromPropertyIdsRequest.Parse(s); ropsList.Add(RopGetNamesFromPropertyIdsRequest); break; case RopIdType.RopOpenStream: RopOpenStreamRequest RopOpenStreamRequest = new RopOpenStreamRequest(); RopOpenStreamRequest.Parse(s); ropsList.Add(RopOpenStreamRequest); break; case RopIdType.RopReadStream: RopReadStreamRequest RopReadStreamRequest = new RopReadStreamRequest(); RopReadStreamRequest.Parse(s); ropsList.Add(RopReadStreamRequest); break; case RopIdType.RopWriteStream: RopWriteStreamRequest RopWriteStreamRequest = new RopWriteStreamRequest(); RopWriteStreamRequest.Parse(s); ropsList.Add(RopWriteStreamRequest); break; case RopIdType.RopCommitStream: RopCommitStreamRequest RopCommitStreamRequest = new RopCommitStreamRequest(); RopCommitStreamRequest.Parse(s); ropsList.Add(RopCommitStreamRequest); break; case RopIdType.RopGetStreamSize: RopGetStreamSizeRequest RopGetStreamSizeRequest = new RopGetStreamSizeRequest(); RopGetStreamSizeRequest.Parse(s); ropsList.Add(RopGetStreamSizeRequest); break; case RopIdType.RopSetStreamSize: RopSetStreamSizeRequest RopSetStreamSizeRequest = new RopSetStreamSizeRequest(); RopSetStreamSizeRequest.Parse(s); ropsList.Add(RopSetStreamSizeRequest); break; case RopIdType.RopSeekStream: RopSeekStreamRequest RopSeekStreamRequest = new RopSeekStreamRequest(); RopSeekStreamRequest.Parse(s); ropsList.Add(RopSeekStreamRequest); break; case RopIdType.RopCopyToStream: RopCopyToStreamRequest RopCopyToStreamRequest = new RopCopyToStreamRequest(); RopCopyToStreamRequest.Parse(s); ropsList.Add(RopCopyToStreamRequest); break; case RopIdType.RopProgress: RopProgressRequest RopProgressRequest = new RopProgressRequest(); RopProgressRequest.Parse(s); ropsList.Add(RopProgressRequest); break; case RopIdType.RopLockRegionStream: RopLockRegionStreamRequest RopLockRegionStreamRequest = new RopLockRegionStreamRequest(); RopLockRegionStreamRequest.Parse(s); ropsList.Add(RopLockRegionStreamRequest); break; case RopIdType.RopUnlockRegionStream: RopUnlockRegionStreamRequest RopUnlockRegionStreamRequest = new RopUnlockRegionStreamRequest(); RopUnlockRegionStreamRequest.Parse(s); ropsList.Add(RopUnlockRegionStreamRequest); break; case RopIdType.RopWriteAndCommitStream: RopWriteAndCommitStreamRequest RopWriteAndCommitStreamRequest = new RopWriteAndCommitStreamRequest(); RopWriteAndCommitStreamRequest.Parse(s); ropsList.Add(RopWriteAndCommitStreamRequest); break; case RopIdType.RopCloneStream: RopCloneStreamRequest RopCloneStreamRequest = new RopCloneStreamRequest(); RopCloneStreamRequest.Parse(s); ropsList.Add(RopCloneStreamRequest); break; // MSOXCFOLD ROPs case RopIdType.RopOpenFolder: RopOpenFolderRequest RopOpenFolderRequest = new RopOpenFolderRequest(); RopOpenFolderRequest.Parse(s); ropsList.Add(RopOpenFolderRequest); break; case RopIdType.RopCreateFolder: RopCreateFolderRequest RopCreateFolderRequest = new RopCreateFolderRequest(); RopCreateFolderRequest.Parse(s); ropsList.Add(RopCreateFolderRequest); break; case RopIdType.RopDeleteFolder: RopDeleteFolderRequest RopDeleteFolderRequest = new RopDeleteFolderRequest(); RopDeleteFolderRequest.Parse(s); ropsList.Add(RopDeleteFolderRequest); break; case RopIdType.RopSetSearchCriteria: RopSetSearchCriteriaRequest RopSetSearchCriteriaRequest = new RopSetSearchCriteriaRequest(); RopSetSearchCriteriaRequest.Parse(s); ropsList.Add(RopSetSearchCriteriaRequest); break; case RopIdType.RopGetSearchCriteria: RopGetSearchCriteriaRequest RopGetSearchCriteriaRequest = new RopGetSearchCriteriaRequest(); RopGetSearchCriteriaRequest.Parse(s); ropsList.Add(RopGetSearchCriteriaRequest); break; case RopIdType.RopMoveCopyMessages: RopMoveCopyMessagesRequest RopMoveCopyMessagesRequest = new RopMoveCopyMessagesRequest(); RopMoveCopyMessagesRequest.Parse(s); ropsList.Add(RopMoveCopyMessagesRequest); break; case RopIdType.RopMoveFolder: RopMoveFolderRequest RopMoveFolderRequest = new RopMoveFolderRequest(); RopMoveFolderRequest.Parse(s); ropsList.Add(RopMoveFolderRequest); break; case RopIdType.RopCopyFolder: RopCopyFolderRequest RopCopyFolderRequest = new RopCopyFolderRequest(); RopCopyFolderRequest.Parse(s); ropsList.Add(RopCopyFolderRequest); break; case RopIdType.RopEmptyFolder: RopEmptyFolderRequest RopEmptyFolderRequest = new RopEmptyFolderRequest(); RopEmptyFolderRequest.Parse(s); ropsList.Add(RopEmptyFolderRequest); break; case RopIdType.RopHardDeleteMessagesAndSubfolders: RopHardDeleteMessagesAndSubfoldersRequest RopHardDeleteMessagesAndSubfoldersRequest = new RopHardDeleteMessagesAndSubfoldersRequest(); RopHardDeleteMessagesAndSubfoldersRequest.Parse(s); ropsList.Add(RopHardDeleteMessagesAndSubfoldersRequest); break; case RopIdType.RopDeleteMessages: RopDeleteMessagesRequest RopDeleteMessagesRequest = new RopDeleteMessagesRequest(); RopDeleteMessagesRequest.Parse(s); ropsList.Add(RopDeleteMessagesRequest); break; case RopIdType.RopHardDeleteMessages: RopHardDeleteMessagesRequest RopHardDeleteMessagesRequest = new RopHardDeleteMessagesRequest(); RopHardDeleteMessagesRequest.Parse(s); ropsList.Add(RopHardDeleteMessagesRequest); break; case RopIdType.RopGetHierarchyTable: RopGetHierarchyTableRequest RopGetHierarchyTableRequest = new RopGetHierarchyTableRequest(); RopGetHierarchyTableRequest.Parse(s); ropsList.Add(RopGetHierarchyTableRequest); break; case RopIdType.RopGetContentsTable: RopGetContentsTableRequest RopGetContentsTableRequest = new RopGetContentsTableRequest(); RopGetContentsTableRequest.Parse(s); ropsList.Add(RopGetContentsTableRequest); break; //MS-OXCMSG ROPs case RopIdType.RopOpenMessage: RopOpenMessageRequest ropOpenMessageRequest = new RopOpenMessageRequest(); ropOpenMessageRequest.Parse(s); ropsList.Add(ropOpenMessageRequest); break; case RopIdType.RopCreateMessage: RopCreateMessageRequest ropCreateMessageRequest = new RopCreateMessageRequest(); ropCreateMessageRequest.Parse(s); ropsList.Add(ropCreateMessageRequest); break; case RopIdType.RopSaveChangesMessage: RopSaveChangesMessageRequest ropSaveChangesMessageRequest = new RopSaveChangesMessageRequest(); ropSaveChangesMessageRequest.Parse(s); ropsList.Add(ropSaveChangesMessageRequest); break; case RopIdType.RopRemoveAllRecipients: RopRemoveAllRecipientsRequest ropRemoveAllRecipientsRequest = new RopRemoveAllRecipientsRequest(); ropRemoveAllRecipientsRequest.Parse(s); ropsList.Add(ropRemoveAllRecipientsRequest); break; case RopIdType.RopModifyRecipients: RopModifyRecipientsRequest ropModifyRecipientsRequest = new RopModifyRecipientsRequest(); ropModifyRecipientsRequest.Parse(s); ropsList.Add(ropModifyRecipientsRequest); break; case RopIdType.RopReadRecipients: RopReadRecipientsRequest ropReadRecipientsRequest = new RopReadRecipientsRequest(); ropReadRecipientsRequest.Parse(s); ropsList.Add(ropReadRecipientsRequest); break; case RopIdType.RopReloadCachedInformation: RopReloadCachedInformationRequest ropReloadCachedInformationRequest = new RopReloadCachedInformationRequest(); ropReloadCachedInformationRequest.Parse(s); ropsList.Add(ropReloadCachedInformationRequest); break; case RopIdType.RopSetMessageStatus: RopSetMessageStatusRequest ropSetMessageStatusRequest = new RopSetMessageStatusRequest(); ropSetMessageStatusRequest.Parse(s); ropsList.Add(ropSetMessageStatusRequest); break; case RopIdType.RopGetMessageStatus: RopGetMessageStatusRequest ropGetMessageStatusRequest = new RopGetMessageStatusRequest(); ropGetMessageStatusRequest.Parse(s); ropsList.Add(ropGetMessageStatusRequest); break; case RopIdType.RopSetReadFlags: RopSetReadFlagsRequest ropSetReadFlagsRequest = new RopSetReadFlagsRequest(); ropSetReadFlagsRequest.Parse(s); ropsList.Add(ropSetReadFlagsRequest); break; case RopIdType.RopSetMessageReadFlag: byte ropId = ReadByte(); byte logId = ReadByte(); s.Position -= 2; if (!(DecodingContext.SessionLogId != null && DecodingContext.SessionLogId.ContainsKey(MapiInspector.MAPIInspector.currentParsingSessionID) && DecodingContext.SessionLogId[MapiInspector.MAPIInspector.currentParsingSessionID] == logId)) { throw new MissingInformationException("Missing LogonFlags information for RopWritePerUserInformation", (ushort)CurrentByte, null); } RopSetMessageReadFlagRequest ropSetMessageReadFlagRequest = new RopSetMessageReadFlagRequest(); ropSetMessageReadFlagRequest.Parse(s); ropsList.Add(ropSetMessageReadFlagRequest); break; case RopIdType.RopOpenAttachment: RopOpenAttachmentRequest ropOpenAttachmentRequest = new RopOpenAttachmentRequest(); ropOpenAttachmentRequest.Parse(s); ropsList.Add(ropOpenAttachmentRequest); break; case RopIdType.RopCreateAttachment: RopCreateAttachmentRequest ropCreateAttachmentRequest = new RopCreateAttachmentRequest(); ropCreateAttachmentRequest.Parse(s); ropsList.Add(ropCreateAttachmentRequest); break; case RopIdType.RopDeleteAttachment: RopDeleteAttachmentRequest ropDeleteAttachmentRequest = new RopDeleteAttachmentRequest(); ropDeleteAttachmentRequest.Parse(s); ropsList.Add(ropDeleteAttachmentRequest); break; case RopIdType.RopSaveChangesAttachment: RopSaveChangesAttachmentRequest ropSaveChangesAttachmentRequest = new RopSaveChangesAttachmentRequest(); ropSaveChangesAttachmentRequest.Parse(s); ropsList.Add(ropSaveChangesAttachmentRequest); break; case RopIdType.RopOpenEmbeddedMessage: RopOpenEmbeddedMessageRequest ropOpenEmbeddedMessageRequest = new RopOpenEmbeddedMessageRequest(); ropOpenEmbeddedMessageRequest.Parse(s); ropsList.Add(ropOpenEmbeddedMessageRequest); break; case RopIdType.RopGetAttachmentTable: RopGetAttachmentTableRequest ropGetAttachmentTableRequest = new RopGetAttachmentTableRequest(); ropGetAttachmentTableRequest.Parse(s); ropsList.Add(ropGetAttachmentTableRequest); break; case RopIdType.RopGetValidAttachments: RopGetValidAttachmentsRequest ropGetValidAttachmentsRequest = new RopGetValidAttachmentsRequest(); ropGetValidAttachmentsRequest.Parse(s); ropsList.Add(ropGetValidAttachmentsRequest); break; // MSOXCNOTIF ROPs case RopIdType.RopRegisterNotification: RopRegisterNotificationRequest RopRegisterNotificationRequest = new RopRegisterNotificationRequest(); RopRegisterNotificationRequest.Parse(s); ropsList.Add(RopRegisterNotificationRequest); break; // MS-OXCPERM ROPs case RopIdType.RopGetPermissionsTable: RopGetPermissionsTableRequest RopGetPermissionsTableRequest = new RopGetPermissionsTableRequest(); RopGetPermissionsTableRequest.Parse(s); ropsList.Add(RopGetPermissionsTableRequest); break; case RopIdType.RopModifyPermissions: RopModifyPermissionsRequest RopModifyPermissionsRequest = new RopModifyPermissionsRequest(); RopModifyPermissionsRequest.Parse(s); ropsList.Add(RopModifyPermissionsRequest); break; default: object RopsBytes = ReadBytes(this.RopSize - 2); ropsList.Add(RopsBytes); break; } RopRemainSize.Add(this.RopSize - (uint)s.Position); } while (s.Position < this.RopSize); } else { this.RopsList = null; } if (DecodingContext.SessionRequestRemainSize.ContainsKey(MapiInspector.MAPIInspector.currentParsingSessionID)) { DecodingContext.SessionRequestRemainSize.Remove(MapiInspector.MAPIInspector.currentParsingSessionID); } DecodingContext.SessionRequestRemainSize.Add(MapiInspector.MAPIInspector.currentParsingSessionID, RopRemainSize); this.RopsList = ropsList.ToArray(); while (s.Position < s.Length) { uint ServerObjectHandle = ReadUint(); serverObjectHandleTable.Add(ServerObjectHandle); } this.ServerObjectHandleTable = serverObjectHandleTable.ToArray(); if (this.RopsList.Length > 0) { Dictionary<uint, PropertyTag[]> HandleMapForSetColumns = new Dictionary<uint, PropertyTag[]>(); Dictionary<uint, PropertyTag[]> HandleIndexMapForSetColumns = new Dictionary<uint, PropertyTag[]>(); foreach (var ropRequest in this.RopsList) { // This is used to store InputServerObject in RopFastTransferSourceGetBufferRequest. if (ropRequest is RopFastTransferSourceGetBufferRequest) { uint objectHandleKey = this.ServerObjectHandleTable[(ropRequest as RopFastTransferSourceGetBufferRequest).InputHandleIndex]; if (DecodingContext.GetBuffer_InPutHandles.ContainsKey(MapiInspector.MAPIInspector.currentParsingSessionID)) { DecodingContext.GetBuffer_InPutHandles.Remove(MapiInspector.MAPIInspector.currentParsingSessionID); } DecodingContext.GetBuffer_InPutHandles.Add(MapiInspector.MAPIInspector.currentParsingSessionID, (int)objectHandleKey); } // This is used to set FastTransfer stream root type according to InputServerObject of RopFastTransferSourceCopyTo and RopFastTransferSourceCopyProperties rops, which are used in MS-OXCFXICS else if (ropRequest is RopFastTransferSourceCopyToRequest || ropRequest is RopFastTransferSourceCopyPropertiesRequest) { uint objectHandleKey; if (ropRequest is RopFastTransferSourceCopyToRequest) { objectHandleKey = this.ServerObjectHandleTable[(ropRequest as RopFastTransferSourceCopyToRequest).InputHandleIndex]; if (DecodingContext.CopyTo_InputHandles.ContainsKey(MapiInspector.MAPIInspector.currentParsingSessionID)) { DecodingContext.CopyTo_InputHandles.Remove(MapiInspector.MAPIInspector.currentParsingSessionID); } DecodingContext.CopyTo_InputHandles.Add(MapiInspector.MAPIInspector.currentParsingSessionID, (int)objectHandleKey); } else { objectHandleKey = this.ServerObjectHandleTable[(ropRequest as RopFastTransferSourceCopyPropertiesRequest).InputHandleIndex]; if (DecodingContext.CopyProperties_InputHandles.ContainsKey(MapiInspector.MAPIInspector.currentParsingSessionID)) { DecodingContext.CopyProperties_InputHandles.Remove(MapiInspector.MAPIInspector.currentParsingSessionID); } DecodingContext.CopyProperties_InputHandles.Add(MapiInspector.MAPIInspector.currentParsingSessionID, (int)objectHandleKey); } if (!DecodingContext.ObjectHandles.ContainsKey((int)objectHandleKey)) { if (ropRequest is RopFastTransferSourceCopyToRequest) { throw new MissingInformationException("Need more information about folder or message or attachment object handle", (ushort)(ropRequest as RopFastTransferSourceCopyToRequest).RopId, objectHandleKey); } else { throw new MissingInformationException("Need more information about folder or message or attachment object handle", (ushort)(ropRequest as RopFastTransferSourceCopyPropertiesRequest).RopId, objectHandleKey); } } } // This is used to set FastTransfer stream root type according to InputServerObject of RopFastTransferDestinationConfigureRequest ROP, // which are used in MS-OXCFXICS else if (ropRequest is RopFastTransferDestinationConfigureRequest) { RopFastTransferDestinationConfigureRequest request = ropRequest as RopFastTransferDestinationConfigureRequest; if (request.SourceOperation == SourceOperation.CopyTo || request.SourceOperation == SourceOperation.CopyProperties) { uint objectHandleKeyII = this.ServerObjectHandleTable[request.InputHandleIndex]; if (DecodingContext.DestinationConfigure_InputHandles.ContainsKey(MapiInspector.MAPIInspector.currentParsingSessionID)) { DecodingContext.DestinationConfigure_InputHandles.Remove(MapiInspector.MAPIInspector.currentParsingSessionID); } DecodingContext.DestinationConfigure_InputHandles.Add(MapiInspector.MAPIInspector.currentParsingSessionID, (int)objectHandleKeyII); if (!DecodingContext.ObjectHandles.ContainsKey((int)objectHandleKeyII)) { throw new MissingInformationException("Need more information about folder or message or attachment object handle", (ushort)(ropRequest as RopFastTransferDestinationConfigureRequest).RopId, objectHandleKeyII); } } } else if (ropRequest is RopSetColumnsRequest) { RopSetColumnsRequest request = ropRequest as RopSetColumnsRequest; uint objectHandleKey = this.ServerObjectHandleTable[request.InputHandleIndex]; if (objectHandleKey != 0xFFFF) { // Add the Handle value and Property Tags to the dictionary when the object handle is not equal to 0xFFFFFFFF HandleMapForSetColumns.Add(objectHandleKey, request.PropertyTags); } else { // Add the Handle value and Property Tags to the dictionary when the object handle is equal to 0xFFFFFFFF HandleIndexMapForSetColumns.Add(request.InputHandleIndex, request.PropertyTags); } } else if (ropRequest is RopReleaseRequest) { uint ObjectHandle = this.ServerObjectHandleTable[(ropRequest as RopReleaseRequest).InputHandleIndex]; foreach (KeyValuePair<int, Dictionary<uint, PropertyTag[]>> entry in DecodingContext.SetColumnProTagMap_Handle) { if (entry.Value.ContainsKey(ObjectHandle)) { entry.Value.Remove(ObjectHandle); } } } } if (HandleMapForSetColumns.Count > 0) { if (DecodingContext.SetColumnProTagMap_Handle.ContainsKey(MapiInspector.MAPIInspector.currentParsingSessionID)) { foreach (uint key in HandleMapForSetColumns.Keys) { if (DecodingContext.SetColumnProTagMap_Handle[MapiInspector.MAPIInspector.currentParsingSessionID].ContainsKey(key)) { DecodingContext.SetColumnProTagMap_Handle[MapiInspector.MAPIInspector.currentParsingSessionID].Remove(key); } else { DecodingContext.SetColumnProTagMap_Handle[MapiInspector.MAPIInspector.currentParsingSessionID].Add(key, HandleMapForSetColumns[key]); } } } else { DecodingContext.SetColumnProTagMap_Handle.Add(MapiInspector.MAPIInspector.currentParsingSessionID, HandleMapForSetColumns); } } if (HandleIndexMapForSetColumns.Count > 0) { if (DecodingContext.SetColumnProTagMap_Index.ContainsKey(MapiInspector.MAPIInspector.currentParsingSessionID)) { foreach (uint key in HandleIndexMapForSetColumns.Keys) { if (DecodingContext.SetColumnProTagMap_Index[MapiInspector.MAPIInspector.currentParsingSessionID].ContainsKey(key)) { DecodingContext.SetColumnProTagMap_Index[MapiInspector.MAPIInspector.currentParsingSessionID].Remove(key); } else { DecodingContext.SetColumnProTagMap_Index[MapiInspector.MAPIInspector.currentParsingSessionID].Add(key, HandleIndexMapForSetColumns[key]); } } } else { DecodingContext.SetColumnProTagMap_Index.Add(MapiInspector.MAPIInspector.currentParsingSessionID, HandleIndexMapForSetColumns); } } } }
/// <summary> /// Parse the ROPInputBuffer structure. /// </summary> /// <param name="s">A stream containing the ROPInputBuffer structure</param> public override void Parse(Stream s) { base.Parse(s); this.RopSize = ReadUshort(); List<object> ropsList = new List<object>(); List<uint> serverObjectHandleTable = new List<uint>(); List<uint> RopRemainSize = new List<uint>(); List<uint> tempServerObjectHandleTable = new List<uint>(); long currentPosition = s.Position; s.Position += (this.RopSize - 2); while (s.Position < s.Length) { uint serverObjectTable = ReadUint(); tempServerObjectHandleTable.Add(serverObjectTable); } s.Position = currentPosition; Dictionary<uint, PropertyTag[]> PropertyTagsForGetPropertiesSpec = new Dictionary<uint, PropertyTag[]>(); Dictionary<uint, LogonFlags> LogonFlagsInLogonRop = new Dictionary<uint, LogonFlags>(); if (this.RopSize > 2) { do { int CurrentByte = s.ReadByte(); s.Position -= 1; switch ((RopIdType)CurrentByte) { // MS-OXCSTOR ROPs case RopIdType.RopLogon: RopLogonRequest RopLogonRequest = new RopLogonRequest(); RopLogonRequest.Parse(s); ropsList.Add(RopLogonRequest); // update variables used for parsing logon response if (LogonFlagsInLogonRop.Count > 0 && LogonFlagsInLogonRop.ContainsKey(RopLogonRequest.OutputHandleIndex)) { LogonFlagsInLogonRop[RopLogonRequest.OutputHandleIndex] = RopLogonRequest.LogonFlags; } else { LogonFlagsInLogonRop.Add(RopLogonRequest.OutputHandleIndex, RopLogonRequest.LogonFlags); } if (LogonFlagsInLogonRop.Count > 0) { if (DecodingContext.SessionLogonFlagsInLogonRop.ContainsKey(MapiInspector.MAPIInspector.currentParsingSessionID)) { DecodingContext.SessionLogonFlagsInLogonRop.Remove(MapiInspector.MAPIInspector.currentParsingSessionID); } DecodingContext.SessionLogonFlagsInLogonRop.Add(MapiInspector.MAPIInspector.currentParsingSessionID, LogonFlagsInLogonRop); } // update variables used for parsing messages in other rops which need logonFlags if (DecodingContext.LogonFlagMapLogId.Count > 0 && DecodingContext.LogonFlagMapLogId.ContainsKey(RopLogonRequest.LogonId)) { DecodingContext.LogonFlagMapLogId.Remove(RopLogonRequest.LogonId); } DecodingContext.LogonFlagMapLogId.Add(RopLogonRequest.LogonId, RopLogonRequest.LogonFlags); break; case RopIdType.RopGetReceiveFolder: RopGetReceiveFolderRequest RopGetReceiveFolderRequest = new RopGetReceiveFolderRequest(); RopGetReceiveFolderRequest.Parse(s); ropsList.Add(RopGetReceiveFolderRequest); break; case RopIdType.RopSetReceiveFolder: RopSetReceiveFolderRequest RopSetReceiveFolderRequest = new RopSetReceiveFolderRequest(); RopSetReceiveFolderRequest.Parse(s); ropsList.Add(RopSetReceiveFolderRequest); break; case RopIdType.RopGetReceiveFolderTable: RopGetReceiveFolderTableRequest RopGetReceiveFolderTableRequest = new RopGetReceiveFolderTableRequest(); RopGetReceiveFolderTableRequest.Parse(s); ropsList.Add(RopGetReceiveFolderTableRequest); break; case RopIdType.RopGetStoreState: RopGetStoreStateRequest RopGetStoreStateRequest = new RopGetStoreStateRequest(); RopGetStoreStateRequest.Parse(s); ropsList.Add(RopGetStoreStateRequest); break; case RopIdType.RopGetOwningServers: RopGetOwningServersRequest RopGetOwningServersRequest = new RopGetOwningServersRequest(); RopGetOwningServersRequest.Parse(s); ropsList.Add(RopGetOwningServersRequest); break; case RopIdType.RopPublicFolderIsGhosted: RopPublicFolderIsGhostedRequest RopPublicFolderIsGhostedRequest = new RopPublicFolderIsGhostedRequest(); RopPublicFolderIsGhostedRequest.Parse(s); ropsList.Add(RopPublicFolderIsGhostedRequest); break; case RopIdType.RopLongTermIdFromId: RopLongTermIdFromIdRequest RopLongTermIdFromIdRequest = new RopLongTermIdFromIdRequest(); RopLongTermIdFromIdRequest.Parse(s); ropsList.Add(RopLongTermIdFromIdRequest); break; case RopIdType.RopIdFromLongTermId: RopIdFromLongTermIdRequest RopIdFromLongTermIdRequest = new RopIdFromLongTermIdRequest(); RopIdFromLongTermIdRequest.Parse(s); ropsList.Add(RopIdFromLongTermIdRequest); break; case RopIdType.RopGetPerUserLongTermIds: RopGetPerUserLongTermIdsRequest RopGetPerUserLongTermIdsRequest = new RopGetPerUserLongTermIdsRequest(); RopGetPerUserLongTermIdsRequest.Parse(s); ropsList.Add(RopGetPerUserLongTermIdsRequest); break; case RopIdType.RopGetPerUserGuid: RopGetPerUserGuidRequest RopGetPerUserGuidRequest = new RopGetPerUserGuidRequest(); RopGetPerUserGuidRequest.Parse(s); ropsList.Add(RopGetPerUserGuidRequest); break; case RopIdType.RopReadPerUserInformation: RopReadPerUserInformationRequest RopReadPerUserInformationRequest = new RopReadPerUserInformationRequest(); RopReadPerUserInformationRequest.Parse(s); ropsList.Add(RopReadPerUserInformationRequest); break; case RopIdType.RopWritePerUserInformation: byte RopId = ReadByte(); byte logonId = ReadByte(); s.Position -= 2; if (!(DecodingContext.SessionLogonFlagMapLogId.Count > 0 && DecodingContext.SessionLogonFlagMapLogId.ContainsKey(MapiInspector.MAPIInspector.currentParsingSessionID) && DecodingContext.SessionLogonFlagMapLogId[MapiInspector.MAPIInspector.currentParsingSessionID].ContainsKey(logonId))) { throw new MissingInformationException("Missing LogonFlags information for RopWritePerUserInformation", (ushort)CurrentByte, new uint[] { logonId }); } RopWritePerUserInformationRequest RopWritePerUserInformationRequest = new RopWritePerUserInformationRequest(); RopWritePerUserInformationRequest.Parse(s); ropsList.Add(RopWritePerUserInformationRequest); break; // MS-OXCROPS ROPs case RopIdType.RopSubmitMessage: RopSubmitMessageRequest RopSubmitMessageRequest = new RopSubmitMessageRequest(); RopSubmitMessageRequest.Parse(s); ropsList.Add(RopSubmitMessageRequest); break; case RopIdType.RopAbortSubmit: RopAbortSubmitRequest RopAbortSubmitRequest = new RopAbortSubmitRequest(); RopAbortSubmitRequest.Parse(s); ropsList.Add(RopAbortSubmitRequest); break; case RopIdType.RopGetAddressTypes: RopGetAddressTypesRequest RopGetAddressTypesRequest = new RopGetAddressTypesRequest(); RopGetAddressTypesRequest.Parse(s); ropsList.Add(RopGetAddressTypesRequest); break; case RopIdType.RopSetSpooler: RopSetSpoolerRequest RopSetSpoolerRequest = new RopSetSpoolerRequest(); RopSetSpoolerRequest.Parse(s); ropsList.Add(RopSetSpoolerRequest); break; case RopIdType.RopSpoolerLockMessage: RopSpoolerLockMessageRequest RopSpoolerLockMessageRequest = new RopSpoolerLockMessageRequest(); RopSpoolerLockMessageRequest.Parse(s); ropsList.Add(RopSpoolerLockMessageRequest); break; case RopIdType.RopTransportSend: RopTransportSendRequest RopTransportSendRequest = new RopTransportSendRequest(); RopTransportSendRequest.Parse(s); ropsList.Add(RopTransportSendRequest); break; case RopIdType.RopTransportNewMail: RopTransportNewMailRequest RopTransportNewMailRequest = new RopTransportNewMailRequest(); RopTransportNewMailRequest.Parse(s); ropsList.Add(RopTransportNewMailRequest); break; case RopIdType.RopGetTransportFolder: RopGetTransportFolderRequest RopGetTransportFolderRequest = new RopGetTransportFolderRequest(); RopGetTransportFolderRequest.Parse(s); ropsList.Add(RopGetTransportFolderRequest); break; case RopIdType.RopOptionsData: RopOptionsDataRequest RopOptionsDataRequest = new RopOptionsDataRequest(); RopOptionsDataRequest.Parse(s); ropsList.Add(RopOptionsDataRequest); break; case RopIdType.RopRelease: RopReleaseRequest RopReleaseRequest = new RopReleaseRequest(); RopReleaseRequest.Parse(s); ropsList.Add(RopReleaseRequest); uint handle_Release = tempServerObjectHandleTable[RopReleaseRequest.InputHandleIndex]; if (DecodingContext.SetColumnProTagMap_Handle.ContainsKey(handle_Release)) { DecodingContext.SetColumnProTagMap_Handle.Remove(handle_Release); } break; // MSOXCTABL ROPs case RopIdType.RopSetColumns: RopSetColumnsRequest RopSetColumnsRequest = new RopSetColumnsRequest(); RopSetColumnsRequest.Parse(s); ropsList.Add(RopSetColumnsRequest); uint handleIndex_SetColumns = tempServerObjectHandleTable[RopSetColumnsRequest.InputHandleIndex]; if (handleIndex_SetColumns != 0xFFFFFFFF) { // When the object handle is not equal to 0xFFFFFFFF, if the objectHandleKey has contianed in HandleIndexMapForSetColumns, reset this key value, else add objectHandleKey and Property Tags to the dictionary. if (DecodingContext.SetColumnProTagMap_Handle.ContainsKey(handleIndex_SetColumns)) { DecodingContext.SetColumnProTagMap_Handle[handleIndex_SetColumns] = RopSetColumnsRequest.PropertyTags; } else { DecodingContext.SetColumnProTagMap_Handle.Add(handleIndex_SetColumns, RopSetColumnsRequest.PropertyTags); } } else { // When the object handle is equal to 0xFFFFFFFF, if the InputHandleIndex has contianed in HandleIndexMapForSetColumns, reset this key value, else add InputHandleIndex and Property Tags to the dictionary. if (DecodingContext.SetColumnProTagMap_Index.ContainsKey(RopSetColumnsRequest.InputHandleIndex)) { DecodingContext.SetColumnProTagMap_Index[RopSetColumnsRequest.InputHandleIndex] = RopSetColumnsRequest.PropertyTags; } else { DecodingContext.SetColumnProTagMap_Index.Add(RopSetColumnsRequest.InputHandleIndex, RopSetColumnsRequest.PropertyTags); } } break; case RopIdType.RopSortTable: RopSortTableRequest RopSortTableRequest = new RopSortTableRequest(); RopSortTableRequest.Parse(s); ropsList.Add(RopSortTableRequest); break; case RopIdType.RopRestrict: RopRestrictRequest RopRestrictRequest = new RopRestrictRequest(); RopRestrictRequest.Parse(s); ropsList.Add(RopRestrictRequest); break; case RopIdType.RopQueryRows: RopQueryRowsRequest RopQueryRowsRequest = new RopQueryRowsRequest(); RopQueryRowsRequest.Parse(s); ropsList.Add(RopQueryRowsRequest); break; case RopIdType.RopAbort: RopAbortRequest RopAbortRequest = new RopAbortRequest(); RopAbortRequest.Parse(s); ropsList.Add(RopAbortRequest); break; case RopIdType.RopGetStatus: RopGetStatusRequest RopGetStatusRequest = new RopGetStatusRequest(); RopGetStatusRequest.Parse(s); ropsList.Add(RopGetStatusRequest); break; case RopIdType.RopQueryPosition: RopQueryPositionRequest RopQueryPositionRequest = new RopQueryPositionRequest(); RopQueryPositionRequest.Parse(s); ropsList.Add(RopQueryPositionRequest); break; case RopIdType.RopSeekRow: RopSeekRowRequest RopSeekRowRequest = new RopSeekRowRequest(); RopSeekRowRequest.Parse(s); ropsList.Add(RopSeekRowRequest); break; case RopIdType.RopSeekRowBookmark: RopSeekRowBookmarkRequest RopSeekRowBookmarkRequest = new RopSeekRowBookmarkRequest(); RopSeekRowBookmarkRequest.Parse(s); ropsList.Add(RopSeekRowBookmarkRequest); break; case RopIdType.RopSeekRowFractional: RopSeekRowFractionalRequest RopSeekRowFractionalRequest = new RopSeekRowFractionalRequest(); RopSeekRowFractionalRequest.Parse(s); ropsList.Add(RopSeekRowFractionalRequest); break; case RopIdType.RopCreateBookmark: RopCreateBookmarkRequest RopCreateBookmarkRequest = new RopCreateBookmarkRequest(); RopCreateBookmarkRequest.Parse(s); ropsList.Add(RopCreateBookmarkRequest); break; case RopIdType.RopQueryColumnsAll: RopQueryColumnsAllRequest RopQueryColumnsAllRequest = new RopQueryColumnsAllRequest(); RopQueryColumnsAllRequest.Parse(s); ropsList.Add(RopQueryColumnsAllRequest); break; case RopIdType.RopFindRow: RopFindRowRequest RopFindRowRequest = new RopFindRowRequest(); RopFindRowRequest.Parse(s); ropsList.Add(RopFindRowRequest); break; case RopIdType.RopFreeBookmark: RopFreeBookmarkRequest RopFreeBookmarkRequest = new RopFreeBookmarkRequest(); RopFreeBookmarkRequest.Parse(s); ropsList.Add(RopFreeBookmarkRequest); break; case RopIdType.RopResetTable: RopResetTableRequest RopResetTableRequest = new RopResetTableRequest(); RopResetTableRequest.Parse(s); ropsList.Add(RopResetTableRequest); break; case RopIdType.RopExpandRow: RopExpandRowRequest RopExpandRowRequest = new RopExpandRowRequest(); RopExpandRowRequest.Parse(s); ropsList.Add(RopExpandRowRequest); break; case RopIdType.RopCollapseRow: RopCollapseRowRequest RopCollapseRowRequest = new RopCollapseRowRequest(); RopCollapseRowRequest.Parse(s); ropsList.Add(RopCollapseRowRequest); break; case RopIdType.RopGetCollapseState: RopGetCollapseStateRequest RopGetCollapseStateRequest = new RopGetCollapseStateRequest(); RopGetCollapseStateRequest.Parse(s); ropsList.Add(RopGetCollapseStateRequest); break; case RopIdType.RopSetCollapseState: RopSetCollapseStateRequest RopSetCollapseStateRequest = new RopSetCollapseStateRequest(); RopSetCollapseStateRequest.Parse(s); ropsList.Add(RopSetCollapseStateRequest); break; // MSOXORULE ROPs case RopIdType.RopModifyRules: RopModifyRulesRequest RopModifyRulesRequest = new RopModifyRulesRequest(); RopModifyRulesRequest.Parse(s); ropsList.Add(RopModifyRulesRequest); break; case RopIdType.RopGetRulesTable: RopGetRulesTableRequest RopGetRulesTableRequest = new RopGetRulesTableRequest(); RopGetRulesTableRequest.Parse(s); ropsList.Add(RopGetRulesTableRequest); break; case RopIdType.RopUpdateDeferredActionMessages: RopUpdateDeferredActionMessagesRequest RopUpdateDeferredActionMessagesRequest = new RopUpdateDeferredActionMessagesRequest(); RopUpdateDeferredActionMessagesRequest.Parse(s); ropsList.Add(RopUpdateDeferredActionMessagesRequest); break; //MS-OXCFXICS ROPs case RopIdType.RopFastTransferSourceCopyProperties: RopFastTransferSourceCopyPropertiesRequest RopFastTransferSourceCopyPropertiesRequest = new RopFastTransferSourceCopyPropertiesRequest(); RopFastTransferSourceCopyPropertiesRequest.Parse(s); ropsList.Add(RopFastTransferSourceCopyPropertiesRequest); uint hanlde_SourceCopyPropery = tempServerObjectHandleTable[RopFastTransferSourceCopyPropertiesRequest.InputHandleIndex]; if (!DecodingContext.CopyProperties_InputHandles.Contains(hanlde_SourceCopyPropery)) { DecodingContext.CopyProperties_InputHandles.Add(hanlde_SourceCopyPropery); } break; case RopIdType.RopFastTransferSourceCopyTo: RopFastTransferSourceCopyToRequest RopFastTransferSourceCopyToRequest = new RopFastTransferSourceCopyToRequest(); RopFastTransferSourceCopyToRequest.Parse(s); ropsList.Add(RopFastTransferSourceCopyToRequest); uint hanlde_SourceCopyTo = tempServerObjectHandleTable[RopFastTransferSourceCopyToRequest.InputHandleIndex]; if (!DecodingContext.CopyTo_InputHandles.Contains(hanlde_SourceCopyTo)) { DecodingContext.CopyTo_InputHandles.Add(hanlde_SourceCopyTo); } break; case RopIdType.RopFastTransferSourceCopyMessages: RopFastTransferSourceCopyMessagesRequest RopFastTransferSourceCopyMessagesRequest = new RopFastTransferSourceCopyMessagesRequest(); RopFastTransferSourceCopyMessagesRequest.Parse(s); ropsList.Add(RopFastTransferSourceCopyMessagesRequest); break; case RopIdType.RopFastTransferSourceCopyFolder: RopFastTransferSourceCopyFolderRequest RopFastTransferSourceCopyFolderRequest = new RopFastTransferSourceCopyFolderRequest(); RopFastTransferSourceCopyFolderRequest.Parse(s); ropsList.Add(RopFastTransferSourceCopyFolderRequest); break; case RopIdType.RopFastTransferSourceGetBuffer: RopFastTransferSourceGetBufferRequest RopFastTransferSourceGetBufferRequest = new RopFastTransferSourceGetBufferRequest(); RopFastTransferSourceGetBufferRequest.Parse(s); ropsList.Add(RopFastTransferSourceGetBufferRequest); break; case RopIdType.RopTellVersion: RopTellVersionRequest RopTellVersionRequest = new RopTellVersionRequest(); RopTellVersionRequest.Parse(s); ropsList.Add(RopTellVersionRequest); break; case RopIdType.RopFastTransferDestinationConfigure: RopFastTransferDestinationConfigureRequest RopFastTransferDestinationConfigureRequest = new RopFastTransferDestinationConfigureRequest(); RopFastTransferDestinationConfigureRequest.Parse(s); ropsList.Add(RopFastTransferDestinationConfigureRequest); SourceOperation sourceOperation = RopFastTransferDestinationConfigureRequest.SourceOperation; // Below code is used to record output handle index and sourceOperation, and this record will be updated in response, this logical is used for rops destinationConfigure and getBuffer is in same session uint handleIndex_DestConfigure = RopFastTransferDestinationConfigureRequest.OutputHandleIndex; if (DecodingContext.PutBuffer_sourceOperation.ContainsKey(handleIndex_DestConfigure)) { DecodingContext.PutBuffer_sourceOperation.Remove(handleIndex_DestConfigure); } DecodingContext.PutBuffer_sourceOperation.Add(handleIndex_DestConfigure, sourceOperation); if (sourceOperation == SourceOperation.CopyTo || sourceOperation == SourceOperation.CopyProperties) { uint handle_DestConfigure = tempServerObjectHandleTable[RopFastTransferDestinationConfigureRequest.InputHandleIndex]; if (!DecodingContext.DestinationConfigure_InputHandles.Contains(handle_DestConfigure)) { DecodingContext.DestinationConfigure_InputHandles.Add(handle_DestConfigure); } } break; case RopIdType.RopFastTransferDestinationPutBuffer: long currentPos_putBuffer = s.Position; s.Position += 2; int TempInputHandleIndex_putBuffer = s.ReadByte(); s.Position = currentPos_putBuffer; if (DecodingContext.SessionFastTransferStreamType != null && DecodingContext.SessionFastTransferStreamType.ContainsKey(MapiInspector.MAPIInspector.currentParsingSessionID)) { DecodingContext.StreamType_Getbuffer = DecodingContext.SessionFastTransferStreamType[MapiInspector.MAPIInspector.currentParsingSessionID]; } else { throw new MissingInformationException("Missing TransferStream type information for RopFastTransferDestinationPutBufferRequest", (ushort)CurrentByte, new uint[] { (uint)TempInputHandleIndex_putBuffer, tempServerObjectHandleTable[TempInputHandleIndex_putBuffer] }); } RopFastTransferDestinationPutBufferRequest RopFastTransferDestinationPutBufferRequest = new RopFastTransferDestinationPutBufferRequest(); RopFastTransferDestinationPutBufferRequest.Parse(s); ropsList.Add(RopFastTransferDestinationPutBufferRequest); break; case RopIdType.RopSynchronizationConfigure: RopSynchronizationConfigureRequest RopSynchronizationConfigureRequest = new RopSynchronizationConfigureRequest(); RopSynchronizationConfigureRequest.Parse(s); ropsList.Add(RopSynchronizationConfigureRequest); break; case RopIdType.RopSynchronizationGetTransferState: RopSynchronizationGetTransferStateRequest RopSynchronizationGetTransferStateRequest = new RopSynchronizationGetTransferStateRequest(); RopSynchronizationGetTransferStateRequest.Parse(s); ropsList.Add(RopSynchronizationGetTransferStateRequest); break; case RopIdType.RopSynchronizationUploadStateStreamBegin: RopSynchronizationUploadStateStreamBeginRequest RopSynchronizationUploadStateStreamBeginRequest = new RopSynchronizationUploadStateStreamBeginRequest(); RopSynchronizationUploadStateStreamBeginRequest.Parse(s); ropsList.Add(RopSynchronizationUploadStateStreamBeginRequest); break; case RopIdType.RopSynchronizationUploadStateStreamContinue: RopSynchronizationUploadStateStreamContinueRequest RopSynchronizationUploadStateStreamContinueRequest = new RopSynchronizationUploadStateStreamContinueRequest(); RopSynchronizationUploadStateStreamContinueRequest.Parse(s); ropsList.Add(RopSynchronizationUploadStateStreamContinueRequest); break; case RopIdType.RopSynchronizationUploadStateStreamEnd: RopSynchronizationUploadStateStreamEndRequest RopSynchronizationUploadStateStreamEndRequest = new RopSynchronizationUploadStateStreamEndRequest(); RopSynchronizationUploadStateStreamEndRequest.Parse(s); ropsList.Add(RopSynchronizationUploadStateStreamEndRequest); break; case RopIdType.RopSynchronizationOpenCollector: RopSynchronizationOpenCollectorRequest RopSynchronizationOpenCollectorRequest = new RopSynchronizationOpenCollectorRequest(); RopSynchronizationOpenCollectorRequest.Parse(s); ropsList.Add(RopSynchronizationOpenCollectorRequest); break; case RopIdType.RopSynchronizationImportMessageChange: RopSynchronizationImportMessageChangeRequest RopSynchronizationImportMessageChangeRequest = new RopSynchronizationImportMessageChangeRequest(); RopSynchronizationImportMessageChangeRequest.Parse(s); ropsList.Add(RopSynchronizationImportMessageChangeRequest); break; case RopIdType.RopSynchronizationImportHierarchyChange: RopSynchronizationImportHierarchyChangeRequest RopSynchronizationImportHierarchyChangeRequest = new RopSynchronizationImportHierarchyChangeRequest(); RopSynchronizationImportHierarchyChangeRequest.Parse(s); ropsList.Add(RopSynchronizationImportHierarchyChangeRequest); break; case RopIdType.RopSynchronizationImportMessageMove: RopSynchronizationImportMessageMoveRequest RopSynchronizationImportMessageMoveRequest = new RopSynchronizationImportMessageMoveRequest(); RopSynchronizationImportMessageMoveRequest.Parse(s); ropsList.Add(RopSynchronizationImportMessageMoveRequest); break; case RopIdType.RopSynchronizationImportDeletes: RopSynchronizationImportDeletesRequest RopSynchronizationImportDeletesRequest = new RopSynchronizationImportDeletesRequest(); RopSynchronizationImportDeletesRequest.Parse(s); ropsList.Add(RopSynchronizationImportDeletesRequest); break; case RopIdType.RopSynchronizationImportReadStateChanges: RopSynchronizationImportReadStateChangesRequest RopSynchronizationImportReadStateChangesRequest = new RopSynchronizationImportReadStateChangesRequest(); RopSynchronizationImportReadStateChangesRequest.Parse(s); ropsList.Add(RopSynchronizationImportReadStateChangesRequest); break; case RopIdType.RopGetLocalReplicaIds: RopGetLocalReplicaIdsRequest RopGetLocalReplicaIdsRequest = new RopGetLocalReplicaIdsRequest(); RopGetLocalReplicaIdsRequest.Parse(s); ropsList.Add(RopGetLocalReplicaIdsRequest); break; case RopIdType.RopSetLocalReplicaMidsetDeleted: RopSetLocalReplicaMidsetDeletedRequest RopSetLocalReplicaMidsetDeletedRequest = new RopSetLocalReplicaMidsetDeletedRequest(); RopSetLocalReplicaMidsetDeletedRequest.Parse(s); ropsList.Add(RopSetLocalReplicaMidsetDeletedRequest); break; // MS-OXCPRPT ROPs case RopIdType.RopGetPropertiesSpecific: RopGetPropertiesSpecificRequest RopGetPropertiesSpecificRequest = new RopGetPropertiesSpecificRequest(); RopGetPropertiesSpecificRequest.Parse(s); ropsList.Add(RopGetPropertiesSpecificRequest); if (PropertyTagsForGetPropertiesSpec.ContainsKey(RopGetPropertiesSpecificRequest.InputHandleIndex)) { PropertyTagsForGetPropertiesSpec[RopGetPropertiesSpecificRequest.InputHandleIndex] = RopGetPropertiesSpecificRequest.PropertyTags; } else { PropertyTagsForGetPropertiesSpec.Add(RopGetPropertiesSpecificRequest.InputHandleIndex, RopGetPropertiesSpecificRequest.PropertyTags); } if (PropertyTagsForGetPropertiesSpec.Count > 0) { if (DecodingContext.GetPropertiesSpec_propertyTags.ContainsKey(MapiInspector.MAPIInspector.currentParsingSessionID)) { DecodingContext.GetPropertiesSpec_propertyTags.Remove(MapiInspector.MAPIInspector.currentParsingSessionID); } DecodingContext.GetPropertiesSpec_propertyTags.Add(MapiInspector.MAPIInspector.currentParsingSessionID, PropertyTagsForGetPropertiesSpec); } break; case RopIdType.RopGetPropertiesAll: RopGetPropertiesAllRequest RopGetPropertiesAllRequest = new RopGetPropertiesAllRequest(); RopGetPropertiesAllRequest.Parse(s); ropsList.Add(RopGetPropertiesAllRequest); break; case RopIdType.RopGetPropertiesList: RopGetPropertiesListRequest RopGetPropertiesListRequest = new RopGetPropertiesListRequest(); RopGetPropertiesListRequest.Parse(s); ropsList.Add(RopGetPropertiesListRequest); break; case RopIdType.RopSetProperties: RopSetPropertiesRequest RopSetPropertiesRequest = new RopSetPropertiesRequest(); RopSetPropertiesRequest.Parse(s); ropsList.Add(RopSetPropertiesRequest); break; case RopIdType.RopSetPropertiesNoReplicate: RopSetPropertiesNoReplicateRequest RopSetPropertiesNoReplicateRequest = new RopSetPropertiesNoReplicateRequest(); RopSetPropertiesNoReplicateRequest.Parse(s); ropsList.Add(RopSetPropertiesNoReplicateRequest); break; case RopIdType.RopDeleteProperties: RopDeletePropertiesRequest RopDeletePropertiesRequest = new RopDeletePropertiesRequest(); RopDeletePropertiesRequest.Parse(s); ropsList.Add(RopDeletePropertiesRequest); break; case RopIdType.RopDeletePropertiesNoReplicate: RopDeletePropertiesNoReplicateRequest RopDeletePropertiesNoReplicateRequest = new RopDeletePropertiesNoReplicateRequest(); RopDeletePropertiesNoReplicateRequest.Parse(s); ropsList.Add(RopDeletePropertiesNoReplicateRequest); break; case RopIdType.RopQueryNamedProperties: RopQueryNamedPropertiesRequest RopQueryNamedPropertiesRequest = new RopQueryNamedPropertiesRequest(); RopQueryNamedPropertiesRequest.Parse(s); ropsList.Add(RopQueryNamedPropertiesRequest); break; case RopIdType.RopCopyProperties: RopCopyPropertiesRequest RopCopyPropertiesRequest = new RopCopyPropertiesRequest(); RopCopyPropertiesRequest.Parse(s); ropsList.Add(RopCopyPropertiesRequest); break; case RopIdType.RopCopyTo: RopCopyToRequest RopCopyToRequest = new RopCopyToRequest(); RopCopyToRequest.Parse(s); ropsList.Add(RopCopyToRequest); break; case RopIdType.RopGetPropertyIdsFromNames: RopGetPropertyIdsFromNamesRequest RopGetPropertyIdsFromNamesRequest = new RopGetPropertyIdsFromNamesRequest(); RopGetPropertyIdsFromNamesRequest.Parse(s); ropsList.Add(RopGetPropertyIdsFromNamesRequest); break; case RopIdType.RopGetNamesFromPropertyIds: RopGetNamesFromPropertyIdsRequest RopGetNamesFromPropertyIdsRequest = new RopGetNamesFromPropertyIdsRequest(); RopGetNamesFromPropertyIdsRequest.Parse(s); ropsList.Add(RopGetNamesFromPropertyIdsRequest); break; case RopIdType.RopOpenStream: RopOpenStreamRequest RopOpenStreamRequest = new RopOpenStreamRequest(); RopOpenStreamRequest.Parse(s); ropsList.Add(RopOpenStreamRequest); break; case RopIdType.RopReadStream: RopReadStreamRequest RopReadStreamRequest = new RopReadStreamRequest(); RopReadStreamRequest.Parse(s); ropsList.Add(RopReadStreamRequest); break; case RopIdType.RopWriteStream: RopWriteStreamRequest RopWriteStreamRequest = new RopWriteStreamRequest(); RopWriteStreamRequest.Parse(s); ropsList.Add(RopWriteStreamRequest); break; case RopIdType.RopCommitStream: RopCommitStreamRequest RopCommitStreamRequest = new RopCommitStreamRequest(); RopCommitStreamRequest.Parse(s); ropsList.Add(RopCommitStreamRequest); break; case RopIdType.RopGetStreamSize: RopGetStreamSizeRequest RopGetStreamSizeRequest = new RopGetStreamSizeRequest(); RopGetStreamSizeRequest.Parse(s); ropsList.Add(RopGetStreamSizeRequest); break; case RopIdType.RopSetStreamSize: RopSetStreamSizeRequest RopSetStreamSizeRequest = new RopSetStreamSizeRequest(); RopSetStreamSizeRequest.Parse(s); ropsList.Add(RopSetStreamSizeRequest); break; case RopIdType.RopSeekStream: RopSeekStreamRequest RopSeekStreamRequest = new RopSeekStreamRequest(); RopSeekStreamRequest.Parse(s); ropsList.Add(RopSeekStreamRequest); break; case RopIdType.RopCopyToStream: RopCopyToStreamRequest RopCopyToStreamRequest = new RopCopyToStreamRequest(); RopCopyToStreamRequest.Parse(s); ropsList.Add(RopCopyToStreamRequest); break; case RopIdType.RopProgress: RopProgressRequest RopProgressRequest = new RopProgressRequest(); RopProgressRequest.Parse(s); ropsList.Add(RopProgressRequest); break; case RopIdType.RopLockRegionStream: RopLockRegionStreamRequest RopLockRegionStreamRequest = new RopLockRegionStreamRequest(); RopLockRegionStreamRequest.Parse(s); ropsList.Add(RopLockRegionStreamRequest); break; case RopIdType.RopUnlockRegionStream: RopUnlockRegionStreamRequest RopUnlockRegionStreamRequest = new RopUnlockRegionStreamRequest(); RopUnlockRegionStreamRequest.Parse(s); ropsList.Add(RopUnlockRegionStreamRequest); break; case RopIdType.RopWriteAndCommitStream: RopWriteAndCommitStreamRequest RopWriteAndCommitStreamRequest = new RopWriteAndCommitStreamRequest(); RopWriteAndCommitStreamRequest.Parse(s); ropsList.Add(RopWriteAndCommitStreamRequest); break; case RopIdType.RopCloneStream: RopCloneStreamRequest RopCloneStreamRequest = new RopCloneStreamRequest(); RopCloneStreamRequest.Parse(s); ropsList.Add(RopCloneStreamRequest); break; // MSOXCFOLD ROPs case RopIdType.RopOpenFolder: RopOpenFolderRequest RopOpenFolderRequest = new RopOpenFolderRequest(); RopOpenFolderRequest.Parse(s); ropsList.Add(RopOpenFolderRequest); break; case RopIdType.RopCreateFolder: RopCreateFolderRequest RopCreateFolderRequest = new RopCreateFolderRequest(); RopCreateFolderRequest.Parse(s); ropsList.Add(RopCreateFolderRequest); break; case RopIdType.RopDeleteFolder: RopDeleteFolderRequest RopDeleteFolderRequest = new RopDeleteFolderRequest(); RopDeleteFolderRequest.Parse(s); ropsList.Add(RopDeleteFolderRequest); break; case RopIdType.RopSetSearchCriteria: RopSetSearchCriteriaRequest RopSetSearchCriteriaRequest = new RopSetSearchCriteriaRequest(); RopSetSearchCriteriaRequest.Parse(s); ropsList.Add(RopSetSearchCriteriaRequest); break; case RopIdType.RopGetSearchCriteria: RopGetSearchCriteriaRequest RopGetSearchCriteriaRequest = new RopGetSearchCriteriaRequest(); RopGetSearchCriteriaRequest.Parse(s); ropsList.Add(RopGetSearchCriteriaRequest); break; case RopIdType.RopMoveCopyMessages: RopMoveCopyMessagesRequest RopMoveCopyMessagesRequest = new RopMoveCopyMessagesRequest(); RopMoveCopyMessagesRequest.Parse(s); ropsList.Add(RopMoveCopyMessagesRequest); break; case RopIdType.RopMoveFolder: RopMoveFolderRequest RopMoveFolderRequest = new RopMoveFolderRequest(); RopMoveFolderRequest.Parse(s); ropsList.Add(RopMoveFolderRequest); break; case RopIdType.RopCopyFolder: RopCopyFolderRequest RopCopyFolderRequest = new RopCopyFolderRequest(); RopCopyFolderRequest.Parse(s); ropsList.Add(RopCopyFolderRequest); break; case RopIdType.RopEmptyFolder: RopEmptyFolderRequest RopEmptyFolderRequest = new RopEmptyFolderRequest(); RopEmptyFolderRequest.Parse(s); ropsList.Add(RopEmptyFolderRequest); break; case RopIdType.RopHardDeleteMessagesAndSubfolders: RopHardDeleteMessagesAndSubfoldersRequest RopHardDeleteMessagesAndSubfoldersRequest = new RopHardDeleteMessagesAndSubfoldersRequest(); RopHardDeleteMessagesAndSubfoldersRequest.Parse(s); ropsList.Add(RopHardDeleteMessagesAndSubfoldersRequest); break; case RopIdType.RopDeleteMessages: RopDeleteMessagesRequest RopDeleteMessagesRequest = new RopDeleteMessagesRequest(); RopDeleteMessagesRequest.Parse(s); ropsList.Add(RopDeleteMessagesRequest); break; case RopIdType.RopHardDeleteMessages: RopHardDeleteMessagesRequest RopHardDeleteMessagesRequest = new RopHardDeleteMessagesRequest(); RopHardDeleteMessagesRequest.Parse(s); ropsList.Add(RopHardDeleteMessagesRequest); break; case RopIdType.RopGetHierarchyTable: RopGetHierarchyTableRequest RopGetHierarchyTableRequest = new RopGetHierarchyTableRequest(); RopGetHierarchyTableRequest.Parse(s); ropsList.Add(RopGetHierarchyTableRequest); break; case RopIdType.RopGetContentsTable: RopGetContentsTableRequest RopGetContentsTableRequest = new RopGetContentsTableRequest(); RopGetContentsTableRequest.Parse(s); ropsList.Add(RopGetContentsTableRequest); break; //MS-OXCMSG ROPs case RopIdType.RopOpenMessage: RopOpenMessageRequest ropOpenMessageRequest = new RopOpenMessageRequest(); ropOpenMessageRequest.Parse(s); ropsList.Add(ropOpenMessageRequest); break; case RopIdType.RopCreateMessage: RopCreateMessageRequest ropCreateMessageRequest = new RopCreateMessageRequest(); ropCreateMessageRequest.Parse(s); ropsList.Add(ropCreateMessageRequest); break; case RopIdType.RopSaveChangesMessage: RopSaveChangesMessageRequest ropSaveChangesMessageRequest = new RopSaveChangesMessageRequest(); ropSaveChangesMessageRequest.Parse(s); ropsList.Add(ropSaveChangesMessageRequest); break; case RopIdType.RopRemoveAllRecipients: RopRemoveAllRecipientsRequest ropRemoveAllRecipientsRequest = new RopRemoveAllRecipientsRequest(); ropRemoveAllRecipientsRequest.Parse(s); ropsList.Add(ropRemoveAllRecipientsRequest); break; case RopIdType.RopModifyRecipients: RopModifyRecipientsRequest ropModifyRecipientsRequest = new RopModifyRecipientsRequest(); ropModifyRecipientsRequest.Parse(s); ropsList.Add(ropModifyRecipientsRequest); break; case RopIdType.RopReadRecipients: RopReadRecipientsRequest ropReadRecipientsRequest = new RopReadRecipientsRequest(); ropReadRecipientsRequest.Parse(s); ropsList.Add(ropReadRecipientsRequest); break; case RopIdType.RopReloadCachedInformation: RopReloadCachedInformationRequest ropReloadCachedInformationRequest = new RopReloadCachedInformationRequest(); ropReloadCachedInformationRequest.Parse(s); ropsList.Add(ropReloadCachedInformationRequest); break; case RopIdType.RopSetMessageStatus: RopSetMessageStatusRequest ropSetMessageStatusRequest = new RopSetMessageStatusRequest(); ropSetMessageStatusRequest.Parse(s); ropsList.Add(ropSetMessageStatusRequest); break; case RopIdType.RopGetMessageStatus: RopGetMessageStatusRequest ropGetMessageStatusRequest = new RopGetMessageStatusRequest(); ropGetMessageStatusRequest.Parse(s); ropsList.Add(ropGetMessageStatusRequest); break; case RopIdType.RopSetReadFlags: RopSetReadFlagsRequest ropSetReadFlagsRequest = new RopSetReadFlagsRequest(); ropSetReadFlagsRequest.Parse(s); ropsList.Add(ropSetReadFlagsRequest); break; case RopIdType.RopSetMessageReadFlag: byte ropId = ReadByte(); byte logId = ReadByte(); s.Position -= 2; if (!(DecodingContext.SessionLogonFlagMapLogId.Count > 0 && DecodingContext.SessionLogonFlagMapLogId.ContainsKey(MapiInspector.MAPIInspector.currentParsingSessionID) && DecodingContext.SessionLogonFlagMapLogId[MapiInspector.MAPIInspector.currentParsingSessionID].ContainsKey(logId))) { throw new MissingInformationException("Missing LogonFlags information for RopSetMessageReadFlag", (ushort)CurrentByte, new uint[] { logId }); } RopSetMessageReadFlagRequest ropSetMessageReadFlagRequest = new RopSetMessageReadFlagRequest(); ropSetMessageReadFlagRequest.Parse(s); ropsList.Add(ropSetMessageReadFlagRequest); break; case RopIdType.RopOpenAttachment: RopOpenAttachmentRequest ropOpenAttachmentRequest = new RopOpenAttachmentRequest(); ropOpenAttachmentRequest.Parse(s); ropsList.Add(ropOpenAttachmentRequest); break; case RopIdType.RopCreateAttachment: RopCreateAttachmentRequest ropCreateAttachmentRequest = new RopCreateAttachmentRequest(); ropCreateAttachmentRequest.Parse(s); ropsList.Add(ropCreateAttachmentRequest); break; case RopIdType.RopDeleteAttachment: RopDeleteAttachmentRequest ropDeleteAttachmentRequest = new RopDeleteAttachmentRequest(); ropDeleteAttachmentRequest.Parse(s); ropsList.Add(ropDeleteAttachmentRequest); break; case RopIdType.RopSaveChangesAttachment: RopSaveChangesAttachmentRequest ropSaveChangesAttachmentRequest = new RopSaveChangesAttachmentRequest(); ropSaveChangesAttachmentRequest.Parse(s); ropsList.Add(ropSaveChangesAttachmentRequest); break; case RopIdType.RopOpenEmbeddedMessage: RopOpenEmbeddedMessageRequest ropOpenEmbeddedMessageRequest = new RopOpenEmbeddedMessageRequest(); ropOpenEmbeddedMessageRequest.Parse(s); ropsList.Add(ropOpenEmbeddedMessageRequest); break; case RopIdType.RopGetAttachmentTable: RopGetAttachmentTableRequest ropGetAttachmentTableRequest = new RopGetAttachmentTableRequest(); ropGetAttachmentTableRequest.Parse(s); ropsList.Add(ropGetAttachmentTableRequest); break; case RopIdType.RopGetValidAttachments: RopGetValidAttachmentsRequest ropGetValidAttachmentsRequest = new RopGetValidAttachmentsRequest(); ropGetValidAttachmentsRequest.Parse(s); ropsList.Add(ropGetValidAttachmentsRequest); break; // MSOXCNOTIF ROPs case RopIdType.RopRegisterNotification: RopRegisterNotificationRequest RopRegisterNotificationRequest = new RopRegisterNotificationRequest(); RopRegisterNotificationRequest.Parse(s); ropsList.Add(RopRegisterNotificationRequest); break; // MS-OXCPERM ROPs case RopIdType.RopGetPermissionsTable: RopGetPermissionsTableRequest RopGetPermissionsTableRequest = new RopGetPermissionsTableRequest(); RopGetPermissionsTableRequest.Parse(s); ropsList.Add(RopGetPermissionsTableRequest); break; case RopIdType.RopModifyPermissions: RopModifyPermissionsRequest RopModifyPermissionsRequest = new RopModifyPermissionsRequest(); RopModifyPermissionsRequest.Parse(s); ropsList.Add(RopModifyPermissionsRequest); break; default: object RopsBytes = ReadBytes(this.RopSize - 2); ropsList.Add(RopsBytes); break; } RopRemainSize.Add(this.RopSize - (uint)s.Position); } while (s.Position < this.RopSize); } else { this.RopsList = null; } if (DecodingContext.SessionRequestRemainSize.ContainsKey(MapiInspector.MAPIInspector.currentParsingSessionID)) { DecodingContext.SessionRequestRemainSize.Remove(MapiInspector.MAPIInspector.currentParsingSessionID); } DecodingContext.SessionRequestRemainSize.Add(MapiInspector.MAPIInspector.currentParsingSessionID, RopRemainSize); this.RopsList = ropsList.ToArray(); while (s.Position < s.Length) { uint ServerObjectHandle = ReadUint(); serverObjectHandleTable.Add(ServerObjectHandle); } this.ServerObjectHandleTable = serverObjectHandleTable.ToArray(); }