/// <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; }