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