/// <summary> /// Create TRANS_QUERY_NMPIPE_INFO Response /// </summary> /// <param name="connection">the connection identified the client</param> /// <param name = "outputBufferSize"> /// The first word of the data buffer that MUST contain the actual size of the buffer for outgoing (server) /// I/O /// </param> /// <param name = "inputBufferSize"> /// This value MUST be the actual size of the buffer for incoming (client) I/O /// </param> /// <param name = "maximumInstances"> /// This value MUST be the maximum allowed number of named pipe instances. /// </param> /// <param name = "currectInstances">This value MUST be the current number of named pipe instances </param> /// <param name = "pipeName"> /// This value MUST be a null-terminated string containing the name of the named pipe /// </param> /// <returns>The SmbTransQueryNmpipeInfoResponsePacket </returns> /// <exception cref="ArgumentNullException">connection must not be null</exception> public virtual SmbTransQueryNmpipeInfoResponsePacket CreateTransQueryNmpipeInfoResponse( SmbServerConnection connection, ushort outputBufferSize, ushort inputBufferSize, byte maximumInstances, byte currectInstances, string pipeName) { if (connection == null) { throw new ArgumentNullException("connection"); } SmbTransQueryNmpipeInfoResponsePacket packet = new SmbTransQueryNmpipeInfoResponsePacket(); // get the request packet SmbPacket request = connection.GetRequestPacket(connection.MessageId); // create smb packet header packet.SmbHeader = CifsMessageUtils.CreateSmbHeader( SmbCommand.SMB_COM_TRANSACTION, connection.ProcessId, connection.MessageId, request.SmbHeader.Uid, request.SmbHeader.Tid, (SmbFlags)connection.Capability.Flag, (SmbFlags2)connection.Capability.Flags2); // update smb parameters SMB_COM_TRANSACTION_SuccessResponse_SMB_Parameters smbParameters = packet.SmbParameters; smbParameters.Setup = new ushort[0]; smbParameters.WordCount = (byte)(CifsMessageUtils.GetSize<SMB_COM_TRANSACTION_SuccessResponse_SMB_Parameters>( smbParameters) / SmbCapability.NUM_BYTES_OF_WORD); // update smb data SMB_COM_TRANSACTION_SuccessResponse_SMB_Data smbData = packet.SmbData; // update trans data TRANS_QUERY_NMPIPE_INFO_Response_Trans_Data transData = packet.TransData; transData.OutputBufferSize = outputBufferSize; transData.InputBufferSize = inputBufferSize; transData.MaximumInstances = maximumInstances; transData.CurrentInstances = currectInstances; transData.PipeName = CifsMessageUtils.ToSmbStringBytes(pipeName, connection.Capability.IsUnicode); transData.PipeNameLength = (byte)transData.PipeName.Length; // store the parameters and data to packet. packet.TransData = transData; packet.SmbParameters = smbParameters; packet.SmbData = smbData; packet.UpdateCountAndOffset(); return packet; }