/// <summary> /// Verify the FolderEntryID structure. /// </summary> /// <param name="folderEntryID">The FolderEntryID to be verified.</param> /// <param name="storeObjectType">Store Object Type.</param> private void VerifyFolderEntryID(FolderEntryID folderEntryID, StoreObjectType storeObjectType) { // Add the debug information. Site.Log.Add(LogEntryKind.Debug, "Verify MS-OXCDATA_R2225"); // Verify MS-OXCDATA requirement: MS-OXCDATA_R2225. Site.CaptureRequirementIfAreEqual<int>( 0, BitConverter.ToInt32(folderEntryID.Flag, 0), "MS-OXCDATA", 2225, @"[In Folder EntryID Structure] Flags (4 bytes): This value MUST be set to 0x00000000."); // Add the debug information. Site.Log.Add(LogEntryKind.Debug, "Verify MS-OXCDATA_R2229"); // Verify MS-OXCDATA requirement: MS-OXCDATA_R2229. Site.CaptureRequirementIfAreEqual<int>( 16, folderEntryID.DataBaseGUID.Length, "MS-OXCDATA", 2229, @"[In Folder EntryID Structure] DatabaseGuid (16 bytes): A GUID associated with the Store object and corresponding to the ReplicaId field of the FID structure."); // Add the debug information. Site.Log.Add(LogEntryKind.Debug, "Verify MS-OXCDATA_R2230"); // Verify MS-OXCDATA requirement: MS-OXCDATA_R2230. Site.CaptureRequirementIfAreEqual<int>( 6, folderEntryID.GlobalCounter.Length, "MS-OXCDATA", 2230, @"[In Folder EntryID Structure] GlobalCounter (6 bytes): An unsigned integer identifying the folder."); // Add the debug information. Site.Log.Add(LogEntryKind.Debug, "Verify MS-OXCDATA_R2231"); // Verify MS-OXCDATA requirement: MS-OXCDATA_R2231. Site.CaptureRequirementIfAreEqual<short>( 0, BitConverter.ToInt16(folderEntryID.Pad, 0), "MS-OXCDATA", 2231, @"[In Folder EntryID Structure] Pad (2 bytes): This value MUST be set to zero."); // Add the debug information. Site.Log.Add(LogEntryKind.Debug, "Verify MS-OXORULE_R301"); // The structure of FolderEId is verified by the requirements MS-OXCDATA_R2225, MS-OXCDATA_R2229, MS-OXCDATA_R2230, and MS-OXCDATA_R2231. // Verify MS-OXORULE_R301. Site.CaptureRequirement( 301, @"[In OP_MOVE and OP_COPY ActionData Structure] [Buffer Format for Standard Rules] FolderEID (variable): A structure that identifies the destination folder."); if (storeObjectType == StoreObjectType.Mailbox) { // Add the debug information. Site.Log.Add(LogEntryKind.Debug, "Verify MS-OXCDATA_R2226"); // Verify MS-OXCDATA requirement: MS-OXCDATA_R2226. Site.CaptureRequirementIfAreEqual<byte[]>( this.mailboxGUID, folderEntryID.ProviderUID, "MS-OXCDATA", 2226, @"[In Folder EntryID Structure] Provider UID (16 bytes): For a folder in a private mailbox, this value MUST be set to value of the MailboxGuid field from the RopLogon ROP response buffer ([MS-OXCROPS] section 2.2.3.1)."); } }
/// <summary> /// Get folder EntryID bytes array. /// </summary> /// <param name="storeObjectType">Identify the store object is a mailbox or a public folder.</param> /// <param name="objHandle">Logon handle.</param> /// <param name="folderid">Folder id value.</param> /// <returns>Folder EntryID bytes array.</returns> public byte[] GetFolderEntryId(StoreObjectType storeObjectType, uint objHandle, ulong folderid) { // Get folder longterm id. RopLongTermIdFromIdResponse longTermIdFromId = this.GetLongTermId(objHandle, folderid); FolderEntryID folderEntryId; if (storeObjectType == StoreObjectType.Mailbox) { folderEntryId = new FolderEntryID(storeObjectType, this.mailboxGUID, longTermIdFromId.LongTermId.DatabaseGuid, longTermIdFromId.LongTermId.GlobalCounter); } else { byte[] providerUID = new byte[] { 0x1A, 0x44, 0x73, 0x90, 0xAA, 0x66, 0x11, 0xCD, 0x9B, 0xC8, 0x00, 0xAA, 0x00, 0x2F, 0xC4, 0x5A }; folderEntryId = new FolderEntryID(storeObjectType, providerUID, longTermIdFromId.LongTermId.DatabaseGuid, longTermIdFromId.LongTermId.GlobalCounter); } this.VerifyFolderEntryID(folderEntryId, storeObjectType); return folderEntryId.Serialize(); }