Compartilhar via


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 no 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, já que 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 da Internet. Esta seção fornece recomendações gerais aos desenvolvedores de aplicativos sobre como integrar a Rede Hospedada sem fio e o ICS usando as APIs públicas de Rede Hospedada e ICS sem fio.

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 tradução de endereço de rede e funções de servidor DHCP para IPv4 e IPv6. Esse é o modo normal de operação para 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, este serviço pode ser interrompido usando o comando 'net stop sharedaccess' em um prompt de comando com permissões elevadas. Combinando rede hospedada sem fio com 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 ICS são mutuamente exclusivos, com o ICS completo tendo precedência mais alta. 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 ICS completa envolve dois adaptadores de rede diferentes no sistema:

  • A interface pública. Essa é a interface 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 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 iguais ao ICS completo existente, iniciar o segundo ICS completo será equivalente a um 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 aplicar à nova interface privada. Qualquer dispositivo remoto que se conecte ao computador local usando a interface privada antiga perderá a conectividade de IP com o computador local.

Quando o ICS completo já está em execução, a chamada de um segundo ICS completo interrompe os dispositivos conectados remotamente que usam a interface privada antiga, desde que a nova integração com o ICS utilize uma interface privada nova e 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ões. O método get_EnumEveryConnection na interface INetSharingManager recupera uma interface de enumeração para todas as conexões na pasta de conexões. O método get_INetSharingConfigurationForINetConnection recupera uma interface INetSharingConfiguration para a conexão especificada. 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 de conexões.

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ões com a Internet e o Firewall de Conexão com a Internet.

Rede hospedada e integração ICS

Quando o ICS completo não estiver em execução, iniciar uma rede hospedada sem fio também iniciará 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 na interface 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 ICS completo.

Iniciar uma rede hospedada sem fio com 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 a interface 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 a interface rede hospedada sem fio, a Rede Hospedada sem fio será iniciada sem a função de servidor DHCPv4 na interface rede hospedada sem fio.

O impacto da lógica acima realça 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 estiver 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 será disruptiva 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 verificar o estado do Serviço ICS usando a função NotifyServiceStatusChange para verificar se o Serviço ICS não está 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 interrompendo 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 forma 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 à 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 param 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 à 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 o aumento dos requisitos de energia 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 encerrar uma rede hospedada sem fio.
  • Não use a função WlanHostedNetworkForceStart para iniciar uma rede hospedada sem fio, a menos que seja absolutamente necessária 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.

Sequência de inicialização 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, em seguida, 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 ser bem-sucedida ou 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 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 do 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 estiver em execução antes. Chame a função WlanHostedNetworkForceStop para interromper a rede hospedada sem fio e retornar um erro.
  • Retorne o sucesso de que a rede hospedada sem fio e o ICS completo são bem-sucedidos.

Sequência de parada para rede hospedada sem fio

Ao utilizar a Rede Hospedada Sem Fio com ICS completo, um aplicativo que concluiu seu trabalho pode querer parar a Rede Hospedada Sem Fio e o serviço ICS utilizado para 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:

Um aplicativo que utiliza uma rede hospedada sem fio sem a ICS completa, ao concluir seu trabalho, só precisa chamar a função WlanHostedNetworkStopUsing ou WlanHostedNetworkForceStop para parar 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á tiver sido iniciada antes do aplicativo ou o aplicativo chamar a função WlanHostedNetworkForceStart para forçar o início da rede hospedada sem fio, o aplicativo poderá 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 o WlanRegisterNotification. Se forem necessárias notificações apenas para 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 que a Rede Hospedada parou, faça o seguinte:

Sequência de recuperação para dispositivos conectados

Dispositivos ou computadores remotos 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 possui uma lógica de repetição integrada no aplicativo 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 às camadas superiores da pilha de protocolos de rede no dispositivo.
  • O aplicativo do dispositivo inicia verificações periódicas sobre a disponibilidade da Rede Hospedada sem fio.
  • Depois que o aplicativo de 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.

Sobre a Rede Hospedada Sem Fio

Exemplo de rede hospedada sem fio

WlanHostedNetworkForceStart

WlanHostedNetworkInitSettings

WlanHostedNetworkQueryProperty

WlanHostedNetworkQuerySecondaryKey

WlanHostedNetworkQueryStatus

WlanHostedNetworkRefreshSecuritySettings

WlanHostedNetworkSetProperty

WlanHostedNetworkSetSecondaryKey

WlanHostedNetworkStartUsing

WlanHostedNetworkStopUsing

WlanRegisterVirtualStationNotification