/// <summary> /// Verify RopDeleteFolder Response /// </summary> /// <param name="ropDeleteFolderResponse">The response of RopDeleteFolder request</param> /// <param name="inputHandleIndex">The field of InputHandleIndex in RopDeleteFolder request</param> private void VerifyRopDeleteFolderResponse(RopDeleteFolderResponse ropDeleteFolderResponse, byte inputHandleIndex) { // Add the debug information Site.Log.Add(LogEntryKind.Debug, "Verify MS-OXCROPS_R667"); // Verify MS-OXCROPS requirement: MS-OXCROPS_R667 Site.CaptureRequirementIfAreEqual<Type>( typeof(byte), ropDeleteFolderResponse.RopId.GetType(), 667, @"[In RopDeleteFolder ROP Response Buffer] RopId (1 byte): An unsigned integer."); // Add the debug information Site.Log.Add(LogEntryKind.Debug, "Verify MS-OXCROPS_R669"); // Verify MS-OXCROPS requirement: MS-OXCROPS_R669 Site.CaptureRequirementIfAreEqual<byte>( (byte)RopId.RopDeleteFolder, ropDeleteFolderResponse.RopId, 669, @"[In RopDeleteFolder ROP Response Buffer] RopId (1 byte): For this operation[RopDeleteFolder], this field[RopId (1 byte)] is set to 0x1D."); // Add the debug information Site.Log.Add(LogEntryKind.Debug, "Verify MS-OXCROPS_R670"); // Verify MS-OXCROPS requirement: MS-OXCROPS_R670 Site.CaptureRequirementIfAreEqual<Type>( typeof(byte), ropDeleteFolderResponse.InputHandleIndex.GetType(), 670, @"[In RopDeleteFolder ROP Response Buffer] InputHandleIndex (1 byte): An unsigned integer."); // Add the debug information Site.Log.Add(LogEntryKind.Debug, "Verify MS-OXCROPS_R671"); // Verify MS-OXCROPS requirement: MS-OXCROPS_R671 Site.CaptureRequirementIfAreEqual<byte>( inputHandleIndex, ropDeleteFolderResponse.InputHandleIndex, 671, @"[In RopDeleteFolder ROP Response Buffer] InputHandleIndex (1 byte): This index MUST be set to the value specified in the InputHandleIndex field in the request."); // Add the debug information Site.Log.Add(LogEntryKind.Debug, "Verify MS-OXCROPS_R672"); // Verify MS-OXCROPS requirement: MS-OXCROPS_R672 Site.CaptureRequirementIfAreEqual<Type>( typeof(uint), ropDeleteFolderResponse.ReturnValue.GetType(), 672, @"[In RopDeleteFolder ROP Response Buffer] ReturnValue (4 bytes): An unsigned integer."); // Add the debug information Site.Log.Add(LogEntryKind.Debug, "Verify MS-OXCROPS_R674,PartialCompletion:{0}", ropDeleteFolderResponse.PartialCompletion); // Verify MS-OXCROPS requirement: MS-OXCROPS_R674 // If PartialCompletion is byte type and can be boolean type representation, then verify R674 bool isVerifyR674 = (typeof(byte) == ropDeleteFolderResponse.PartialCompletion.GetType()) && ((Convert.ToBoolean(ropDeleteFolderResponse.PartialCompletion) == true) || (Convert.ToBoolean(ropDeleteFolderResponse.PartialCompletion) == false)); Site.CaptureRequirementIfIsTrue( isVerifyR674, 674, @"[In Response Buffer] PartialCompletion (1 byte): A Boolean."); }
/// <summary> /// Verify the response of RopDeleteFolder ROP operation. /// </summary> /// <param name="deleteFolderResponse">The response of RopDeleteFolder operation</param> private void VerifyRopDeleteFolder(RopDeleteFolderResponse deleteFolderResponse) { // Add the debug information Site.Log.Add(LogEntryKind.Debug, "Verify MS-OXCFOLD_R95"); // Verify MS-OXCFOLD requirement: MS-OXCFOLD_R95 Site.CaptureRequirementIfAreEqual<uint>( Constants.SuccessCode, deleteFolderResponse.ReturnValue, 95, @"[In RopDeleteFolder ROP Response Buffer] ReturnValue (4 bytes): The server returns 0x00000000 to indicate success."); // Add the debug information Site.Log.Add(LogEntryKind.Debug, "Verify MS-OXCFOLD_R75"); // If the RopDeleteFolder operation returns successfully, it indicates that the server removed a folder. // Verify MS-OXCFOLD requirement: MS-OXCFOLD_R75 Site.CaptureRequirementIfAreEqual<uint>( Constants.SuccessCode, deleteFolderResponse.ReturnValue, 75, @"[In RopDeleteFolder ROP] The RopDeleteFolder ROP ([MS-OXCROPS] section 2.2.4.3) removes a folder."); }
/// <summary> /// Delete specific folder. /// </summary> /// <param name="objHandle">object handle .</param> /// <param name="folderId">ID of the folder will be deleted.</param> /// <returns>ROP response of RopDeleteFolder.</returns> public RopDeleteFolderResponse RopDeleteFolder(uint objHandle, ulong folderId) { RopDeleteFolderRequest deleteFolderRequest = new RopDeleteFolderRequest(); RopDeleteFolderResponse deleteFolderResponse = new RopDeleteFolderResponse(); deleteFolderRequest.RopId = 0x1D; deleteFolderRequest.LogonId = 0x00; deleteFolderRequest.InputHandleIndex = 0x00; // Delete all messages and subfolders deleteFolderRequest.DeleteFolderFlags = 0x15; // Folder to be deleted deleteFolderRequest.FolderId = folderId; this.responseSOHs = this.DoRPCCall(deleteFolderRequest, objHandle, ref this.response, ref this.rawData); deleteFolderResponse = (RopDeleteFolderResponse)this.response; return deleteFolderResponse; }