コード例 #1
0
        /// <summary>
        /// Send sqos request and receive sqos response
        /// </summary>
        /// <param name="request">The sqos request packet</param>
        /// <param name="response">The sqos response packet</param>
        /// <returns>Status of the sqos response</returns>
        public uint SendAndReceiveSqosPacket(SqosRequestPacket request, out SqosResponsePacket response)
        {
            transport.SendIoctlPayload(CtlCode_Values.FSCTL_STORAGE_QOS_CONTROL, request.ToBytes());
            uint smb2Status;

            byte[] payload;
            transport.ExpectIoctlPayload(out smb2Status, out payload);
            if (smb2Status != Smb2Status.STATUS_SUCCESS || payload == null)
            {
                response = null;
                return(smb2Status);
            }

            response = new SqosResponsePacket();
            STORAGE_QOS_CONTROL_Header responseHeader = TypeMarshal.ToStruct <STORAGE_QOS_CONTROL_Header>(payload);

            // Parse the header first to decode the ProtocolVersion field.
            if (responseHeader.ProtocolVersion == (ushort)SQOS_PROTOCOL_VERSION.Sqos10)
            {
                response.FromBytes(SqosResponseType.V10, payload);
            }
            else if (responseHeader.ProtocolVersion == (ushort)SQOS_PROTOCOL_VERSION.Sqos11)
            {
                response.FromBytes(SqosResponseType.V11, payload);
            }

            return(smb2Status);
        }
コード例 #2
0
 /// <summary>
 /// Unmarshal the packet from a byte array to the response structure based on the response type.
 /// </summary>
 public void FromBytes(SqosResponseType type, byte[] payload)
 {
     if (type == SqosResponseType.V10)
     {
         STORAGE_QOS_CONTROL_Response_V10 sqosResponseV10 = TypeMarshal.ToStruct <STORAGE_QOS_CONTROL_Response_V10>(payload);
         Header        = sqosResponseV10.Header;
         TimeToLive    = sqosResponseV10.TimeToLive;
         Status        = sqosResponseV10.Status;
         MaximumIoRate = sqosResponseV10.MaximumIoRate;
         MinimumIoRate = sqosResponseV10.MinimumIoRate;
         BaseIoSize    = sqosResponseV10.BaseIoSize;
     }
     else if (type == SqosResponseType.V11)
     {
         STORAGE_QOS_CONTROL_Response_V11 sqosResponseV11 = TypeMarshal.ToStruct <STORAGE_QOS_CONTROL_Response_V11>(payload);
         Header           = sqosResponseV11.Header;
         TimeToLive       = sqosResponseV11.TimeToLive;
         Status           = sqosResponseV11.Status;
         MaximumIoRate    = sqosResponseV11.MaximumIoRate;
         MinimumIoRate    = sqosResponseV11.MinimumIoRate;
         MaximumBandwidth = sqosResponseV11.MaximumBandwidth;
         BaseIoSize       = sqosResponseV11.BaseIoSize;
     }
 }
コード例 #3
0
 /// <summary>
 /// Unmarshal the packet from a byte array to the response structure based on the response type.
 /// </summary>
 public void FromBytes(SqosResponseType type, byte[] payload)
 {
     if (type == SqosResponseType.V10)
     {
         STORAGE_QOS_CONTROL_Response_V10 sqosResponseV10 = TypeMarshal.ToStruct<STORAGE_QOS_CONTROL_Response_V10>(payload);
         Header = sqosResponseV10.Header;
         TimeToLive = sqosResponseV10.TimeToLive;
         Status = sqosResponseV10.Status;
         MaximumIoRate = sqosResponseV10.MaximumIoRate;
         MinimumIoRate = sqosResponseV10.MinimumIoRate;
         BaseIoSize = sqosResponseV10.BaseIoSize;
     }
     else if (type == SqosResponseType.V11)
     {
         STORAGE_QOS_CONTROL_Response_V11 sqosResponseV11 = TypeMarshal.ToStruct<STORAGE_QOS_CONTROL_Response_V11>(payload);
         Header = sqosResponseV11.Header;
         TimeToLive = sqosResponseV11.TimeToLive;
         Status = sqosResponseV11.Status;
         MaximumIoRate = sqosResponseV11.MaximumIoRate;
         MinimumIoRate = sqosResponseV11.MinimumIoRate;
         MaximumBandwidth = sqosResponseV11.MaximumBandwidth;
         BaseIoSize = sqosResponseV11.BaseIoSize;
     }
 }