Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Функция QOSSetFlow вызывается приложением для запроса подсистемы QOS для определения приоритета пакетов приложения и изменения потока трафика. Эта функция также используется для уведомления подсистемы QoS об изменении потока: например, если скорость потока изменяется с учетом перегрузки сети или если значение приоритета QoS требует корректировки для передачи или потоковой передачи различных типов содержимого через одно постоянное подключение сокета.
Синтаксис
ExternC BOOL QOSSetFlow(
[in] HANDLE QOSHandle,
[in] QOS_FLOWID FlowId,
[in] QOS_SET_FLOW Operation,
[in] ULONG Size,
[in] PVOID Buffer,
DWORD Flags,
[out, optional] LPOVERLAPPED Overlapped
);
Параметры
[in] QOSHandle
Дескриптор подсистемы QOS, возвращаемой QOSCreateHandle.
[in] FlowId
Идентификатор потока. QOS_FLOWID — это 32-разрядное целое число без знака.
[in] Operation
QOS_SET_FLOW перечислимый тип, определяющий, что будет изменено в потоке. Этот параметр указывает, какую структуру будет содержать буфер .
Значение | Значение |
---|---|
|
Тип трафика потока будет изменен. Буфер будет содержать указатель на константу QOS_TRAFFIC_TYPE. |
|
Скорость потока будет изменена. Буфер будет содержать указатель на структуру QOS_FLOWRATE_OUTGOING. |
|
Windows 7, Windows Server 2008 R2 и более поздних версий: исходящее значение DSCP будет изменено.
Буфер будет содержать указатель на значение DWORD, определяющее произвольное значение DSCP.
Примечание Для этого параметра требуется, чтобы вызывающее приложение было членом группы "Администраторы" или "Операторы конфигурации сети".
|
[in] Size
Размер параметра Buffer в байтах.
[in] Buffer
Указатель на структуру, заданную значением параметра Operation .
Flags
Зарезервировано для последующего использования. Этот параметр должен иметь значение 0.
[out, optional] Overlapped
Указатель на структуру OVERLAPPED, используемую для асинхронного вывода. Если эта функция не вызывается асинхронно, ей необходимо присвоить значение NULL .
Возвращаемое значение
Если функция выполняется успешно, возвращается ненулевое значение.
Если функция завершается сбоем, возвращаемое значение равно 0. Дополнительные сведения об ошибке можно получить, вызвав GetLastError. Ниже приведены некоторые возможные коды ошибок.
Код возврата | Описание |
---|---|
|
В настоящее время подсистема QoS настроена политикой, чтобы запретить эту операцию на сетевом пути между этим узлом и конечным узлом. Например, политика по умолчанию запрещает запуск экспериментов qWAVE в местах назначения вне канала. |
|
Запрос потока обновления успешно получен. Результаты будут возвращены во время перекрытия завершения. |
|
Вызывающее приложение не имеет достаточных привилегий для запрошенной операции. |
|
Недопустимый параметр QOSHandle . |
|
Недопустимый параметр FlowId . |
|
Запрошенные свойства потока недоступны по этому пути. |
|
Не удается найти указанный параметр FlowId . |
|
Не удалось выделить память. |
|
Выполняемой операции требуются сведения, отсутствуют в подсистеме QoS. Получение этих сведений в этой сети в настоящее время не поддерживается. Например, оценки пропускной способности нельзя получить по сетевому пути, где конечный узел находится вне связи. |
|
Недостаточно ресурсов для выполнения операции. |
|
Выполнить запрос невозможно из-за ошибки устройства ввода-вывода. |
|
Указанное устройство требует повторной инициализации из-за ошибок оборудования. Приложение должно очиститься и снова вызвать QOSCreateHandle . |
|
Произошла ошибка оборудования сетевого адаптера. |
|
Не удается получить доступ к сетевому расположению. |
|
В настоящее время недостаточно данных о сетевых условиях для ответа на запрос. Обычно это временное состояние, в котором qWAVE имеет ошибку на стороне осторожности, так как он ожидает больше данных, прежде чем определить состояние сети. |
|
Сбой сетевого подключения к удаленному узлу. |
Комментарии
Если QOSStartTrackingClient еще не был вызван, вызов QOSSetFlow приведет к тому, что подсистема QOS выполнит следующие действия.
- Узнайте, поддерживает ли сквозной сетевой путь определение приоритетов.
- Отслеживайте комплексные характеристики сети с помощью сетевых экспериментов. Эти эксперименты не примечают к сети.
Если функция QOSSetFlow возвращает ERROR_NETWORK_BUSY для указанной скорости потока недостаточно пропускной способности и не удается предоставить приоритет сети. Приложение по-прежнему может передавать поток данных, но поток не получит маркировку приоритета. В идеале приложение не будет пытаться выполнить потоковую передачу по запрошенной скорости, если пропускная способность недостаточна. Если возвращается ERROR_NETWORK_BUSY , доступна следующая безопасная стратегия:
- Запросите подсистему QoS с помощью QOSNotifyFlow , чтобы определить текущую доступную пропускную способность и начать потоковую передачу с более низкой скоростью с приоритетом, если сеть поддерживает ее.
- Запросите уведомление с помощью QOSNotifyFlow о доступности первоначально требуемой пропускной способности. При получении уведомления вызовите QOSSetFlow с новым запросом пропускной способности и отправьте по новой скорости еще раз с определением приоритетов, если это поддерживается.
Эта функция может быть вызвана асинхронно.
Примеры
В следующем фрагменте кода показано использование QOSSetFlow в приложении. Входные параметры QOSHandle, FlowId, FlowId, QOSSetOutgoingRate и sizeof(QoSOutgoingFlowrate) должны быть ранее инициализированы другими функциями качества обслуживания и вычислениями в приложении.
Другие примеры функций QoS, демонстрирующие инициализацию параметров, включают QOSCreateHandle, QOSAddSocketToFlow и QOSQueryFlow.
Полный список примеров кода см. в пакете Windows SDK. Папка пакета SDK: Samples\NetDs\GQos\Qos2
if( QOSSetFlow( QOSHandle,
FlowId,
QOSSetOutgoingRate, // Operation
sizeof(QoSOutgoingFlowrate), // Size
&QoSOutgoingFlowrate, // Buffer
0, // Flags (Must be set to 0 with QoS Version 1.0)
NULL) // Overlapped
== 0 )
{
if( ERROR_INVALID_PARAMETER == GetLastError())
{
std::cerr << __FILE__ <<" Line: " << __LINE__ ;
std::cerr << " - QOSSetFlow failed. Exception code: ";
std::cerr << GetLastError() << " - Invalid parameter";
std::cerr << std::endl;
}
else
{
std::cerr << __FILE__ <<" Line: " << __LINE__ ;
std::cerr << " - QOSSetFlow failed. Exception code: ";
std::cerr << GetLastError() << std::endl;
}
}
else
{
std::cout << "QOSSetFlow set outgoing flowrate bandwidth to ";
std::cout << QoSOutgoingFlowrate.Bandwidth;
std::cerr << std::endl;
}
Требования
Минимальная версия клиента | Windows Vista [только классические приложения] |
Минимальная версия сервера | Windows Server 2008 [только классические приложения] |
Целевая платформа | Windows |
Header | qos2.h (включая Qos2.h) |
Библиотека | Qwave.lib |
DLL | Qwave.dll |