コード例 #1
0
 internal static MessageStatus WorkaroundSetFileLinkInfo(bool inputNameInvalid, bool replaceIfExist, MessageStatus returnedStatus, ITestSite site)
 {
     if (inputNameInvalid == false && replaceIfExist == true)
     {
         returnedStatus = FsaUtility.TransferExpectedResult <MessageStatus>(2974, MessageStatus.SUCCESS, returnedStatus, site);
     }
     else if (inputNameInvalid)
     {
         returnedStatus = FsaUtility.TransferExpectedResult <MessageStatus>(2941, MessageStatus.OBJECT_NAME_INVALID, returnedStatus, site);
     }
     else if (!replaceIfExist)
     {
         returnedStatus = FsaUtility.TransferExpectedResult <MessageStatus>(2954, MessageStatus.OBJECT_NAME_COLLISION, returnedStatus, site);
     }
     return(returnedStatus);
 }
コード例 #2
0
 internal static MessageStatus WorkaroundSetSecurityInfo(FileSystem fileSystem, SecurityInformation securityInformation, OwnerSid ownerSidEnum, MessageStatus returnedStatus, ITestSite site)
 {
     if (fileSystem == FileSystem.FAT32)
     {
         returnedStatus = FsaUtility.TransferExpectedResult <MessageStatus>(3232, MessageStatus.INVALID_DEVICE_REQUEST, returnedStatus, site);
     }
     else if (((securityInformation == SecurityInformation.OWNER_SECURITY_INFORMATION || securityInformation == SecurityInformation.GROUP_SECURITY_INFORMATION || securityInformation == SecurityInformation.LABEL_SECURITY_INFORMATION)) || (securityInformation == SecurityInformation.DACL_SECURITY_INFORMATION) || (securityInformation == SecurityInformation.SACL_SECURITY_INFORMATION))
     {
         returnedStatus = FsaUtility.TransferExpectedResult <MessageStatus>(3239, MessageStatus.ACCESS_DENIED, returnedStatus, site);
     }
     else if ((securityInformation == SecurityInformation.OWNER_SECURITY_INFORMATION && ownerSidEnum == OwnerSid.InputBufferOwnerSidNotPresent) || (securityInformation == SecurityInformation.OWNER_SECURITY_INFORMATION && ownerSidEnum == OwnerSid.InputBufferOwnerSidNotValid) || (securityInformation != SecurityInformation.OWNER_SECURITY_INFORMATION && ownerSidEnum == OwnerSid.OpenFileSecDesOwnerIsNull))
     {
         returnedStatus = FsaUtility.TransferExpectedResult <MessageStatus>(3239, MessageStatus.INVALID_OWNER, returnedStatus, site);
     }
     return(returnedStatus);
 }
コード例 #3
0
 internal static MessageStatus WorkaroundQueryDirectoryInfo(FileNamePattern fileNamePattern, bool isNoRecordsReturned, bool isOutBufferSizeLess, MessageStatus returnedStatus, ITestSite site)
 {
     if (isOutBufferSizeLess)
     {
         returnedStatus = FsaUtility.TransferExpectedResult <MessageStatus>(4836, MessageStatus.INFO_LENGTH_MISMATCH, returnedStatus, site);
     }
     else if (fileNamePattern == FileNamePattern.NotValidFilenameComponent)
     {
         returnedStatus = FsaUtility.TransferExpectedResult <MessageStatus>(849, MessageStatus.OBJECT_NAME_INVALID, returnedStatus, site);
     }
     else if (isNoRecordsReturned)
     {
         returnedStatus = FsaUtility.TransferExpectedResult <MessageStatus>(865, MessageStatus.NO_SUCH_FILE, returnedStatus, site);
     }
     return(returnedStatus);
 }
 internal static MessageStatus WorkAroundFsCtlSetObjID(FsControlRequestType requestType, BufferSize bufferSize, MessageStatus returnedStatus, ITestSite site)
 {
     if (returnedStatus != MessageStatus.INVALID_DEVICE_REQUEST)
     {
         if (requestType == FsControlRequestType.SET_OBJECT_ID_EXTENDED && bufferSize == BufferSize.NotEqualFILE_OBJECTID_BUFFER)
         {
             returnedStatus = FsaUtility.TransferExpectedResult <MessageStatus>(1206, MessageStatus.SUCCESS, returnedStatus, site);
         }
         else if ((requestType == FsControlRequestType.SET_OBJECT_ID || requestType == FsControlRequestType.SET_OBJECT_ID_EXTENDED) &&
                  bufferSize == BufferSize.BufferSizeSuccess)
         {
             returnedStatus = FsaUtility.TransferExpectedResult <MessageStatus>(1187, MessageStatus.SUCCESS, returnedStatus, site);
         }
     }
     return(returnedStatus);
 }
コード例 #5
0
 internal static MessageStatus WorkaroundFsCtlSetEncrypion(bool isIsCompressedTrue, EncryptionOperation encryptionOpteration, BufferSize bufferSize, MessageStatus returnedStatus, ITestSite site)
 {
     if (bufferSize == BufferSize.LessThanENCRYPTION_BUFFER)
     {
         returnedStatus = FsaUtility.TransferExpectedResult <MessageStatus>(3899, MessageStatus.BUFFER_TOO_SMALL, returnedStatus, site);
     }
     else if ((encryptionOpteration == EncryptionOperation.NOT_VALID_IN_FSCC) || ((encryptionOpteration == EncryptionOperation.STREAM_SET_ENCRYPTION) && isIsCompressedTrue))
     {
         returnedStatus = FsaUtility.TransferExpectedResult <MessageStatus>(3900, MessageStatus.INVALID_PARAMETER, returnedStatus, site);
     }
     else if (!isIsCompressedTrue && encryptionOpteration == EncryptionOperation.STREAM_SET_ENCRYPTION && bufferSize == BufferSize.BufferSizeSuccess)
     {
         returnedStatus = FsaUtility.TransferExpectedResult <MessageStatus>(3919, MessageStatus.SUCCESS, returnedStatus, site);
     }
     return(returnedStatus);
 }
コード例 #6
0
 internal static MessageStatus WorkaroundFsCtlSetZeroData(BufferSize bufferSize, InputBuffer_FSCTL_SET_ZERO_DATA inputBuffer, bool isIsDeletedTrue, bool isConflictDetected, MessageStatus returnedStatus, ITestSite site)
 {
     if (isIsDeletedTrue &&
         bufferSize == BufferSize.BufferSizeSuccess &&
         (inputBuffer == InputBuffer_FSCTL_SET_ZERO_DATA.BufferSuccess || inputBuffer == InputBuffer_FSCTL_SET_ZERO_DATA.FileOffsetGreatThanBeyondFinalZero))
     {
         returnedStatus = FsaUtility.TransferExpectedResult <MessageStatus>(1309, MessageStatus.FILE_DELETED, returnedStatus, site);
     }
     else if (isConflictDetected &&
              bufferSize == BufferSize.BufferSizeSuccess &&
              (inputBuffer == InputBuffer_FSCTL_SET_ZERO_DATA.BufferSuccess || inputBuffer == InputBuffer_FSCTL_SET_ZERO_DATA.FileOffsetGreatThanBeyondFinalZero))
     {
         returnedStatus = FsaUtility.TransferExpectedResult <MessageStatus>(1316, MessageStatus.FILE_LOCK_CONFLICT, returnedStatus, site);
     }
     return(returnedStatus);
 }
        internal static MessageStatus WorkaroundByteRangeUnlock(StreamType streamType, bool isConflicted, MessageStatus returnedStatus, ITestSite site)
        {
            if (streamType == StreamType.DirectoryStream)
            {
                returnedStatus = FsaUtility.TransferExpectedResult <MessageStatus>(376, MessageStatus.INVALID_PARAMETER, returnedStatus, site);
            }
            else if (isConflicted)
            {
                returnedStatus = FsaUtility.TransferExpectedResult <MessageStatus>(376, MessageStatus.RANGE_NOT_LOCKED, returnedStatus, site);
            }
            else
            {
                returnedStatus = FsaUtility.TransferExpectedResult <MessageStatus>(376, MessageStatus.SUCCESS, returnedStatus, site);
            }

            return(returnedStatus);
        }
コード例 #8
0
        internal static MessageStatus WorkaroundSetFileShortNameInfo(InputBufferFileName inputBufferFileName, MessageStatus returnedstatus, ITestSite site)
        {
            if (inputBufferFileName == InputBufferFileName.StartWithBackSlash)
            {
                returnedstatus = FsaUtility.TransferExpectedResult <MessageStatus>(3173, MessageStatus.INVALID_PARAMETER, returnedstatus, site);
            }
            else if (inputBufferFileName == InputBufferFileName.NotValid)
            {
                returnedstatus = FsaUtility.TransferExpectedResult <MessageStatus>(3176, MessageStatus.INVALID_PARAMETER, returnedstatus, site);
            }
            else if (inputBufferFileName == InputBufferFileName.Empty)
            {
                returnedstatus = FsaUtility.TransferExpectedResult <MessageStatus>(3180, MessageStatus.ACCESS_DENIED, returnedstatus, site);
            }

            return(returnedstatus);
        }
 internal static MessageStatus WorkaroundCreateFile(FileNameStatus fileNameStatus, CreateOptions createOption, FileAccess desiredAccess, FileType openFileType, FileAttribute desiredFileAttribute, MessageStatus returnedStatus, ITestSite site)
 {
     if (desiredAccess == FileAccess.None || desiredAccess == FileAccess.INVALID_ACCESS_MASK)
     {
         returnedStatus = FsaUtility.TransferExpectedResult <MessageStatus>(366, MessageStatus.ACCESS_DENIED, returnedStatus, site);
     }
     else if (createOption == CreateOptions.DELETE_ON_CLOSE &&
              (desiredAccess != FileAccess.DELETE))
     {
         returnedStatus = FsaUtility.TransferExpectedResult <MessageStatus>(371, MessageStatus.INVALID_PARAMETER, returnedStatus, site);
     }
     else if (createOption == CreateOptions.NO_INTERMEDIATE_BUFFERING &&
              (desiredAccess == FileAccess.FILE_APPEND_DATA || desiredAccess == FileAccess.FILE_ADD_SUBDIRECTORY))
     {
         returnedStatus = FsaUtility.TransferExpectedResult <MessageStatus>(376, MessageStatus.INVALID_PARAMETER, returnedStatus, site);
     }
     return(returnedStatus);
 }
 internal static MessageStatus WorkAroundWriteFile(CreateOptions openMode, MessageStatus returnedStatus, ITestSite site)
 {
     if (returnedStatus == MessageStatus.DISK_FULL)
     {
         returnedStatus = FsaUtility.TransferExpectedResult <MessageStatus>(715, MessageStatus.MEDIA_WRITE_PROTECTED, MessageStatus.DISK_FULL, site);
     }
     else if (openMode == CreateOptions.NO_INTERMEDIATE_BUFFERING && returnedStatus == MessageStatus.SUCCESS)
     {
         // MS-FSA is going to verify below requirement of 2.1.5.3   Server Requests a Write
         // If Open.Mode.FILE_NO_INTERMEDIATE_BUFFERING is TRUE and (ByteOffset >= 0), the operation MUST be failed with STATUS_INVALID_PARAMETER
         // under any of the following conditions:If (ByteOffset % Open.File.Volume.SectorSize) is not zero.
         //
         // But SMB server does not fail on such condition.
         // To keep same model behavior, transfer the return code to STATUS_INVALID_PARAMETER
         returnedStatus = FsaUtility.TransferExpectedResult <MessageStatus>(1103, MessageStatus.INVALID_PARAMETER, returnedStatus, site);
     }
     return(returnedStatus);
 }
コード例 #11
0
 internal static MessageStatus WorkaroundFsCtlForEasyRequest(FileSystem fileSystem, FsControlRequestType requestType, BufferSize bufferSize, bool fileVolReadOnly, bool fileVolUsnAct, ref bool isBytesReturnedSet, ref bool isOutputBufferSizeReturn, MessageStatus returnedStatus, ITestSite site)
 {
     if (requestType == FsControlRequestType.RECALL_FILE)
     {
         returnedStatus = FsaUtility.TransferExpectedResult <MessageStatus>(1136, MessageStatus.SUCCESS, returnedStatus, site);
     }
     else if (requestType == FsControlRequestType.FSCTL_SET_SHORT_NAME_BEHAVIOR)
     {
         returnedStatus = FsaUtility.TransferExpectedResult <MessageStatus>(1274, MessageStatus.INVALID_DEVICE_REQUEST, returnedStatus, site);
     }
     else if (requestType == FsControlRequestType.WRITE_USN_CLOSE_RECORD && bufferSize == BufferSize.LessThanTwoBytes && !fileVolReadOnly && fileVolUsnAct)
     {
         isBytesReturnedSet = FsaUtility.TransferExpectedResult <bool>(3966, true, isBytesReturnedSet, site);
     }
     else if (requestType == FsControlRequestType.SET_ZERO_ON_DEALLOCATION && bufferSize == BufferSize.LessThanSizeofUsn)
     {
         isBytesReturnedSet = FsaUtility.TransferExpectedResult <bool>(1388, false, isBytesReturnedSet, site);
     }
     else if (requestType == FsControlRequestType.SET_OBJECT_ID && bufferSize == BufferSize.LessThan0x24 && !fileVolReadOnly && !fileVolUsnAct)
     {
         isBytesReturnedSet = FsaUtility.TransferExpectedResult <bool>(1068, true, isBytesReturnedSet, site);
     }
     else if (requestType == FsControlRequestType.QUERY_FAT_BPB && bufferSize == BufferSize.LessThanTotalSizeOfStatistics)
     {
         isBytesReturnedSet = FsaUtility.TransferExpectedResult <bool>(1121, true, isBytesReturnedSet, site);
     }
     else if (requestType == FsControlRequestType.QUERY_ON_DISK_VOLUME_INFO && bufferSize == BufferSize.LessThanFILE_QUERY_SPARING_BUFFER && fileVolReadOnly && fileVolUsnAct)
     {
         isBytesReturnedSet = FsaUtility.TransferExpectedResult <bool>(5522, true, isBytesReturnedSet, site);
     }
     else if (requestType == FsControlRequestType.WRITE_USN_CLOSE_RECORD &&
              returnedStatus == MessageStatus.JOURNAL_NOT_ACTIVE &&
              fileSystem == FileSystem.NTFS)
     {
         returnedStatus           = FsaUtility.TransferExpectedResult <MessageStatus>(1274, MessageStatus.SUCCESS, returnedStatus, site);
         isBytesReturnedSet       = FsaUtility.TransferExpectedResult <bool>(3966, true, isBytesReturnedSet, site);
         isOutputBufferSizeReturn = FsaUtility.TransferExpectedResult <bool>(3966, true, isOutputBufferSizeReturn, site);
     }
     return(returnedStatus);
 }
コード例 #12
0
 internal static MessageStatus WorkaroundCreateFile(FileNameStatus fileNameStatus, CreateOptions createOption, FileAccess desiredAccess, FileType openFileType, FileAttribute desiredFileAttribute, MessageStatus returnedStatus, ITestSite site)
 {
     if (openFileType == FileType.DirectoryFile && desiredFileAttribute == FileAttribute.TEMPORARY)
     {
         returnedStatus = FsaUtility.TransferExpectedResult <MessageStatus>(507, MessageStatus.INVALID_PARAMETER, returnedStatus, site);
     }
     else if (createOption == CreateOptions.SYNCHRONOUS_IO_ALERT &&
              desiredAccess == FileAccess.FILE_READ_DATA)
     {
         returnedStatus = FsaUtility.TransferExpectedResult <MessageStatus>(369, MessageStatus.INVALID_PARAMETER, returnedStatus, site);
     }
     else if (createOption == CreateOptions.SYNCHRONOUS_IO_NONALERT &&
              desiredAccess == FileAccess.FILE_READ_DATA)
     {
         returnedStatus = FsaUtility.TransferExpectedResult <MessageStatus>(2373, MessageStatus.INVALID_PARAMETER, returnedStatus, site);
     }
     else if (createOption == CreateOptions.DELETE_ON_CLOSE &&
              (desiredAccess == FileAccess.ACCESS_SYSTEM_SECURITY))
     {
         returnedStatus = FsaUtility.TransferExpectedResult <MessageStatus>(371, MessageStatus.INVALID_PARAMETER, returnedStatus, site);
     }
     else if (createOption == (CreateOptions.SYNCHRONOUS_IO_NONALERT | CreateOptions.SYNCHRONOUS_IO_ALERT))
     {
         returnedStatus = FsaUtility.TransferExpectedResult <MessageStatus>(373, MessageStatus.INVALID_PARAMETER, returnedStatus, site);
     }
     else if (createOption == (CreateOptions.COMPLETE_IF_OPLOCKED | CreateOptions.RESERVE_OPFILTER))
     {
         returnedStatus = FsaUtility.TransferExpectedResult <MessageStatus>(375, MessageStatus.INVALID_PARAMETER, returnedStatus, site);
     }
     else if (fileNameStatus == FileNameStatus.StreamTypeNameIsINDEX_ALLOCATION)
     {
         returnedStatus = FsaUtility.TransferExpectedResult <MessageStatus>(507, MessageStatus.INVALID_PARAMETER, returnedStatus, site);
     }
     else if (createOption == CreateOptions.NO_INTERMEDIATE_BUFFERING &&
              (desiredAccess == FileAccess.FILE_APPEND_DATA || desiredAccess == FileAccess.FILE_ADD_SUBDIRECTORY))
     {
         returnedStatus = FsaUtility.TransferExpectedResult <MessageStatus>(376, MessageStatus.INVALID_PARAMETER, returnedStatus, site);
     }
     return(returnedStatus);
 }
 internal static MessageStatus WorkAroundReadFile(long byteOffset, int byteCount, MessageStatus returnedStatus, ITestSite site)
 {
     if (returnedStatus == MessageStatus.INVALID_DEVICE_REQUEST)
     {
         returnedStatus = FsaUtility.TransferExpectedResult <MessageStatus>(1103, MessageStatus.INVALID_PARAMETER, returnedStatus, site);
     }
     else if (byteOffset < 0 && returnedStatus == MessageStatus.SUCCESS)
     {
         // If byteOffset < 0, SMB transport adapter will covert to 0, and return STATUS_SUCCESS.
         // To keep same model behavior, transfer the return code to STATUS_INVALID_PARAMETER.
         returnedStatus = FsaUtility.TransferExpectedResult <MessageStatus>(1103, MessageStatus.INVALID_PARAMETER, returnedStatus, site);
     }
     else
     {
         long gOpenFileVolumeSize = long.Parse(site.Properties["FSA.OpenFileVolumeSize"]);
         if ((byteCount % gOpenFileVolumeSize) != 0)
         {
             returnedStatus = FsaUtility.TransferExpectedResult <MessageStatus>(669, MessageStatus.INVALID_PARAMETER, returnedStatus, site);
         }
     }
     return(returnedStatus);
 }
 internal static MessageStatus WorkaroundOpenExistingFile(ShareAccess shareAccess, FileAccess desiredAccess,
                                                          bool streamFound, bool isSymbolicLink, FileType openFileType, FileNameStatus fileNameStatus,
                                                          CreateOptions existingOpenModeCreateOption, ShareAccess existOpenShareModeShareAccess,
                                                          FileAccess existOpenDesiredAccess, CreateOptions createOption, CreateDisposition createDisposition,
                                                          StreamTypeNameToOPen streamTypeNameToOPen, FileAttribute fileAttribute,
                                                          FileAttribute desiredFileAttribute, MessageStatus returnedStatus, ITestSite site)
 {
     // SMB1 server return ACCESS_DENIED instead of INVALID_PARAMETER when "CreateOptions.DELETE_ON_CLOS && !DesiredAccess.DELETE"
     if (createOption == CreateOptions.DELETE_ON_CLOSE &&
         desiredAccess != FileAccess.DELETE)
     {
         returnedStatus = FsaUtility.TransferExpectedResult <MessageStatus>(371, MessageStatus.INVALID_PARAMETER, returnedStatus, site);
     }
     else if (desiredAccess == FileAccess.None || desiredAccess == FileAccess.INVALID_ACCESS_MASK)
     {
         returnedStatus = FsaUtility.TransferExpectedResult <MessageStatus>(377, MessageStatus.ACCESS_DENIED, returnedStatus, site);
     }
     else if (createOption == CreateOptions.NO_INTERMEDIATE_BUFFERING &&
              (desiredAccess == FileAccess.FILE_APPEND_DATA || desiredAccess == FileAccess.FILE_ADD_SUBDIRECTORY))
     {
         returnedStatus = FsaUtility.TransferExpectedResult <MessageStatus>(376, MessageStatus.INVALID_PARAMETER, returnedStatus, site);
     }
     else if (streamFound && !isSymbolicLink && openFileType == FileType.DataFile &&
              existingOpenModeCreateOption == CreateOptions.DIRECTORY_FILE &&
              existOpenDesiredAccess == FileAccess.FILE_LIST_DIRECTORY &&
              createOption == CreateOptions.DIRECTORY_FILE)
     {
         returnedStatus = FsaUtility.TransferExpectedResult <MessageStatus>(375, MessageStatus.ACCESS_VIOLATION, returnedStatus, site);
     }
     else if (!streamFound && !isSymbolicLink && openFileType == FileType.DataFile &&
              existingOpenModeCreateOption == CreateOptions.NON_DIRECTORY_FILE &&
              existOpenDesiredAccess == FileAccess.FILE_LIST_DIRECTORY &&
              createOption == CreateOptions.NON_DIRECTORY_FILE &&
              fileAttribute == FileAttribute.READONLY)
     {
         returnedStatus = FsaUtility.TransferExpectedResult <MessageStatus>(375, MessageStatus.ACCESS_DENIED, returnedStatus, site);
     }
     return(returnedStatus);
 }
 internal static MessageStatus WorkAroundFsCtlGetReparsePointStatus(BufferSize bufferSize, ReparseTag openFileReparseTag, MessageStatus returnedStatus, ITestSite site)
 {
     if (openFileReparseTag == ReparseTag.EMPTY)
     {
         return(returnedStatus);
     }
     else if ((openFileReparseTag != ReparseTag.NON_MICROSOFT_RANGE_TAG) && (BufferSize.LessThanREPARSE_DATA_BUFFER == bufferSize))
     {
         returnedStatus = FsaUtility.TransferExpectedResult <MessageStatus>(1080, MessageStatus.BUFFER_TOO_SMALL, returnedStatus, site);
     }
     else if ((openFileReparseTag == ReparseTag.NON_MICROSOFT_RANGE_TAG) && (BufferSize.LessThanREPARSE_GUID_DATA_BUFFER == bufferSize))
     {
         returnedStatus = FsaUtility.TransferExpectedResult <MessageStatus>(1083, MessageStatus.BUFFER_TOO_SMALL, returnedStatus, site);
     }
     else if (returnedStatus == MessageStatus.NOT_A_REPARSE_POINT &&
              (bufferSize == BufferSize.BufferSizeSuccess || (bufferSize == BufferSize.LessThanREPARSE_DATA_BUFFER && openFileReparseTag == ReparseTag.NON_MICROSOFT_RANGE_TAG)))
     {
         // If the open file is not a reparse point, SMB server will return STATUS_NOT_A_REPARSE_POINT
         // This is acceptable in model and expect as STATUS_SUCCESS.
         returnedStatus = FsaUtility.TransferExpectedResult <MessageStatus>(2853, MessageStatus.SUCCESS, returnedStatus, site);
     }
     return(returnedStatus);
 }
コード例 #16
0
 internal static MessageStatus WorkaroundFsctlSisCopy(BufferSize bufferSize, InputBufferFSCTL_SIS_COPYFILE inputBuffer, bool isCOPYFILE_SIS_LINKTrue, bool isIsEncryptedTrue, MessageStatus returnedStatus, ITestSite site)
 {
     if (bufferSize == BufferSize.BufferSizeSuccess &&
         inputBuffer == InputBufferFSCTL_SIS_COPYFILE.Initial &&
         isCOPYFILE_SIS_LINKTrue == false &&
         isIsEncryptedTrue == false)
     {
         returnedStatus = FsaUtility.TransferExpectedResult <MessageStatus>(4773, MessageStatus.SUCCESS, returnedStatus, site);
     }
     else if ((bufferSize == BufferSize.LessThanSI_COPYFILE) ||
              (inputBuffer == InputBufferFSCTL_SIS_COPYFILE.FlagsNotContainCOPYFILE_SIS_LINKAndCOPYFILE_SIS_REPLACE) ||
              (inputBuffer == InputBufferFSCTL_SIS_COPYFILE.DestinationFileNameLengthLessThanZero) ||
              (inputBuffer == InputBufferFSCTL_SIS_COPYFILE.DestinationFileNameLengthLargeThanMAXUSHORT) ||
              (inputBuffer == InputBufferFSCTL_SIS_COPYFILE.InputBufferSizeLessThanOtherPlus))
     {
         returnedStatus = FsaUtility.TransferExpectedResult <MessageStatus>(4734, MessageStatus.INVALID_PARAMETER, returnedStatus, site);
     }
     else if (isCOPYFILE_SIS_LINKTrue || isIsEncryptedTrue)
     {
         returnedStatus = FsaUtility.TransferExpectedResult <MessageStatus>(4755, MessageStatus.OBJECT_TYPE_MISMATCH, returnedStatus, site);
     }
     return(returnedStatus);
 }
コード例 #17
0
 internal static MessageStatus WorkaroundFsCtlDeleteReparsePoint(ReparseTag reparseTag, bool reparseGuidEqualOpenGuid, MessageStatus returnedStatus, ITestSite site)
 {
     if (reparseTag == ReparseTag.EMPTY && reparseGuidEqualOpenGuid)
     {
         returnedStatus = FsaUtility.TransferExpectedResult <MessageStatus>(5001, MessageStatus.SUCCESS, returnedStatus, site);
     }
     else if (reparseTag == ReparseTag.IO_REPARSE_TAG_RESERVED_ONE || reparseTag == ReparseTag.IO_REPARSE_TAG_RESERVED_ZERO)
     {
         returnedStatus = FsaUtility.TransferExpectedResult <MessageStatus>(2437, MessageStatus.IO_REPARSE_TAG_INVALID, returnedStatus, site);
     }
     else if ((reparseTag == ReparseTag.NON_MICROSOFT_RANGE_TAG) && (!reparseGuidEqualOpenGuid))
     {
         returnedStatus = FsaUtility.TransferExpectedResult <MessageStatus>(990, MessageStatus.REPARSE_ATTRIBUTE_CONFLICT, returnedStatus, site);
     }
     else if (reparseTag == ReparseTag.NON_MICROSOFT_RANGE_TAG && reparseGuidEqualOpenGuid)
     {
         returnedStatus = FsaUtility.TransferExpectedResult <MessageStatus>(1257, MessageStatus.IO_REPARSE_DATA_INVALID, returnedStatus, site);
     }
     else if (reparseTag == ReparseTag.NotEqualOpenFileReparseTag)
     {
         returnedStatus = FsaUtility.TransferExpectedResult <MessageStatus>(989, MessageStatus.IO_REPARSE_TAG_MISMATCH, returnedStatus, site);
     }
     return(returnedStatus);
 }
コード例 #18
0
 internal static MessageStatus WorkaroundQueryFileInfoPart1(FileSystem fileSystem, FileInfoClass fileInfoClass, OutputBufferSize outputBufferSize, ref ByteCount byteCount, ref OutputBuffer outputBuffer, MessageStatus returnedStatus, ITestSite site)
 {
     if (fileInfoClass == FileInfoClass.NOT_DEFINED_IN_FSCC || fileInfoClass == FileInfoClass.FILE_BOTH_DIR_INFORMATION ||
         fileInfoClass == FileInfoClass.FILE_DIRECTORY_INFORMATION || fileInfoClass == FileInfoClass.FILE_FULL_DIR_INFORMATION ||
         fileInfoClass == FileInfoClass.FILE_LINKS_INFORMATION || fileInfoClass == FileInfoClass.FILE_ID_BOTH_DIR_INFORMATION ||
         fileInfoClass == FileInfoClass.FILE_ID_FULL_DIR_INFORMATION || fileInfoClass == FileInfoClass.FILE_ID_GLOBAL_TX_DIR_INFORMATION ||
         fileInfoClass == FileInfoClass.FILE_NAME_INFORMATION || fileInfoClass == FileInfoClass.FILE_NAMES_INFORMATION ||
         fileInfoClass == FileInfoClass.FILE_OBJECTID_INFORMATION || fileInfoClass == FileInfoClass.FILE_QUOTA_INFORMATION ||
         fileInfoClass == FileInfoClass.FILE_REPARSE_POINT_INFORMATION || fileInfoClass == FileInfoClass.FILE_SFIO_RESERVE_INFORMATION ||
         fileInfoClass == FileInfoClass.FILE_STANDARD_LINK_INFORMATION)
     {
         returnedStatus = FsaUtility.TransferExpectedResult <MessageStatus>(2749, MessageStatus.INVALID_INFO_CLASS, returnedStatus, site);
     }
     else if (fileInfoClass == FileInfoClass.FILE_ACCESS_INFORMATION && outputBufferSize == OutputBufferSize.NotLessThan)
     {
         outputBuffer = FsaUtility.TransferExpectedResult <OutputBuffer>(1421, new OutputBuffer(), outputBuffer, site);
     }
     else if (fileInfoClass == FileInfoClass.FILE_FULLEA_INFORMATION && outputBufferSize == OutputBufferSize.LessThan)
     {
         returnedStatus = FsaUtility.TransferExpectedResult <MessageStatus>(3994, MessageStatus.BUFFER_TOO_SMALL, returnedStatus, site);
     }
     else if (fileInfoClass == FileInfoClass.FILE_FULLEA_INFORMATION &&
              returnedStatus == MessageStatus.NO_EAS_ON_FILE)
     {
         // For query FILE_FULLEA_INFORMATION, when server returns STATUS_NO_EAS_ON_FILE, this result is valid according to model design.
         // Transfer the return code and byteCount to make model test cases passed.
         byteCount      = FsaUtility.TransferExpectedResult <ByteCount>(3992, ByteCount.SizeofFILE_FULL_EA_INFORMATION, byteCount, site);
         returnedStatus = FsaUtility.TransferExpectedResult <MessageStatus>(1187, MessageStatus.SUCCESS, returnedStatus, site);
     }
     else if (fileInfoClass == FileInfoClass.FILE_STREAM_INFORMATION &&
              fileSystem == FileSystem.FAT32)
     {
         returnedStatus = FsaUtility.TransferExpectedResult <MessageStatus>(1421, MessageStatus.SUCCESS, returnedStatus, site);
     }
     else if (fileInfoClass == FileInfoClass.FILE_COMPRESSION_INFORMATION &&
              fileSystem == FileSystem.FAT32)
     {
         if (outputBufferSize == OutputBufferSize.NotLessThan)
         {
             returnedStatus = FsaUtility.TransferExpectedResult <MessageStatus>(1421, MessageStatus.SUCCESS, returnedStatus, site);
             byteCount      = FsaUtility.TransferExpectedResult <ByteCount>(1421, ByteCount.SizeofFILE_COMPRESSION_INFORMATION, byteCount, site);
         }
         else if (outputBufferSize == OutputBufferSize.LessThan)
         {
             returnedStatus = FsaUtility.TransferExpectedResult <MessageStatus>(1489, MessageStatus.INFO_LENGTH_MISMATCH, returnedStatus, site);
             byteCount      = FsaUtility.TransferExpectedResult <ByteCount>(1489, ByteCount.NotSet, byteCount, site);
         }
     }
     else if (fileInfoClass == FileInfoClass.FILE_ATTRIBUTETAG_INFORMATION &&
              fileSystem == FileSystem.FAT32)
     {
         if (outputBufferSize == OutputBufferSize.NotLessThan)
         {
             returnedStatus = FsaUtility.TransferExpectedResult <MessageStatus>(1421, MessageStatus.SUCCESS, returnedStatus, site);
             byteCount      = FsaUtility.TransferExpectedResult <ByteCount>(1421, ByteCount.SizeofFILE_ATTRIBUTE_TAG_INFORMATION, byteCount, site);
         }
         else if (outputBufferSize == OutputBufferSize.LessThan)
         {
             returnedStatus = FsaUtility.TransferExpectedResult <MessageStatus>(1445, MessageStatus.INFO_LENGTH_MISMATCH, returnedStatus, site);
             byteCount      = FsaUtility.TransferExpectedResult <ByteCount>(1445, ByteCount.NotSet, byteCount, site);
         }
     }
     else if (fileInfoClass == FileInfoClass.FILE_FULLEA_INFORMATION &&
              fileSystem != FileSystem.NTFS &&
              outputBufferSize == OutputBufferSize.NotLessThan)
     {
         // FILE_FULL_EA_INFORMATION is only supported in NTFS, will failed with STATUS_INVALID_DEVICE_REQUEST in other file systems.
         // Transfer the return code and byteCount to make model test cases passed.
         byteCount      = FsaUtility.TransferExpectedResult <ByteCount>(3992, ByteCount.SizeofFILE_FULL_EA_INFORMATION, byteCount, site);
         returnedStatus = FsaUtility.TransferExpectedResult <MessageStatus>(1187, MessageStatus.SUCCESS, returnedStatus, site);
     }
     else if (fileInfoClass == FileInfoClass.FILE_ALTERNATENAME_INFORMATION &&
              fileSystem == FileSystem.REFS &&
              outputBufferSize == OutputBufferSize.NotLessThan)
     {
         // REFS file system does not support FILE_ALTERNATENAME_INFORMATION, will failed with STATUS_OBJECT_NAME_NOT_FOUND
         // Transfer the return code and byteCount to make model test cases passed.
         byteCount      = FsaUtility.TransferExpectedResult <ByteCount>(3992, ByteCount.FieldOffsetFILE_NAME_INFORMATION_FileNameAddOutputBuffer_FileNameLength, byteCount, site);
         returnedStatus = FsaUtility.TransferExpectedResult <MessageStatus>(1187, MessageStatus.SUCCESS, returnedStatus, site);
     }
     return(returnedStatus);
 }
        internal static MessageStatus WorkAroundQueryFileInfoPart1(FileSystem fileSystem, FileInfoClass fileInfoClass, OutputBufferSize outputBufferSize, ref ByteCount byteCount, ref OutputBuffer outputBuffer, MessageStatus returnedStatus, ITestSite site)
        {
            if (fileInfoClass == FileInfoClass.NOT_DEFINED_IN_FSCC)
            {
                returnedStatus = FsaUtility.TransferExpectedResult <MessageStatus>(1426, MessageStatus.INVALID_INFO_CLASS, returnedStatus, site);
            }
            else
            {
                switch (fileInfoClass)
                {
                case FileInfoClass.FILE_STANDARD_LINK_INFORMATION:
                {
                    returnedStatus = FsaUtility.TransferExpectedResult <MessageStatus>(2749, MessageStatus.INVALID_INFO_CLASS, returnedStatus, site);
                    break;
                }

                case FileInfoClass.FILE_LINKS_INFORMATION:
                {
                    returnedStatus = FsaUtility.TransferExpectedResult <MessageStatus>(1593, MessageStatus.INVALID_INFO_CLASS, returnedStatus, site);
                    break;
                }

                case FileInfoClass.FILE_QUOTA_INFORMATION:
                {
                    returnedStatus = FsaUtility.TransferExpectedResult <MessageStatus>(2524, MessageStatus.INVALID_INFO_CLASS, returnedStatus, site);
                    break;
                }

                case FileInfoClass.FILE_SFIO_RESERVE_INFORMATION:
                {
                    returnedStatus = FsaUtility.TransferExpectedResult <MessageStatus>(2734, MessageStatus.INVALID_INFO_CLASS, returnedStatus, site);
                    break;
                }

                case FileInfoClass.FILE_OBJECTID_INFORMATION:
                {
                    returnedStatus = FsaUtility.TransferExpectedResult <MessageStatus>(1585, MessageStatus.INVALID_INFO_CLASS, returnedStatus, site);
                    break;
                }

                case FileInfoClass.FILE_REPARSE_POINT_INFORMATION:
                {
                    returnedStatus = FsaUtility.TransferExpectedResult <MessageStatus>(2558, MessageStatus.INVALID_INFO_CLASS, returnedStatus, site);
                    break;
                }

                case FileInfoClass.FILE_NAME_INFORMATION:
                {
                    returnedStatus = FsaUtility.TransferExpectedResult <MessageStatus>(1591, MessageStatus.INVALID_INFO_CLASS, returnedStatus, site);
                    break;
                }

                case FileInfoClass.FILE_FULLEA_INFORMATION:
                {
                    // SMB server does not suport this operation, transfer return code to keep same model behavior
                    if (returnedStatus == MessageStatus.INVALID_INFO_CLASS)
                    {
                        if (outputBufferSize == OutputBufferSize.LessThan)
                        {
                            returnedStatus = FsaUtility.TransferExpectedResult <MessageStatus>(3899, MessageStatus.BUFFER_TOO_SMALL, returnedStatus, site);
                        }
                        else
                        {
                            byteCount      = FsaUtility.TransferExpectedResult <ByteCount>(3992, ByteCount.SizeofFILE_FULL_EA_INFORMATION, byteCount, site);
                            returnedStatus = FsaUtility.TransferExpectedResult <MessageStatus>(3994, MessageStatus.SUCCESS, returnedStatus, site);
                        }
                    }
                    break;
                }

                case FileInfoClass.FILE_ALTERNATENAME_INFORMATION:
                {
                    if (fileSystem == FileSystem.REFS && outputBufferSize == OutputBufferSize.NotLessThan)
                    {
                        // REFS file system does not support FILE_ALTERNATENAME_INFORMATION, will failed with STATUS_OBJECT_NAME_NOT_FOUND
                        // Transfer the return code and byteCount to make model test cases passed.
                        byteCount      = FsaUtility.TransferExpectedResult <ByteCount>(3992, ByteCount.FieldOffsetFILE_NAME_INFORMATION_FileNameAddOutputBuffer_FileNameLength, byteCount, site);
                        returnedStatus = FsaUtility.TransferExpectedResult <MessageStatus>(1187, MessageStatus.SUCCESS, returnedStatus, site);
                    }
                    break;
                }

                default:
                    break;
                }
            }
            return(returnedStatus);
        }
        internal static MessageStatus WorkAroundFsCtlForEasyRequest(FileSystem fileSystem, FsControlRequestType requestType, BufferSize bufferSize, bool fileVolReadOnly, bool fileVolUsnAct, MessageStatus returnedStatus, ITestSite site)
        {
            switch (requestType)
            {
            case FsControlRequestType.FSCTL_GET_COMPRESSION:
            {
                if (bufferSize != BufferSize.LessThanTwoBytes)
                {
                    returnedStatus = FsaUtility.TransferExpectedResult <MessageStatus>(1136, MessageStatus.SUCCESS, returnedStatus, site);
                }
                else
                {
                    returnedStatus = FsaUtility.TransferExpectedResult <MessageStatus>(3851, MessageStatus.INVALID_PARAMETER, returnedStatus, site);
                }
            }
            break;

            case FsControlRequestType.QUERY_SPARING_INFO:
            {
                if (bufferSize != BufferSize.LessThanFILE_QUERY_SPARING_BUFFER)
                {
                    returnedStatus = FsaUtility.TransferExpectedResult <MessageStatus>(1136, MessageStatus.SUCCESS, returnedStatus, site);
                }
                else
                {
                    returnedStatus = FsaUtility.TransferExpectedResult <MessageStatus>(3851, MessageStatus.INVALID_PARAMETER, returnedStatus, site);
                }
            }
            break;

            case FsControlRequestType.RECALL_FILE:
                returnedStatus = FsaUtility.TransferExpectedResult <MessageStatus>(1136, MessageStatus.SUCCESS, returnedStatus, site);
                break;

            case FsControlRequestType.SET_OBJECT_ID:
            {
                if (bufferSize != BufferSize.LessThanFILE_OBJECTID_BUFFER)
                {
                    returnedStatus = FsaUtility.TransferExpectedResult <MessageStatus>(1136, MessageStatus.SUCCESS, returnedStatus, site);
                }
                else
                {
                    returnedStatus = FsaUtility.TransferExpectedResult <MessageStatus>(3851, MessageStatus.INVALID_PARAMETER, returnedStatus, site);
                }
            }
            break;

            case FsControlRequestType.FSCTL_SET_SHORT_NAME_BEHAVIOR:
            {
                returnedStatus = FsaUtility.TransferExpectedResult <MessageStatus>(1136, MessageStatus.INVALID_DEVICE_REQUEST, returnedStatus, site);
                break;
            }

            case FsControlRequestType.WRITE_USN_CLOSE_RECORD:
            {
                if ((!fileVolReadOnly && bufferSize != BufferSize.LessThanSizeofUsn && fileVolUsnAct) ||
                    (returnedStatus == MessageStatus.JOURNAL_NOT_ACTIVE && fileSystem == FileSystem.NTFS))
                {
                    returnedStatus = FsaUtility.TransferExpectedResult <MessageStatus>(1136, MessageStatus.SUCCESS, returnedStatus, site);
                }
                else if (bufferSize == BufferSize.LessThanSizeofUsn)
                {
                    returnedStatus = FsaUtility.TransferExpectedResult <MessageStatus>(3851, MessageStatus.INVALID_PARAMETER, returnedStatus, site);
                }
                else if (fileVolReadOnly)
                {
                    returnedStatus = FsaUtility.TransferExpectedResult <MessageStatus>(3960, MessageStatus.MEDIA_WRITE_PROTECTED, returnedStatus, site);
                }
            }
            break;

            default:
                break;
            }
            return(returnedStatus);
        }
        internal static bool WorkAroundFsCtlForEasyRequestBool(FileSystem fileSystem, FsControlRequestType requestType, BufferSize bufferSize, bool fileVolReadOnly, bool fileVolUsnAct, bool isBytesReturnedSet, ref bool isOutputBufferSizeReturn, MessageStatus returnedStatus, ITestSite site)
        {
            switch (requestType)
            {
            case FsControlRequestType.FSCTL_FILESYSTEM_GET_STATISTICS:
            {
                if (bufferSize != BufferSize.LessThanTotalSizeOfStatistics && bufferSize != BufferSize.LessThanSizeOf_FILESYSTEM_STATISTICS)
                {
                    isBytesReturnedSet = FsaUtility.TransferExpectedResult <bool>(5522, true, isBytesReturnedSet, site);
                }
            }
            break;

            case FsControlRequestType.FSCTL_GET_COMPRESSION:
            {
                if (bufferSize != BufferSize.LessThanTwoBytes)
                {
                    isBytesReturnedSet = FsaUtility.TransferExpectedResult <bool>(5522, true, isBytesReturnedSet, site);
                }
            }
            break;

            case FsControlRequestType.SET_OBJECT_ID:
            {
                if (bufferSize != BufferSize.LessThanFILE_OBJECTID_BUFFER)
                {
                    isBytesReturnedSet = FsaUtility.TransferExpectedResult <bool>(5522, true, isBytesReturnedSet, site);
                }
            }
            break;

            case FsControlRequestType.QUERY_FAT_BPB:
            {
                if (bufferSize != BufferSize.LessThan0x24)
                {
                    isBytesReturnedSet = FsaUtility.TransferExpectedResult <bool>(5522, true, isBytesReturnedSet, site);
                }
            }
            break;

            case FsControlRequestType.QUERY_ON_DISK_VOLUME_INFO:
            {
                if (bufferSize != BufferSize.LessThanFILE_QUERY_ON_DISK_VOL_INFO_BUFFER)
                {
                    isBytesReturnedSet = FsaUtility.TransferExpectedResult <bool>(5522, true, isBytesReturnedSet, site);
                }
            }
            break;

            case FsControlRequestType.QUERY_SPARING_INFO:
            {
                if (bufferSize != BufferSize.LessThanFILE_QUERY_SPARING_BUFFER)
                {
                    isBytesReturnedSet = FsaUtility.TransferExpectedResult <bool>(5522, true, isBytesReturnedSet, site);
                }
            }
            break;

            case FsControlRequestType.FSCTL_SET_SHORT_NAME_BEHAVIOR:
            {
                isBytesReturnedSet = FsaUtility.TransferExpectedResult <bool>(5522, false, isBytesReturnedSet, site);
                break;
            }

            case FsControlRequestType.WRITE_USN_CLOSE_RECORD:
            {
                if ((!fileVolReadOnly && bufferSize != BufferSize.LessThanSizeofUsn && fileVolUsnAct) ||
                    ((returnedStatus == MessageStatus.JOURNAL_NOT_ACTIVE && fileSystem == FileSystem.NTFS) || returnedStatus == MessageStatus.SUCCESS))
                {
                    isBytesReturnedSet       = FsaUtility.TransferExpectedResult <bool>(5522, true, isBytesReturnedSet, site);
                    isOutputBufferSizeReturn = FsaUtility.TransferExpectedResult <bool>(5522, true, isOutputBufferSizeReturn, site);
                }
            }
            break;

            default:
                break;
            }
            return(isBytesReturnedSet);
        }