3.3.5.15.5 Handling a Source File Key Request

When the server receives a request with an SMB2 header with a Command value equal to SMB2 IOCTL, and a CtlCode of FSCTL_SRV_REQUEST_RESUME_KEY, message handling proceeds as follows.

The SRV_REQUEST_RESUME_KEY Response is an opaque 24 byte blob followed by optional context as described in 2.2.32.3.<388>

The server MUST provide a 24-byte value that is used to uniquely identify the open. The server SHOULD use Open.DurableFileId, or alternately, MAY use an internally generated value that is unique for all opens on the server.<389> The server MUST set the Open.ResumeKey and ResumeKey values in the SRV_REQUEST_RESUME_KEY Response to the generated value.

If the maximum output buffer size specified is too small to contain an SRV_REQUEST_RESUME_KEY structure, the server MUST return the status STATUS_INVALID_PARAMETER.

The server MUST construct an SMB2 IOCTL response following the syntax specified in section 2.2.32, with the following values:

  • CtlCode MUST be set to FSCTL_SRV_REQUEST_RESUME_KEY.

  • FileId.Persistent MUST be set to Open.DurableFileId. FileId.Volatile MUST be set to Open.FileId.

  • InputOffset SHOULD be set to the offset, in bytes, from the beginning of the SMB2 header to the Buffer[] field of the response.

  • InputCount SHOULD be set to zero.

  • OutputOffset MUST be set to InputOffset + InputCount, rounded up to a multiple of 8.

  • OutputCount MUST be set to 32.

  • Flags MUST be set to zero.

  • The server MUST copy the constructed SRV_REQUEST_RESUME_KEY that is used to identify the open into the Buffer field at the OutputOffset computed above.

The response MUST be sent to the client.