/// <summary>
 /// Update SMB_COM_TREE_CONNECT_ANDX request.
 /// </summary>
 /// <param name="connection">It represents the SMB connection.</param>
 /// <param name="smbRequest">It represents the SMB request.</param>
 public static void UpdateTreeConnectRequest(SmbConnection connection, SmbRequest smbRequest)
 {
     connection.SutSendSequenceNumber.Add(smbRequest.messageId);
     connection.sentRequest.Add(smbRequest.messageId, smbRequest);
 }
 /// <summary>
 /// Update SMB_COM_WRITE_ANDX request.
 /// </summary>
 /// <param name="connection">It represents the SMB connection.</param>
 /// <param name="request">It represents the SMB request.</param>
 public static void UpdateWriteRequest(SmbConnection connection, SmbRequest request)
 {
     connection.SutSendSequenceNumber.Add(request.messageId);
     connection.sentRequest.Add(request.messageId, request);
 }
 /// <summary>
 /// Update SMB_COM_SESSION_SETUP request for non-extended security mode.
 /// </summary>
 /// <param name="connection">It represents the SMB connection.</param>
 /// <param name="smbRequest">It represents the SMB request.</param>
 public static void UpdateNonExtSessionSetupRequest(SmbConnection connection, SmbRequest smbRequest)
 {
     NonExtendedSessionSetupRequest req = smbRequest as NonExtendedSessionSetupRequest;
     connection.SutSendSequenceNumber.Add(smbRequest.messageId);
     connection.sentRequest.Add(smbRequest.messageId, smbRequest);
     connection.clientCapabilities = req.capabilities;
     connection.accountType = req.accountType;
 }
 /// <summary>
 /// Update SMB_COM_SESSION_SETUP request.
 /// </summary>
 /// <param name="connection">It represents the SMB connection.</param>
 /// <param name="smbRequest">It represents the SMB request.</param>
 public static void UpdateSessionSetupRequestAdditional(SmbConnection connection, SmbRequest smbRequest)
 {
     SessionSetupRequestAdditional req = smbRequest as SessionSetupRequestAdditional;
     connection.SutSendSequenceNumber.Add(smbRequest.messageId);
     connection.sentRequest.Add(smbRequest.messageId, smbRequest);
     connection.clientCapabilities = req.capabilities;
     connection.accountType = req.accountType;
 }
 public static void WriteRequest(
     int messageId,
     int sessionId,
     int treeId,
     int fId,
     ShareType shareType,
     bool isSigned,
     int synchronize)
 {
     Condition.IsTrue(synchronize == 0);
     Checker.CheckWriteRequest(smbConnection, messageId, sessionId, treeId, fId, shareType, isSigned, smbState);
     smbRequest = new WriteRequest(messageId, sessionId, treeId, shareType, isSigned);
     Update.UpdateWriteRequest(smbConnection, smbRequest);
 }
 /// <summary>
 /// Update SMB_COM_NEGOTIATE request.
 /// </summary>
 /// <param name="connection">It represents the SMB connection.</param>
 /// <param name="smbRequest">It represents the SMB request.</param>
 public static void UpdateNegotiateRequest(SmbConnection connection, SmbRequest smbRequest)
 {
     NegotiateRequest req = smbRequest as NegotiateRequest;
     connection.SutSendSequenceNumber.Add(smbRequest.messageId);
     connection.sentRequest.Add(smbRequest.messageId, smbRequest);
     connection.clientSignState = req.signState;
     connection.isNegotiateSent = true;
     connection.isClientSupportExtSecurity = req.isSupportExtSecurity;
 }
        public static void CreateRequest(
            int messageId,
            int sessionId,
            int treeId,
            [Domain("DesiredAccess")] int desiredAccess,
            CreateDisposition createDisposition,
            [Domain("ImpersonationLevel")] int impersonationLevel,
            [Domain("FileDomain")] string fileName,
            ShareType shareType,
            bool isSigned,
            bool isOpenByFileId,
            bool isDirectoryFile,
            bool isMaximumAllowedSet)
        {
            smbRequest = new CreateRequest(
                messageId,
                sessionId,
                treeId,
                desiredAccess,
                createDisposition,
                impersonationLevel,
                fileName,
                shareType,
                isSigned,
                isOpenByFileId,
                isDirectoryFile);

            Checker.CheckCreateRequest(
                smbConnection,
                messageId,
                sessionId,
                treeId,
                isSigned,
                shareType,
                fileName,
                smbState,
                isOpenByFileId,
                isDirectoryFile);

            if (shareType == ShareType.NamedPipe)
            {
                Condition.IsTrue((createDisposition == CreateDisposition.FileOpen)
                                    || (createDisposition == CreateDisposition.FileCreate)
                                    || (createDisposition == CreateDisposition.FileOpenIf));
            }
            // Save the client state when setting the max allowed, to cover the requirement.
            isClientMaxAllowedSet = isMaximumAllowedSet;

            Update.UpdateCreateRequest(smbConnection, smbRequest);
        }
 public static void TreeMultipleConnectRequest(
     int messageId,
     int sessionId,
     bool isTidDisconnectionSet,
     bool isRequestExtSignature,
     bool isRequestExtResponse,
     string share,
     ShareType shareType,
     bool isSigned)
 {
     Checker.CheckTreeMultipleConnectRequest(
         smbConnection,
         messageId,
         sessionId,
         smbState,
         isSigned,
         share,
         shareType);
     smbRequest = new TreeConnectRequest(
         messageId,
         sessionId,
         isTidDisconnectionSet,
         isRequestExtSignature,
         isRequestExtResponse,
         share,
         shareType);
     Update.UpdateTreeConnectRequest(smbConnection, smbRequest);
     smbState = SmbState.TreeConnectSent;
 }
        public static void SessionSetupRequestAdditional(
            AccountType accountType,
            int messageId,
            int sessionId,
            int securitySignature,
            bool isRequireSign,
            [Domain("ClientCapabilities")] Set<Capabilities> capabilities,
            bool isSendBufferSizeExceeds,
            bool isWriteBufferSizeExceeds,
            bool flag2,
            bool isGSSTokenValid,
            bool isUserIdValid)
        {
            Condition.IsTrue(flag2);
            Checker.CheckSessionSetupRequest(
                smbConnection,
                messageId,
                sessionId,
                smbState,
                isRequireSign,
                capabilities,
                isSendBufferSizeExceeds,
                isWriteBufferSizeExceeds);

            smbRequest = new SessionSetupRequestAdditional(
                accountType,
                messageId,
                sessionId,
                securitySignature,
                isRequireSign,
                capabilities,
                isGSSTokenValid,
                isUserIdValid);
            Update.UpdateSessionSetupRequestAdditional(smbConnection, smbRequest);
            smbState = SmbState.SessionSetupSent;
        }
        public static void SessionSetupRequest(
            AccountType account,
            int messageId,
            int sessionId,
            int securitySignature,
            bool isRequireSign,
            [Domain("ClientCapabilities")] Set<Capabilities> capabilities,
            bool isSendBufferSizeExceeds,
            bool isWriteBufferSizeExceeds,
            bool flag2)
        {
            Condition.IsTrue(flag2);
            Checker.CheckSessionSetupRequest(
                smbConnection,
                messageId,
                sessionId,
                smbState,
                isRequireSign,
                capabilities,
                isSendBufferSizeExceeds,
                isWriteBufferSizeExceeds);
            if (capabilities.Contains(Capabilities.CapExtendedSecurity))
            {
                ModelHelper.CaptureRequirement(
                    8388,
                    "[In Sequence Diagram] Session Setup Roundtrip: If the CAP_EXTENDED_SECURITY bit is set " +
                    "(0x80000000), then the SMB the SUT does support extended security.");
            }

            smbRequest = new SessionSetupRequest(
                account,
                messageId,
                sessionId,
                securitySignature,
                isRequireSign,
                capabilities);

            Update.UpdateSessionSetupRequest(smbConnection, smbRequest);
            smbState = SmbState.SessionSetupSent;
        }
 public static void ReadRequest(
     int messageId,
     int sessionId,
     int treeId,
     int fid,
     ShareType shareType,
     bool isSigned)
 {
     Checker.CheckReadRequest(smbConnection, messageId, sessionId, treeId, fid, shareType, isSigned, smbState);
     smbRequest = new ReadRequest(messageId, sessionId, treeId, fid, shareType, isSigned);
     Update.UpdateReadRequest(smbConnection, smbRequest);
 }
 public static void NegotiateRequest(
     int messageId,
     bool isSupportExtSecurity,
     SignState clientSignState,
     Sequence<Dialect> dialectName)
 {
     Checker.CheckNegotiateRequest(smbConnection, messageId, smbState, clientSignState, dialectName);
     smbRequest = new NegotiateRequest(messageId, isSupportExtSecurity, clientSignState, dialectName);
     Update.UpdateNegotiateRequest(smbConnection, smbRequest);
     smbState = SmbState.NegotiateSent;
 }
        public static void FsctlBadCommandRequest(
            int messageId,
            int sessionId,
            int treeId,
            bool isSigned,
            int fid,
            FsctlInvalidCommand command)
        {
            Condition.IsTrue(smbConnection.openedFiles.ContainsKey(fid));
            Condition.IsTrue(smbConnection.openedFiles[fid].treeId == treeId);
            Checker.CheckRequest(smbConnection, messageId, sessionId, treeId, isSigned, smbState);
            if (Parameter.sutPlatform != Platform.Win2K8R2
                    && Parameter.sutPlatform != Platform.NonWindows)
            {
                Condition.IsTrue(command == FsctlInvalidCommand.FsctlRequestOplockLevle1
                                    || command == FsctlInvalidCommand.FsctlRequestOplockLevel2
                                    || command == FsctlInvalidCommand.FsctlRequestBatchOplock
                                    || command == FsctlInvalidCommand.FsctlOplockBreakAcknowledge
                                    || command == FsctlInvalidCommand.FsctlOpBatchAckClosePending
                                    || command == FsctlInvalidCommand.FsctlOpLockBreakNotify
                                    || command == FsctlInvalidCommand.FsctlMoveFile
                                    || command == FsctlInvalidCommand.FsctlMarkHandle
                                    || command == FsctlInvalidCommand.FsctlQueryRetrievalPointers
                                    || command == FsctlInvalidCommand.FsctlPipeAssignEvent
                                    || command == FsctlInvalidCommand.FsctlGetVolumeBitmap
                                    || command == FsctlInvalidCommand.FsctlGetNtfsFileRecord
                                    || command == FsctlInvalidCommand.FsctlInvalidateVolumes
                                    || command == FsctlInvalidCommand.FsctlReadUsnJournal
                                    || command == FsctlInvalidCommand.FsctlCreateUsnJournal
                                    || command == FsctlInvalidCommand.FsctlQueryUsnJournal
                                    || command == FsctlInvalidCommand.FsctlDeleteUsnJournal
                                    || command == FsctlInvalidCommand.FsctlEnumUsnData);
            }
            smbRequest = new FSCTLBadCommandRequest(messageId, command);
            Update.UpdateRequest(smbConnection, smbRequest);

            // Store the bad command value.
            badCommand = command;
        }