2.2.4.33 SMB_COM_TRANSACTION (0x25)

This command was introduced in the LAN Manager 1.0 dialect.

This command serves as the transport for the Transaction Subprotocol Commands. These commands operate on mailslots and named pipes, which are interprocess communication endpoints within the CIFS file system. If the size in bytes of the request exceeds the MaxBufferSize established during session setup, then the transaction MUST use the SMB_COM_TRANSACTION_SECONDARY (section 2.2.4.34) SMB to send the additional command data.

Transaction Subprotocol Command messages can exceed the maximum size of a single SMB message as determined by the value of the MaxBufferSize session parameter. If this is the case, then the client MUST use one or more SMB_COM_TRANSACTION_SECONDARY Requests (section 2.2.4.34.1) to transfer the transaction SMB_Data.Trans_Data and SMB_Data.Trans_Parameter bytes that did not fit in the initial message.

The client indicates that it has not sent all of the SMB_Data.Trans_Data bytes by setting DataCount to a value less than TotalDataCount. Similarly, if ParameterCount is less than TotalParameterCount, the client has more SMB_Data.Trans_Parameters bytes to send. Parameter bytes SHOULD take precedence over Data bytes, and clients SHOULD attempt to send as many bytes as possible in each message. Servers SHOULD be prepared, however, to accept SMB_Data.Trans_Parameters and SMB_Data.Trans_Data bytes in any order, in large or small amounts.

For both the request and the response, the position and length of the SMB_Data.Trans_Parameters and SMB_Data.Trans_Data fields is determined by the values of the SMB_Parameters.ParameterOffset, SMB_Parameters.ParameterCount, SMB_Parameters.DataOffset, and SMB_Parameters.DataCount fields. In addition, the SMB_Parameters.ParameterDisplacement and SMB_Parameters.DataDisplacement fields can be used to change the order in which subranges of bytes are transferred. Servers SHOULD transfer bytes in order and give precedence to SMB_Data.Trans_Parameters bytes. Clients SHOULD be prepared to reconstruct transaction SMB_Data.Trans_Parameters and SMB_Data.Trans_Data, regardless of the order or locations in which they are delivered.