
Я пытаюсь добавить поддержку ToS (QoS) в SIP-клиент (взятый из Linphone с открытым исходным кодом) следующим образом:
retval = setsockopt(session->rtp.socket, proto, value_type, (SOCKET_OPTION_VALUE)&tos, sizeof(tos));
Но в Windows 7 все мои попытки добавить ToS провалились; он продолжает устанавливать нули (как видно в Wireshark). Кто-то сказал, что это «фича» (читай баг) в Windows.
Я читал вэта страницакак создать политику QoS, поэтому я создал ее вручную с помощью графического интерфейса:
Я попробовал следующие шаги:
- Идти к
HKLM\System\CurrentControlSet\Services\Tcpip\QoS
- Создайте
QoS
ключ, если его нет - Добавьте
REG-SZ
параметр с именемDo not use NLA
и присвойте ему значение1
- Перезагрузить
Все работает так, как и хотелось бы, но теперь у меня возник вопрос: как автоматизировать создание такой политики (например, чтобы это можно было сделать во время установки программы)?
[РЕДАКТИРОВАТЬ]
Мой код написан на чистом C, и использование исходного кода C# будет немного проблематичным, поскольку я использую minGW
среду и инструменты с ./configure && make && make install
.
решение1
СтатьяПрограммное обновление локальной политики в Windowsописывает библиотеку .NET, которая может помочь решить эту проблему.
Если вы не хотите писать .net-программу, самым простым решением будет создать AutoHotkeyмакрос, возможно, скомпилированный в .exe, который будет выполнять манипуляции с графическим интерфейсом, создающие эту групповую политику.
Если вы используете Windows 8 или Server 2012, настройка QoS возможна через PowerShell:
Командлеты сетевого качества обслуживания (QoS) в Windows PowerShell.