Partilhar via


Função QOSSetFlow (qos2.h)

A função QOSSetFlow é chamada por um aplicativo para solicitar que o subsistema QOS priorize os pacotes do aplicativo e altere o tráfego de fluxo. Essa função também é usada para notificar o subsistema QoS de uma alteração de fluxo: por exemplo, se a taxa de fluxo for alterada para considerar o congestionamento de rede ou se o valor de prioridade do QoS exigir ajuste para transferir ou transmitir diferentes tipos de conteúdo em uma única conexão de soquete persistente.

Sintaxe

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
);

Parâmetros

[in] QOSHandle

Manipule para o subsistema QOS retornado por QOSCreateHandle.

[in] FlowId

Um identificador de fluxo. Um QOS_FLOWID é um inteiro sem sinal de 32 bits.

[in] Operation

Um QOS_SET_FLOW tipo enumerado que identifica o que será alterado no fluxo. Esse parâmetro especifica qual estrutura o Buffer conterá.

Valor Significado
QOSSetTrafficType
0
O tipo de tráfego do fluxo será alterado. O Buffer conterá um ponteiro para uma constante QOS_TRAFFIC_TYPE .
QOSSetOutgoingRate
1
A taxa de fluxo será alterada. O Buffer conterá um ponteiro para uma estrutura de QOS_FLOWRATE_OUTGOING .
QOSSetOutgoingDSCPValue
2
Windows 7, Windows Server 2008 R2 e posterior: o valor DSCP de saída será alterado. O Buffer conterá um ponteiro para um valor DWORD que define o valor DSCP arbitrário.
Nota Essa configuração exige que o aplicativo de chamada seja membro dos Administradores ou do grupo Operadores de Configuração de Rede.
 

[in] Size

O tamanho do parâmetro Buffer , em bytes.

[in] Buffer

Ponteiro para a estrutura especificada pelo valor do parâmetro Operation .

Flags

Reservado para uso futuro. Esse parâmetro deve ser definido como 0.

[out, optional] Overlapped

Ponteiro para uma estrutura OVERLAPPED usada para saída assíncrona. Isso deverá ser definido como NULL se essa função não estiver sendo chamada de forma assíncrona.

Valor retornado

Se a função for bem-sucedida, o valor retornado será diferente de zero.

Se a função falhar, o valor retornado será 0. Para obter informações de erro estendidas, chame GetLastError. Alguns códigos de erro possíveis seguem.

Código de retorno Descrição
ERROR_ACCESS_DISABLED_BY_POLICY
O subsistema QoS está configurado atualmente pela política para não permitir essa operação no caminho de rede entre esse host e o host de destino. Por exemplo, a política padrão impede que experimentos qWAVE sejam executados em destinos fora do link.
ERROR_IO_PENDING
A solicitação de fluxo de atualização foi recebida com êxito. Os resultados serão retornados durante a conclusão sobreposta.
ERROR_ACCESS_DENIED
O aplicativo de chamada não tem privilégios suficientes para a operação solicitada.
ERROR_INVALID_HANDLE
O parâmetro QOSHandle é inválido.
ERROR_INVALID_PARAMETER
O parâmetro FlowId é inválido.
ERROR_NETWORK_BUSY
As propriedades de fluxo solicitadas não estavam disponíveis nesse caminho.
ERROR_NOT_FOUND
O parâmetro FlowId especificado não pode ser encontrado.
ERROR_NOT_ENOUGH_MEMORY
Falha na alocação de memória.
ERROR_NOT_SUPPORTED
A operação que está sendo executada requer informações que o subsistema QoS não tem. Atualmente, não há suporte para a obtenção dessas informações nessa rede. Por exemplo, as estimativas de largura de banda não podem ser obtidas em um caminho de rede em que o host de destino está fora do link.
ERROR_NO_SYSTEM_RESOURCES
Não há recursos suficientes para executar a operação.
ERROR_IO_DEVICE
Não foi possível executar a solicitação devido a um erro de dispositivo de E/S.
ERROR_DEVICE_REINITIALIZATION_NEEDED
O dispositivo indicado exige a reinicialização devido a erros de hardware. O aplicativo deve limpo e chamar QOSCreateHandle novamente.
ERROR_ADAP_HDW_ERR
Ocorreu um erro de hardware do adaptador de rede.
ERROR_HOST_UNREACHABLE
Não é possível acessar o local de rede.
ERROR_RETRY
Atualmente, não há dados suficientes sobre condições de rede para responder à consulta. Normalmente, esse é um estado transitório em que qWAVE errou no lado da cautela, pois aguarda mais dados antes de verificar o estado da rede.
ERROR_UNEXP_NET_ERR
Falha na conexão de rede com o host remoto.

Comentários

Se QOSStartTrackingClient ainda não tiver sido chamado, chamar QOSSetFlow fará com que o subsistema QOS execute o seguinte.

  • Descubra se o caminho de rede de ponta a ponta dá suporte à priorização.
  • Acompanhe as características de rede de ponta a ponta por meio de experimentos de rede. Esses experimentos não colocam nenhum estresse notável na rede.

Se QOSSetFlow retornar ERROR_NETWORK_BUSY não haverá largura de banda suficiente para a taxa de fluxo especificada e a prioridade de rede não poderá ser concedida. O aplicativo ainda pode transmitir um fluxo de dados, mas o fluxo não receberá a marcação de prioridade. O ideal é que um aplicativo não tente transmitir na taxa solicitada se não houver largura de banda suficiente. Se ERROR_NETWORK_BUSY for retornado, a seguinte estratégia segura estará disponível:

  1. Consulte o subsistema QoS com QOSNotifyFlow para determinar a largura de banda disponível atual e comece a transmitir na taxa mais baixa recebida com prioridade se a rede der suporte a ele.
  2. Solicite notificação com QOSNotifyFlow para quando a quantidade de largura de banda originalmente desejada estiver disponível. Quando a notificação for recebida, chame QOSSetFlow com a nova solicitação de largura de banda e envie à nova taxa novamente com priorização, se houver suporte.

Opcionalmente, essa função pode ser chamada de forma assíncrona.

Exemplos

O snippet de código a seguir demonstra o uso de QOSSetFlow em um aplicativo. Os parâmetros de entrada QOSHandle, FlowId, FlowId, QOSSetOutgoingRate e sizeof(QoSOutgoingFlowrate) devem ser inicializados anteriormente por outras funções e cálculos de QoS dentro do aplicativo.

Outros exemplos de função de QoS que mostram a inicialização de parâmetros incluem QOSCreateHandle, QOSAddSocketToFlow e QOSQueryFlow.

Consulte o SDK do Windows para obter uma listagem de código de exemplo completa. Pasta do 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;
}


Requisitos

   
Cliente mínimo com suporte Windows Vista [somente aplicativos da área de trabalho]
Servidor mínimo com suporte Windows Server 2008 [somente aplicativos da área de trabalho]
Plataforma de Destino Windows
Cabeçalho qos2.h (inclua Qos2.h)
Biblioteca Qwave.lib
DLL Qwave.dll

Confira também

Experiência de áudio/vídeo do Windows de qualidade (qWAVE)