3.1.4.1 Application Issues a Storage Quality of Service Control Request for a Logical Flow

Before issuing a Storage Quality of Service Control request, the client MUST have already established a connection to the server by calling the interface specified in [MS-SMB2] section 3.2.4.2 and providing the following input parameters:

  • The application-provided server name.

  • The application-provided share name.

  • The application-provided user credentials.

If the connection is successfully established, the client MUST open the remote file by calling the interface specified in [MS-SMB2] section 3.2.4.3 and provide the following input parameters:

  • File name

After opening the remote file, in order to issue a Storage Quality of Service Request for the remote file, the client MUST construct a STORAGE_QOS_CONTROL_REQUEST structure, as specified in section 2.2.2.2, as follows:

  • All fields of the STORAGE_QOS_CONTROL_REQUEST structure SHOULD initially be set to zero.

  • The ProtocolVersion field MUST be set to an implementation-specific value<3>.

  • The Options field MUST contain at least one of the flags defined in section 2.2.2.2, as specified in the rest of this section and in section 3.1.6.

  • If the Options field includes the STORAGE_QOS_CONTROL_GET_STATUS flag, the maximum output buffer size MUST be at least 80 (size of STORAGE_QOS_CONTROL_RESPONSE).

  • If the handle to the Open has not yet been associated to a logical flow, the Options field MUST include the STORAGE_QOS_CONTROL_FLAG_SET_LOGICAL_FLOW_ID flag and LogicalFlowID must be set to a non-empty GUID.

  • If the Options field includes the STORAGE_QOS_CONTROL_FLAG_PROBE_POLICY flag, the LogicalFlowID MUST NOT be set to an empty GUID.

  • If the Options field includes the STORAGE_QOS_CONTROL_FLAG_UPDATE_COUNTERS flag the client MUST set the following request fields:

    • IoCountIncrement is set to LogicalFlow.IoCountIncrement

    • NormalizedIoCountIncrement is set to LogicalFlow.NormalizedIoCountIncrement

    • LatencyIncrement is set to LogicalFlow.LatencyIncrement

    • LowerLatencyIncrement is set to LogicalFlow.LowerLatencyIncrement

    • If Dialect is 1.1, then KilobyteCountIncrement is set to LogicalFlow.KilobyteCountIncrement

    The client MUST ensure the following after sending the request:

    • LogicalFlow.IoCountIncrement is set to zero.

    • LogicalFlow.NormalizedIoCountIncrement is set to zero.

    • LogicalFlow.LatencyIncrement is set to zero.

    • LogicalFlow.LowerLatencyIncrement is set to zero.

    • If Dialect is 1.1, then LogicalFlow.KilobyteCountIncrement is set to zero.

The client MUST call the interface specified in [MS-SMB2] section 3.2.4.20.11, supplying the following input parameters:

  • Application-provided handle to identify the Open.

  • Control code: FSCTL_STORAGE_QOS_CONTROL.

  • STORAGE_QOS_CONTROL_REQUEST structure as payload.

  • The maximum output buffer size that it will accept.