Usar rede hospedada sem fio, compartilhamento de conexão com a Internet
A Rede Hospedada sem Fio é um novo recurso WLAN com suporte no Windows 7 e Windows 8. Ele também tem suporte no Windows Server 2012 e no Windows Server 2008 R2 com o Serviço de LAN Sem Fio instalado. Esse recurso implementa duas funções principais:
- A virtualização de um adaptador sem fio físico em mais de um adaptador sem fio virtual, às vezes chamado de Wi-Fi Virtual.
- Um AP (ponto de acesso sem fio) baseado em software às vezes chamado de SoftAP que usa um adaptador sem fio virtual designado.
O ICS (Compartilhamento de Conexão com a Internet) é um recurso no Windows fornecido por meio do Serviço SharedAccess. Estritamente falando, SharedAccess permite o compartilhamento de rede por meio de um computador em que o acesso à rede compartilhada não necessariamente fornece acesso à Internet. Usamos o termo ICS e SharedAccess de forma intercambiável nesta seção, pois o Compartilhamento de Conexão com a Internet é um cenário importante para a Rede Hospedada sem fio e o termo ICS é mais conhecido pela comunidade de usuários.
A Rede Hospedada Sem Fio está intimamente vinculada ao ICS para habilitar a PAN (rede de área pessoal) sem fio e os cenários de compartilhamento de Internet. Esta seção fornece recomendações gerais aos desenvolvedores de aplicativos sobre como integrar a Rede Hospedada sem fio e o ICS usando a Rede Hospedada sem fio pública e as APIs do ICS.
Compartilhamento de Conexão com a Internet
O Serviço ICS opera em um dos dois modos possíveis:
Modo autônomo
Somente a função de servidor DHCPv4 está operando quando o serviço ICS é invocado. Esse é um modo de operação especial para o ICS e só é disponibilizado por meio da Rede Hospedada sem fio. Um usuário ou aplicativo não é capaz de iniciar e parar diretamente o ICS autônomo por meio de APIs ICS públicas ou comandos netsh . Iniciar a rede hospedada sem fio normalmente envolve iniciar o ICS no modo autônomo para usar a função de servidor DHCPv4 para fornecer endereços IPv4 privados para dispositivos conectados. A comunicação de rede para os dispositivos conectados é limitada ao envio e recebimento de pacotes de rede entre um dispositivo conectado e o computador local que hospeda a Rede Hospedada sem fio e entre os próprios dispositivos conectados. Isso habilita efetivamente o cenário de rede de área pessoal sem fio para a Rede Hospedada sem fio.
Modo completo
Todos os recursos do ICS estão operando quando o serviço é invocado, como conversão de endereços de rede e funções de servidor DHCP para IPv4 e IPv6. Esse é o modo normal de operação para o ICS. Um usuário ou aplicativo pode iniciar e parar o modo ICS completo por meio de APIs públicas ou comandos do NetShell. Por exemplo, esse serviço pode ser interrompido usando net stop sharedaccess de um prompt de comandos com privilégios elevados. Combinando a rede hospedada sem fio com o ICS completo, a comunicação de rede para os dispositivos conectados não se limita ao PAN sem fio. Qualquer dispositivo conectado tem acesso à rede (como a Internet) por meio da conexão de rede compartilhada do computador que executa a Rede Hospedada sem fio. Isso habilita efetivamente o cenário de compartilhamento de rede para a rede hospedada sem fio.
Nesta seção, usamos o termo ICS completo para significar o caso em que todas as funções ICS são invocadas no Serviço ICS para fornecer acesso a todos os recursos completos do ICS com a rede hospedada sem fio.
Os dois modos de operação do ICS são mutuamente exclusivos, com o ICS completo tendo maior precedência. O Serviço ICS pode fazer a transição do modo autônomo para o modo completo, mas não do modo completo para o modo autônomo. O modo autônomo do ICS foi introduzido no Windows 7 e no Windows Server 2008 R2 com o Serviço de LAN Sem Fio instalado em conjunto com o recurso rede hospedada sem fio. Ele não está disponível em versões anteriores do Windows.
Qualquer operação completa do ICS envolve dois adaptadores de rede diferentes no sistema:
- A interface pública. Esse é o adaptador de rede com acesso à Internet. É essa interface que o computador local que executa o ICS usa para compartilhar a Internet com clientes e dispositivos que se conectam a ela por meio do SoftAP.
- A interface privada. Esse é o adaptador de rede que outros dispositivos usam para se conectar ao computador local que está executando o ICS. Um servidor DHCPv4 está em execução nessa interface privada para fornecer endereços IP locais privados para os outros computadores remotos.
Quando a interface pública não tem acesso à Internet, o servidor DHCP na interface privada continua fornecendo endereços IP locais para os dispositivos conectados. O ICS autônomo envolve apenas a interface privada na qual o SoftAP está em execução; não envolve nenhuma interface pública.
A qualquer momento, há no máximo uma instância do ICS completo em execução no computador local. Se o ICS completo já estiver em execução no computador local, iniciar outro ICS completo exibirá os seguintes comportamentos funcionais:
- Se as interfaces pública e privada do novo ICS completo forem as mesmas que o ICS completo existente, iniciar o segundo ICS completo será equivalente a uma no-op.
- Se a nova interface pública for diferente da interface pública antiga, mas a nova interface privada for igual à interface privada antiga, iniciar um segundo ICS completo terá pouco impacto sobre os dispositivos conectados na mesma interface privada. A capacidade de acessar a Internet pode mudar com a nova interface pública.
- Se a nova interface privada for diferente da interface privada antiga, as funções ICS deixarão de funcionar na interface privada antiga e começarão a ser aplicadas à nova interface privada. Qualquer dispositivo remoto que se conecta ao computador local usando a interface privada antiga perderá a conectividade de IP com o computador local.
Quando o ICS completo já estiver em execução, invocar um segundo ICS completo causará interrupções para dispositivos conectados remotamente usando a interface privada antiga, desde que a segunda integração do ICS use uma nova interface privada diferente.
Para gerenciar e usar o serviço ICS para dar suporte à integração do ICS com a Rede Hospedada sem fio, um aplicativo de software deve primeiro obter uma interface INetSharingManager . A interface INetSharingManager fornece acesso direta ou indiretamente a todas as outras interfaces COM na API do ICS. O método get_SharingInstalled na interface INetSharingManager informa se o computador local dá suporte ao compartilhamento de conexão. O método get_EnumEveryConnection na interface INetSharingManager recupera uma interface de enumeração para todas as conexões na pasta connections. O método get_INetSharingConfigurationForINetConnection recupera uma interface INetSharingConfiguration para a conexão especificada. Os métodos na interface INetSharingConfiguration podem ser usados para consultar e alterar as configurações do ICS.
A rede hospedada sem fio deve ser iniciada antes de chamar o método get_EnumEveryConnection na interface INetSharingManager para enumerar todas as conexões na pasta connections.
Para obter informações sobre o ICS e as interfaces e métodos públicos que podem ser usados para consultar e alterar as configurações do ICS, consulte a documentação sobre o Compartilhamento de Conexão com a Internet e o Firewall de Conexão com a Internet.
Rede hospedada e integração ICS
Quando o ICS completo não está em execução, iniciar uma rede hospedada sem fio também inicia internamente o Serviço ICS no modo autônomo com apenas a função de servidor DHCPv4 para alocar endereços IP para os dispositivos conectados no adaptador de rede hospedada sem fio. O intervalo de endereços de sub-rede para o servidor DHCPv4 autônomo é 192.168.173.0/24. Isso é diferente do intervalo de sub-rede de 192.168.137.0/24 que é usado com o ICS completo.
Iniciar uma rede hospedada sem fio com o ICS completo emprega a seguinte lógica:
- Se o ICS completo ainda não estiver em execução, iniciar uma rede hospedada sem fio também iniciará o Serviço ICS com o servidor DHCPv4 autônomo.
- Se o ICS completo já estiver em execução e a interface privada for o adaptador de rede hospedada sem fio, basta iniciar a rede hospedada sem fio.
- Se o ICS completo já estiver em execução, mas a interface privada não for o adaptador de rede hospedada sem fio, a rede hospedada sem fio será iniciada sem a função de servidor DHCPv4 no adaptador de rede hospedada sem fio.
O impacto da lógica acima destaca os seguintes fatos:
- O ICS não faz a transição do modo completo para o modo autônomo.
- O modo autônomo só pode ser invocado pela Rede Hospedada sem fio quando o ICS não está em execução no modo completo.
- Se o ICS estiver em execução no modo autônomo, ele será antecipado para o modo completo se um usuário ou aplicativo iniciar o ICS no modo completo.
- A transição do modo autônomo para o modo completo no ICS causará interrupções para dispositivos conectados no PAN sem fio se a interface privada do ICS completo não for a mesma do SoftAP.
Leva tempo para iniciar ou parar o Serviço ICS no computador local no modo completo ou autônomo. Um aplicativo deve marcar o estado do Serviço ICS usando a função NotifyServiceStatusChange para garantir que o Serviço ICS não esteja no estado pendente de início/parada antes de iniciar ou parar a rede hospedada sem fio para uso com a integração do ICS.
Iniciando e parando a rede hospedada sem fio
O Windows fornece uma plataforma em que mais de um aplicativo simultâneo tem permissão para gerenciar uma Rede Hospedada sem fio ao mesmo tempo. Especificamente, cada aplicativo pode iniciar e parar a Rede Hospedada sem fio por conta própria, sem conhecimento prévio sobre outros aplicativos.
Há dois conjuntos de funções para iniciar e parar uma Rede Hospedada.
Vários aplicativos podem exigir o uso da Rede Hospedada sem fio. As funções WlanHostedNetworkStartUsing e WlanHostedNetworkStopUsing iniciam e param uma rede hospedada sem fio de maneira compatível com outros aplicativos simultâneos. As funções WlanHostedNetworkStartUsing e WlanHostedNetworkStopUsing permitem que um aplicativo tenha uma referência à Rede Hospedada sem fio. Esse mecanismo mantém a rede hospedada sem fio em execução, desde que pelo menos um outro aplicativo tenha uma referência atual à Rede Hospedada sem fio. Qualquer usuário pode chamar essas funções. Chamadas bem-sucedidas para WlanHostedNetworkStartUsing devem ser correspondidas por chamadas para a função WlanHostedNetworkStopUsing . Qualquer alteração de estado de Rede Hospedada causada pela função WlanHostedNetworkStartUsing será desfeita automaticamente se o aplicativo de chamada fechar seu identificador de chamada (chamando WlanCloseHandle com o mesmo parâmetro hClientHandle passado para WlanHostedNetworkStartUsing) ou se o processo terminar.
As funções WlanHostedNetworkForceStart e WlanHostedNetworkForceStop forçam o início e a interrupção de uma rede hospedada sem fio. Essas funções só poderão ser chamadas se o usuário tiver o privilégio elevado apropriado. Chamadas bem-sucedidas para WlanHostedNetworkForceStart podem eventualmente ser correspondidas por uma chamada para a função WlanHostedNetworkForceStop , dependendo do design do aplicativo. Essas funções fazem a transição do estado da Rede Hospedada sem fio sem associar a solicitação ao identificador de chamada do aplicativo. Qualquer alteração de estado de Rede Hospedada causada pela função WlanHostedNetworkForceStart não será desfeita automaticamente se o aplicativo de chamada fechar seu identificador de chamada (chamando WlanCloseHandle com o mesmo parâmetro hClientHandle passado para WlanHostedNetworkStartUsing) ou se o processo terminar. Se o aplicativo que chamou a função WlanHostedNetworkForceStart for fechado sem chamar uma das funções para interromper a Rede Hospedada sem fio, a Rede Hospedada será deixada em execução. Um aplicativo pode chamar a função WlanHostedNetworkForceStart depois de garantir que um usuário do sistema com privilégios elevados aceite os requisitos de energia maiores envolvidos na execução da Rede Hospedada sem fio por longos períodos de tempo.
As recomendações gerais sobre quais funções chamar para iniciar e parar uma rede hospedada sem fio são as seguintes:
- Use as funções WlanHostedNetworkStartUsing e WlanHostedNetworkStopUsing em um aplicativo para iniciar e parar uma rede hospedada sem fio.
- Não use a função WlanHostedNetworkForceStart para iniciar uma rede hospedada sem fio, a menos que seja absolutamente exigida pelo aplicativo. A função WlanHostedNetworkForceStart também requer privilégios elevados.
- Use apenas a função WlanHostedNetworkForceStop como um método de recuperação. A função WlanHostedNetworkForceStop faz com que uma rede hospedada sem fio pare imediatamente. Outros aplicativos que escutam notificações de Rede Hospedada sem fio podem precisar executar ações de recuperação. Para obter mais informações, consulte a discussão abaixo sobre a sequência de recuperação da rede hospedada sem fio.
Iniciar sequência para rede hospedada sem fio
Para um aplicativo que inicia uma Rede Hospedada sem fio com ICS completo, a recomendação é iniciar a Rede Hospedada sem fio e iniciar o ICS completo. Se uma rede hospedada sem fio já estiver em execução, um aplicativo deverá usar a função WlanHostedNetworkForceStop para interromper a Rede Hospedada sem fio somente se o ICS completo for necessário, mas não tiver sido habilitado antes da rede hospedada ser iniciada. Isso permitirá que outros aplicativos se recuperem de possíveis interrupções causadas pelo início do ICS completo. Para obter mais informações, consulte a discussão abaixo sobre a sequência de recuperação da rede hospedada sem fio. A operação combinada deve ter êxito e falhar como um todo.
Observação
A rede hospedada sem fio deve ser iniciada antes de tentar enumerar o adaptador correspondente usando a interface IEnumNetSharingEveryConnection .
As seguintes etapas ordenadas são a sequência de início recomendada em um aplicativo usando a Rede Hospedada sem fio com ICS completo:
- Chame a função WlanHostedNetworkInitSettings para garantir que a Rede Hospedada sem fio esteja configurada e pronta para ser usada.
- Chame as funções WlanHostedNetworkQueryStatus e WlanHostedNetworkQueryProperty para determinar se a rede hospedada sem fio é permitida e disponível. Se a Rede Hospedada sem fio não for permitida e não estiver disponível, retorne um erro.
- Teste para ver se o Serviço ICS usado para o ICS completo é permitido. Se o serviço ICS não puder ser iniciado, retorne um erro.
- Chame a função WlanHostedNetworkForceStop para forçar uma parada da Rede Hospedada sem fio.
- Chame a função WlanHostedNetworkStartUsing para iniciar a rede hospedada sem fio.
- Se a Rede Hospedada sem fio não for iniciada, retorne um erro.
- Se o ICS completo já estiver em execução e a interface pública ou privada atual for diferente da nova interface a ser usada, armazene em cache as interfaces públicas e privadas atuais. Um aplicativo também pode optar por retornar um erro ou solicitar ao usuário se a integração com o ICS já estiver em execução.
- Inicie o ICS completo com as novas configurações para as interfaces pública e privada.
- Se o ICS completo falhar ao iniciar com essas configurações, tente iniciar o serviço ICS completo com as interfaces públicas e privadas armazenadas em cache se o ICS completo estivesse em execução antes. Chame a função WlanHostedNetworkForceStop para interromper a Rede Hospedada sem fio e retornar um erro.
- Retorna o sucesso de que a rede hospedada sem fio e o ICS completo são bem-sucedidos.
Parar sequência para rede hospedada sem fio
Ao usar a Rede Hospedada sem fio com o ICS completo, um aplicativo que concluiu seu trabalho pode querer interromper a Rede Hospedada sem fio e o serviço ICS usado para o ICS completo. Nesse caso, é recomendável que a função WlanHostedNetworkForceStop seja chamada para interromper a Rede Hospedada em vez de chamar a função WlanHostedNetworkStopUsing . A função WlanHostedNetworkForceStop interrompe a rede hospedada sem fio e também serve para permitir que outros aplicativos se recuperem. Para obter mais informações, consulte a discussão abaixo sobre a sequência de recuperação da rede hospedada sem fio.
As seguintes etapas ordenadas são a sequência de parada recomendada em um aplicativo usando a Rede Hospedada sem fio e o ICS completo:
- Pare o ICS completo.
- Chame a função WlanHostedNetworkForceStop para interromper a rede hospedada sem fio.
Um aplicativo que usa rede hospedada sem fio sem ICS completo que está concluído com seu trabalho só precisa chamar a função WlanHostedNetworkStopUsing ou WlanHostedNetworkForceStop para interromper a rede hospedada sem fio. Se a função WlanHostedNetworkStartUsing foi chamada para iniciar a rede hospedada sem fio, o aplicativo deverá chamar a função WlanHostedNetworkStopUsing para interromper a rede hospedada sem fio. Se a rede hospedada sem fio já foi iniciada antes do aplicativo ou o aplicativo chamou a função WlanHostedNetworkForceStart para forçar o início da rede hospedada sem fio, o aplicativo pode chamar a função WlanHostedNetworkForceStop para interromper a rede hospedada sem fio ou não fazer nada (deixar a rede hospedada sem fio iniciada) dependendo do cenário.
Sequência de recuperação para rede hospedada sem fio
Um aplicativo que usa a Rede Hospedada sem fio pode ser afetado pelas ações de outros aplicativos. O serviço ICS e as interfaces para gerenciar o ICS não fornecem nenhum método para um aplicativo se registrar para notificações de alteração do ICS. Se outro aplicativo chamar os métodos EnableSharing ou DisableSharing na interface INetSharingConfiguration para habilitar ou desabilitar o compartilhamento em uma conexão, uma mensagem será enviada para a interface do usuário (a tela) no computador local e não para outros aplicativos. Portanto, um aplicativo precisa contar com as notificações de Rede Hospedada sem fio para executar ações de recuperação quando ocorrem alterações de rede hospedada sem fio ou ICS.
Um aplicativo que usa a Rede Hospedada sem fio deve se registrar para notificações de Rede Hospedada sem fio chamando wlanRegisterNotification. Se forem necessárias notificações apenas para a Rede Hospedada sem fio, o aplicativo deverá passar WLAN_NOTIFICATION_SOURCE_HNWK no parâmetro dwNotifSource passado para o WlanRegisterNotification. Se outras noticações sem fio também forem necessárias, WLAN_NOTIFICATION_SOURCE_HNWK deverá ser combinada com as constantes de origem de notificação para outros tipos de notificações sem fio desejadas e passar esse valor no parâmetro dwNotifSource .
A sequência de recuperação é a mesma para aplicativos com ou sem ICS completo, supondo que os aplicativos não queiram iniciar o serviço ICS novamente. Ao receber uma notificação de Rede Hospedada sem fio informando que a Rede Hospedada parou, faça o seguinte:
- Se o aplicativo chamou WlanHostedNetworkForceStart para iniciar a rede hospedada sem fio, reinicie a Rede Hospedada chamando WlanHostedNetworkForceStart. Caso contrário, chame WlanHostedNetworkStartUsing para reiniciar a rede hospedada sem fio.
Sequência de recuperação para dispositivos conectados
Dispositivos remotos ou computadores conectados à Rede Hospedada sem fio podem ser afetados pelas ações de outros aplicativos que afetam o ICS e a rede hospedada sem fio. Felizmente, a maioria dos dispositivos tem lógica de repetição interna no aplicativo de dispositivo para lidar com uma perda temporária de sinal ou roaming.
Uma possível sequência de recuperação para dispositivos ou computadores conectados à Rede Hospedada sem fio que perdem contato é o seguinte:
- O driver do dispositivo sem fio indica uma desconexão de mídia para as camadas superiores da pilha de rede no dispositivo.
- O aplicativo do dispositivo inicia verificações periódicas para a disponibilidade da Rede Hospedada sem fio.
- Depois que o aplicativo do dispositivo detectar novamente a Rede Hospedada sem fio, o dispositivo iniciará uma conexão sem fio.
- Após uma conexão bem-sucedida com a Rede Hospedada sem fio, o aplicativo do dispositivo atualiza suas configurações de IP adequadamente.
Tópicos relacionados