The following illustrates a typical message exchange sequence for a client connecting to a user level server, opening a file, reading its data, closing the file, and disconnecting from the server. Note: using the CIFS request batching mechanism (called the "AndX" mechanism), the second to sixth messages in this sequence can be combined into one, so there are really only three round trips in the sequence, and the last one can be done asynchronously by the client.
Client Command ========================== |
Server Response ========================================= |
SMB_COM_NEGOTIATE |
Must be the first message sent by client to the server. Includes a list of SMB dialects supported by the client. Server response indicates which SMB dialect should be used. |
SMB_COM_SESSION_SETUP_ANDX |
Transmits the user's name and credentials to the server for verification. Successful server response has Uid field set in SMB header used for subsequent SMBs on behalf of this user. |
SMB_COM_TREE_CONNECT |
Transmits the name of the disk share the client wants to access. Successful server response has Tid field set in SMB header used for subsequent SMBs referring to this resource. |
SMB_COM_OPEN |
Transmits the name of the file, relative to Tid, the client wants to open. Successful server response includes a file id (Fid) the client should supply for subsequent operations on this file. |
SMB_COM_READ |
Client supplies Tid, Fid, file offset, and number of bytes to read. Successful server response includes the requested file data. |
SMB_COM_CLOSE |
Client closes the file represented by Tid and Fid. Server responds with success code. |
SMB_COM_TREE_DISCONNECT |
Client disconnects from resource represented by Tid. |