
Estou tentando adicionar suporte ToS (QoS) a um cliente SIP (retirado do Linphone de código aberto) da seguinte forma:
retval = setsockopt(session->rtp.socket, proto, value_type, (SOCKET_OPTION_VALUE)&tos, sizeof(tos));
Mas no Windows 7, todas as minhas tentativas de adicionar ToS falharam; ele continua definindo zeros (como visto no Wireshark). Alguém disse que é um “recurso” (leia-se bug) do Windows.
eu li emesta páginacomo criar uma política de QoS, então criei uma manualmente usando a GUI:
Eu tentei as seguintes etapas:
- Vá para
HKLM\System\CurrentControlSet\Services\Tcpip\QoS
- Crie a
QoS
chave se ela não existir - Adicione um
REG-SZ
parâmetro chamadoDo not use NLA
e atribua o valor a ele1
- Reinício
Funciona como desejado, mas agora minha pergunta é como posso automatizar a criação de tal política (por exemplo, para que isso possa ser feito durante a instalação de um programa)?
[EDITAR]
Meu código é C puro e usar código-fonte C# será um pouco problemático, pois uso o minGW
ambiente e as ferramentas com ./configure && make && make install
.
Responder1
O artigoAtualizando programaticamente a política local no Windowsdescreve uma biblioteca .NET que pode ajudar com esse problema.
Se você não deseja escrever um programa .net, a solução mais simples seria criar um AutoHotkeymacro, possivelmente compilada em um .exe, que fará as manipulações da GUI que criam essa política de grupo.
Se você estiver usando Windows 8 ou Server 2012, a configuração de QoS é possível via PowerShell:
Cmdlets de qualidade de serviço (QoS) de rede no Windows PowerShell.