Esempio n. 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);
        }
        /// <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;
        }