public void InvalidCreateRequestStructureSize() { uint status; client1 = new Smb2FunctionalClient(TestConfig.Timeout, TestConfig, this.Site); client1.ConnectToServer(TestConfig.UnderlyingTransport, TestConfig.SutComputerName, TestConfig.SutIPAddress); status = client1.Negotiate( TestConfig.RequestDialects, TestConfig.IsSMB1NegotiateEnabled); status = client1.SessionSetup( TestConfig.DefaultSecurityPackage, TestConfig.SutComputerName, TestConfig.AccountCredential, TestConfig.UseServerGssToken); uint treeId; status = client1.TreeConnect(uncSharePath, out treeId); string fileName = "BVT_SMB2Basic_InvalidCreateRequestStructureSize" + Guid.NewGuid(); FILEID fileID; Smb2CreateContextResponse[] serverCreateContexts; // [MS-SMB2] Section 2.2.13 SMB2 CREATE Request // StructureSize (2 bytes): The client MUST set this field to 57, indicating the size of the request structure, not including the header. // The client MUST set it to this value regardless of how long Buffer[] actually is in the request being sent. // So set the StuctureSize to 58 here to make "the size of the SMB2 CREATE Request is less than specified in the StructureSize field". client1.BeforeSendingPacket(ReplacePacketByStructureSize); status = client1.Create( treeId, fileName, CreateOptions_Values.FILE_NON_DIRECTORY_FILE, out fileID, out serverCreateContexts, checker: (header, response) => { }); BaseTestSite.Assert.AreEqual( Smb2Status.STATUS_INVALID_PARAMETER, status, "The size of the SMB2 CREATE Request (excluding the SMB2 header) is less than specified in the StructureSize field, then the request MUST be failed with STATUS_ INVALID_PARAMETER"); client1.TreeDisconnect(treeId); client1.LogOff(); }
public void CreateRequest( CreateFileNameType fileNameType, CreateOptionsFileOpenReparsePointType fileOpenReparsePointType, CreateOptionsFileDeleteOnCloseType fileDeleteOnCloseType, CreateContextType contextType, ImpersonationLevelType impersonationType, CreateFileType fileType) { #region Header Packet_Header_Flags_Values headerFlag = testConfig.SendSignedRequest ? Packet_Header_Flags_Values.FLAGS_SIGNED : Packet_Header_Flags_Values.NONE; #endregion #region File Name string fileName = GetFileName(fileNameType); #endregion #region CreateOptions CreateOptions_Values createOptions = fileType == CreateFileType.DirectoryFile ? CreateOptions_Values.FILE_DIRECTORY_FILE : CreateOptions_Values.FILE_NON_DIRECTORY_FILE; if (fileOpenReparsePointType == CreateOptionsFileOpenReparsePointType.FileOpenReparsePointSet) { createOptions |= CreateOptions_Values.FILE_OPEN_REPARSE_POINT; } if (fileDeleteOnCloseType == CreateOptionsFileDeleteOnCloseType.FileDeteteOnCloseSet) { createOptions |= CreateOptions_Values.FILE_DELETE_ON_CLOSE; } #endregion #region CreateContexts Smb2CreateContextRequest[] createContexts = new Smb2CreateContextRequest[] { }; Create_ContextType = contextType; switch (contextType) { case CreateContextType.NoCreateContext: break; case CreateContextType.InvalidCreateContext: case CreateContextType.InvalidCreateContextSize: testClient.BeforeSendingPacket(ReplacePacketByInvalidCreateContext); break; case CreateContextType.ValidCreateContext: testConfig.CheckCreateContext(CreateContextTypeValue.SMB2_CREATE_QUERY_ON_DISK_ID); createContexts = createContexts.Append(new Smb2CreateQueryOnDiskId()); break; default: throw new ArgumentException("contextType"); } #endregion #region ImpersonationLevel ImpersonationLevel_Values impersonation = ImpersonationLevel_Values.Impersonation; if (impersonationType == ImpersonationLevelType.InvalidImpersonationLevel) { impersonation = (ImpersonationLevel_Values)0x00000004; //Non-existed impersonation level } #endregion #region DesiredAccess AccessMask accessMask = AccessMask.GENERIC_READ | AccessMask.GENERIC_WRITE | AccessMask.DELETE; #endregion Smb2CreateContextResponse[] contextResponse; uint status = testClient.Create( treeId, fileName, createOptions, headerFlag, out fileID, out contextResponse, createContexts: createContexts, accessMask: accessMask, checker: (header, response) => { }, impersonationLevel: impersonation); CreateResponse((ModelSmb2Status)status, createCloseConfig); }