3.3.5.22 Receiving an SMB_COM_LOCK_AND_READ Request

When the server receives an SMB_COM_LOCK_AND_READ Request (section 2.2.4.20.1), if the request is on a named pipe, the server MUST fail the request with an NT status code of STATUS_INVALID_DEVICE_REQUEST (0xC0000010); otherwise, the server MUST treat the request as if it is an SMB_COM_LOCK_BYTE_RANGE Request (section 2.2.4.13.1) followed by an SMB_COM_READ Request (section 2.2.4.11.1). Processing MUST proceed as specified in sections 3.3.5.15 and 3.3.5.13, with the following exceptions:

  • Their triggering requests will be the SMB_COM_LOCK_AND_READ Request of this event.

  • If processing results in an error during the process specified in section 3.3.5.15, the server MUST construct an SMB_COM_LOCK_AND_READ (section 2.2.4.20.1) error response and MUST NOT continue to the process indicated in section 3.3.5.13.

  • If processing results in an error during the process specified in section 3.3.5.13, the server MUST construct an SMB_COM_LOCK_AND_READ Request error response.

  • The server MUST construct an SMB_COM_LOCK_AND_READ Response (section 2.2.4.20.2) instead of the messages indicated in 3.3.5.15 and 3.3.5.13.

  • The response fields MUST be populated with the data that would go in the corresponding fields of both SMB_COM_LOCK_BYTE_RANGE Request (section 2.2.4.13.1) and SMB_COM_READ Response (section 2.2.4.11.2) messages.

An entry for the newly-granted byte-range lock MUST be added to Server.Open.Locks. The type of the lock MUST be exclusive, and the entry MUST be formatted with a 32-bit offset (LOCKING_ANDX_RANGE32).<273>

The response MUST be sent to the client as specified in section 3.3.4.1.