/// <summary> /// to create a TreeConnectAndx request packet. /// </summary> /// <param name="uid">This field SHOULD identify the authenticated instance of the user.</param> /// <param name="smbParametersFlags">USHORT A 16-bit field used to modify the SMB_COM_TREE_CONNECT_ANDX /// request. The client MUST set reserved values to 0, and the server MUST ignore them.</param> /// <param name="path">STRING A null-terminated string that represents the server and share name of the resource /// to which the client is attempting to connect</param> /// <param name="service">The type of resource that the client intends to access</param> /// <param name="password">A null-terminated string that represents a share password in plaintext form.</param> /// <param name="andxPacket">the andx packet.</param> /// <returns>a TreeConnectAndx request packet</returns> /// <exception cref="System.NullReferenceException">There is no connection in context. </exception> public SmbTreeConnectAndxRequestPacket CreateTreeConnectAndxRequest( ushort uid, TreeConnectAndxFlags smbParametersFlags, string path, string service, byte[] password, SmbPacket andxPacket) { return this.CreateTreeConnectAndxRequest(this.Context.GetMessageId(this.connectionId), uid, this.defaultParameters.Flag, this.defaultParameters.Flag2, smbParametersFlags, path, service, password, andxPacket); }
/// <summary> /// to create a TreeConnectAndx request packet. /// </summary> /// <param name="messageId">This field SHOULD be the multiplex ID that is used to associate a response with a /// request.</param> /// <param name="uid">This field SHOULD identify the authenticated instance of the user.</param> /// <param name="flags">An 8-bit field of 1-bit flags describing various features in effect for the /// message</param> /// <param name="flags2">A 16-bit field of 1-bit flags that represent various features in effect for the /// message. Unspecified bits are reserved and MUST be zero.</param> /// <param name="smbParametersFlags">USHORT A 16-bit field used to modify the SMB_COM_TREE_CONNECT_ANDX /// request. The client MUST set reserved values to 0, and the server MUST ignore them.</param> /// <param name="path">STRING A null-terminated string that represents the server and share name of the resource /// to which the client is attempting to connect</param> /// <param name="service">The type of resource that the client intends to access</param> /// <param name="password">A null-terminated string that represents a share password in plaintext form.</param> /// <param name="andxPacket">the andx packet.</param> /// <returns>a TreeConnectAndx request packet</returns> public SmbTreeConnectAndxRequestPacket CreateTreeConnectAndxRequest( ushort messageId, ushort uid, SmbFlags flags, SmbFlags2 flags2, TreeConnectAndxFlags smbParametersFlags, string path, string service, byte[] password, SmbPacket andxPacket) { if (path == null) { path = string.Empty; } if (service == null) { service = string.Empty; } if (password == null) { password = new byte[0]; } SmbTreeConnectAndxRequestPacket packet = new SmbTreeConnectAndxRequestPacket(); packet.SmbHeader = CifsMessageUtils.CreateSmbHeader(SmbCommand.SMB_COM_TREE_CONNECT_ANDX, messageId, uid, 0, flags, flags2); SMB_COM_TREE_CONNECT_ANDX_Request_SMB_Parameters smbParameters = new SMB_COM_TREE_CONNECT_ANDX_Request_SMB_Parameters(); if (andxPacket == null) { smbParameters.AndXCommand = SmbCommand.SMB_COM_NO_ANDX_COMMAND; } else { smbParameters.AndXCommand = andxPacket.SmbHeader.Command; } smbParameters.AndXReserved = 0; smbParameters.Flags = (ushort)smbParametersFlags; smbParameters.PasswordLength = (ushort)password.Length; smbParameters.WordCount = (byte)(Marshal.SizeOf(smbParameters) / NumBytesOfWord); SMB_COM_TREE_CONNECT_ANDX_Request_SMB_Data smbData = new SMB_COM_TREE_CONNECT_ANDX_Request_SMB_Data(); smbData.Password = password; if ((flags2 & SmbFlags2.SMB_FLAGS2_UNICODE) == SmbFlags2.SMB_FLAGS2_UNICODE) { smbData.Pad = new byte[(smbData.Password.Length + 1) % 2]; smbData.Path = CifsMessageUtils.ToSmbStringBytes(path, true); } else { smbData.Pad = new byte[0]; smbData.Path = CifsMessageUtils.ToSmbStringBytes(path, false); } smbData.Service = CifsMessageUtils.ToSmbStringBytes(service, false); smbData.ByteCount = (ushort)(smbData.Password.Length + smbData.Pad.Length + smbData.Path.Length + smbData.Service.Length); packet.SmbParameters = smbParameters; packet.SmbData = smbData; packet.AndxPacket = andxPacket; return packet; }