Использование беспроводной размещенной сети, общий доступ к подключению к Интернету
Беспроводная размещенная сеть — это новая функция WLAN, поддерживаемая в Windows 7 и Windows 8. Она также поддерживается в Windows Server 2012 и Windows Server 2008 R2 с установленной службой беспроводной локальной сети. Эта функция реализует две основные функции:
- Виртуализацию физического беспроводного адаптера в несколько виртуальных беспроводных адаптеров иногда называют виртуальным Wi-Fi.
- Программную точку беспроводного доступа (AP) иногда называют SoftAP, которая использует назначенный виртуальный беспроводной адаптер.
Общий доступ к подключению к Интернету (ICS) — это функция Windows, предоставляемая через службу SharedAccess. Строго говоря, SharedAccess обеспечивает общий доступ к сети через компьютер, где общий сетевой доступ не обязательно обеспечивает доступ к Интернету. В этом разделе термины ICS и SharedAccess взаимозаменяемы, так как общий доступ к интернет-подключениям является основным сценарием для беспроводной размещенной сети, а термин ICS лучше известен сообществу пользователей.
Беспроводная размещенная сеть тесно связана с ICS для реализации сценариев беспроводной личной сети (PAN) и общего доступа к Интернету. В этом разделе приводятся общие рекомендации для разработчиков приложений о том, как интегрировать беспроводную размещенную сеть и ICS с помощью общедоступной беспроводной сети и API ICS.
Общий доступ к подключению Интернета
Служба ICS работает в одном из двух возможных режимов:
Автономный режим
При вызове службы ICS работает только серверная функция DHCPv4. Это специальный режим работы для ICS, доступный только через беспроводную размещенную сеть. Пользователь или приложение не могут напрямую запускать и останавливать автономные службы ICS с помощью общедоступных API-интерфейсов ICS или команд netsh . Запуск беспроводной размещенной сети обычно включает запуск ICS в автономном режиме для использования функции сервера DHCPv4 для предоставления частных IPv4-адресов для подключенных устройств. Сетевое взаимодействие для подключенных устройств ограничено отправкой и получением сетевых пакетов между подключенным устройством и локальным компьютером, на котором размещена беспроводная размещенная сеть, а также между самими подключенными устройствами. Это позволяет эффективно реализовать сценарий беспроводной личной сети для беспроводной размещенной сети.
Полный режим
Все функции ICS работают при вызове службы, например преобразование сетевых адресов и функции DHCP-сервера для IPv4 и IPv6. Это обычный режим работы для ICS. Пользователь или приложение может запускать и останавливать полный режим ICS с помощью общедоступных API или команд netshell. Например, эту службу можно остановить с помощью команды net stop sharedaccess из командной строки с повышенными привилегиями. Объединяя беспроводную размещенную сеть с полной ics, сетевой обмен данными для подключенных устройств не ограничивается беспроводным PAN. Любое подключенное устройство имеет доступ к сети (например, к Интернету) через общее сетевое подключение с компьютера, на котором запущена беспроводная размещенная сеть. Это позволяет эффективно реализовать сценарий совместного использования сети для беспроводной размещенной сети.
В этом разделе мы используем термин full ICS для обозначения случая, когда все функции ICS вызываются в службе ICS для предоставления доступа ко всем полным функциям ICS с помощью беспроводной размещенной сети.
Два режима работы ICS являются взаимоисключающими, при этом полный ics имеет более высокий приоритет. Служба ICS может перейти из автономного режима в полный режим, но не из полного режима в автономный. Автономный режим ICS появился в Windows 7 и в Windows Server 2008 R2 со службой беспроводной локальной сети, установленной в сочетании с функцией беспроводной размещенной сети. Он недоступен в предыдущих версиях Windows.
Любая полная операция ICS включает два разных сетевых адаптера в системе:
- Открытый интерфейс. Это сетевой интерфейс с доступом к Интернету. Именно этот интерфейс используется локальным компьютером с ICS для предоставления доступа к Интернету клиентам и устройствам, подключающимся к нему через SoftAP.
- Закрытый интерфейс. Это сетевой интерфейс, который другие устройства используют для подключения к локальному компьютеру под управлением ICS. Сервер DHCPv4 работает в этом частном интерфейсе для предоставления частных локальных IP-адресов другим удаленным компьютерам.
Если общедоступный интерфейс не имеет доступа к Интернету, DHCP-сервер в частном интерфейсе продолжает предоставлять локальные IP-адреса подключенным устройствам. Автономная служба ICS включает только частный интерфейс, на котором выполняется SoftAP; он не включает какой-либо открытый интерфейс.
В любое время на локальном компьютере выполняется не более одного экземпляра полной службы ICS. Если на локальном компьютере уже запущена полная служба ICS, запуск другой полной службы ICS демонстрирует следующие функциональные особенности:
- Если открытый и закрытый интерфейсы новой полной icS совпадают с существующими полными ICS, запуск второй полной ICS эквивалентен отключению операций.
- Если новый открытый интерфейс отличается от старого общедоступного интерфейса, но новый закрытый интерфейс совпадает со старым частным интерфейсом, запуск второго полного icS мало влияет на подключенные устройства в том же частном интерфейсе. Возможность доступа к Интернету может измениться с новым общедоступным интерфейсом.
- Если новый закрытый интерфейс отличается от старого частного интерфейса, функции ICS перестанут работать со старым частным интерфейсом и начнут применяться к новому частному интерфейсу. Любое удаленное устройство, подключающееся к локальному компьютеру с помощью старого частного интерфейса, потеряет IP-подключение к локальному компьютеру.
Если полная версия ICS уже запущена, вызов второй полной службы ICS нарушает работу удаленно подключенных устройств с помощью старого частного интерфейса, если вторая интеграция ICS использует другой новый закрытый интерфейс.
Чтобы управлять службой ICS и использовать ее для поддержки интеграции ICS с беспроводной размещенной сетью, программное приложение должно сначала получить интерфейс INetSharingManager . Интерфейс INetSharingManager предоставляет прямой или косвенный доступ ко всем остальным COM-интерфейсам в API ICS. Метод get_SharingInstalled в интерфейсе INetSharingManager сообщает, поддерживает ли локальный компьютер общий доступ к подключению. Метод get_EnumEveryConnection в интерфейсе INetSharingManager извлекает интерфейс перечисления для всех подключений в папке connections. Метод get_INetSharingConfigurationForINetConnection извлекает интерфейс INetSharingConfiguration для указанного подключения. Методы интерфейса INetSharingConfiguration можно использовать для запроса и изменения параметров ICS.
Беспроводная размещенная сеть должна быть запущена перед вызовом метода get_EnumEveryConnection в интерфейсе INetSharingManager для перечисления всех подключений в папке connections.
Сведения об ICS и общедоступных интерфейсах и методах, которые можно использовать для запроса и изменения параметров ICS, см. в документации по общим сведениям о подключении к Интернету и брандмауэре подключения к Интернету.
Интеграция размещенной сети и ICS
Если полная версия ICS не запущена, запуск беспроводной размещенной сети также запускает службу ICS в автономном режиме только с серверной функцией DHCPv4 для выделения IP-адресов для подключенных устройств в беспроводном сетевом интерфейсе. Диапазон адресов подсети для автономного DHCPv4-сервера — 192.168.173.0/24. Это отличается от диапазона подсети 192.168.137.0/24, используемого с полной ics.
При запуске беспроводной размещенной сети с полной ics используется следующая логика:
- Если полная версия ICS еще не запущена, запуск беспроводной размещенной сети также запускает службу ICS с автономным DHCPv4-сервером.
- Если полная версия ICS уже запущена, а частный — это беспроводной размещенный сетевой интерфейс, просто запустите беспроводную размещенную сеть.
- Если полная версия ICS уже запущена, но частный интерфейс не является интерфейсом беспроводной размещенной сети, беспроводная размещенная сеть будет запущена без серверной функции DHCPv4 на беспроводном сетевом интерфейсе.
Влияние приведенной выше логики подчеркивает следующие факты:
- ICS не переходит из полного режима в автономный.
- Автономный режим может вызываться беспроводной размещенной сетью, только если ICS не работает в полном режиме.
- Если ICS работает в автономном режиме, она будет переведена в полный режим, если пользователь или приложение запускает ICS в полном режиме.
- Переход из автономного режима в полный режим в ICS приведет к нарушению работы подключенных устройств в беспроводной панели PAN, если частный интерфейс полной службы ICS отличается от интерфейса SoftAP.
Для запуска или остановки службы ICS на локальном компьютере в полном или автономном режиме требуется время. Приложение должно проверка состояние службы ICS с помощью функции NotifyServiceStatusChange, чтобы убедиться, что служба ICS не находится в состоянии ожидания запуска и остановки перед запуском или остановкой беспроводной размещенной сети для использования с интеграцией ICS.
Запуск и остановка беспроводной размещенной сети
Windows предоставляет платформу, на которой несколько одновременных приложений могут одновременно управлять беспроводной размещенной сетью. В частности, каждое приложение может запускать и останавливать беспроводную размещенную сеть самостоятельно, без предварительного знания о других приложениях.
Существует два набора функций для запуска и остановки размещенной сети.
Для нескольких приложений может потребоваться использование беспроводной размещенной сети. Функции WlanHostedNetworkStartUsing и WlanHostedNetworkStopUsing запускают и останавливают беспроводную размещенную сеть способом, совместимым с другими параллельными приложениями. Функции WlanHostedNetworkStartUsing и WlanHostedNetworkStopUsing позволяют приложению иметь ссылку на беспроводную размещенную сеть. Этот механизм обеспечивает работу беспроводной размещенной сети при условии, что хотя бы одно другое приложение имеет текущую ссылку на беспроводную размещенную сеть. Любой пользователь может вызвать эти функции. Успешные вызовы WlanHostedNetworkStartUsing должны соответствовать вызовам функции WlanHostedNetworkStopUsing . Любое изменение состояния размещенной сети, вызванное функцией WlanHostedNetworkStartUsing , будет автоматически отменено, если вызывающее приложение закрывает свой дескриптор вызова (путем вызова WlanCloseHandle с тем же параметром hClientHandle , переданным wlanHostedNetworkStartUsing), или если процесс завершается.
Функции WlanHostedNetworkForceStart и WlanHostedNetworkForceStop принудительно запускают и останавливают беспроводную размещенную сеть. Эти функции можно вызывать только в том случае, если у пользователя есть соответствующие повышенные привилегии. Успешные вызовы WlanHostedNetworkForceStart в конечном итоге могут быть сопоставлены вызовом функции WlanHostedNetworkForceStop в зависимости от структуры приложения. Эти функции переносят состояние беспроводной размещенной сети, не связывая запрос с вызывающим дескриптором приложения. Любое изменение состояния размещенной сети, вызванное функцией WlanHostedNetworkForceStart , не будет автоматически отменено, если вызывающее приложение закроет свой дескриптор вызова (путем вызова WlanCloseHandle с тем же параметром hClientHandle , переданным wlanHostedNetworkStartUsing), или если процесс завершается. Если приложение, вызваввшее функцию WlanHostedNetworkForceStart , закрывается, не вызывая одну из функций для остановки беспроводной сети, размещенная сеть остается запущенной. Приложение может вызвать функцию WlanHostedNetworkForceStart , убедившись, что пользователь системы с повышенными привилегиями принимает повышенные требования к энергопотреблению, связанные с запуском беспроводной размещенной сети в течение длительных периодов времени.
Ниже приведены общие рекомендации по тому, какие функции следует вызывать для запуска и остановки беспроводной размещенной сети.
- Используйте функции WlanHostedNetworkStartUsing и WlanHostedNetworkStopUsing в приложении для запуска и остановки беспроводной размещенной сети.
- Не используйте функцию WlanHostedNetworkForceStart для запуска беспроводной размещенной сети, если это не обязательно для приложения. Для функции WlanHostedNetworkForceStart также требуются повышенные привилегии.
- Используйте только функцию WlanHostedNetworkForceStop в качестве метода восстановления. Функция WlanHostedNetworkForceStop приводит к немедленной остановке беспроводной размещенной сети. Другим приложениям, которые прослушивают уведомления беспроводной размещенной сети, может потребоваться выполнить действия по восстановлению. Дополнительные сведения см. в описании ниже о последовательности восстановления для беспроводной размещенной сети.
Последовательность запуска для беспроводной размещенной сети
Для приложения, которое запускает беспроводную размещенную сеть с полным ics, рекомендуется запустить беспроводную размещенную сеть, а затем запустить полную ICS. Если беспроводная размещенная сеть уже запущена, приложение должно использовать функцию WlanHostedNetworkForceStop , чтобы остановить беспроводную размещенную сеть только в том случае, если требуется полная служба ICS, но она не была включена до запуска размещенной сети. Это позволит другим приложениям восстанавливаться после потенциальных сбоев, вызванных запуском полной службы ICS. Дополнительные сведения см. в описании ниже о последовательности восстановления для беспроводной размещенной сети. Объединенная операция должна завершиться успешно и завершиться сбоем в целом.
Примечание
Перед попыткой перечисления соответствующего адаптера с помощью интерфейса IEnumNetSharingEveryConnection необходимо запустить беспроводную размещенную сеть.
Следующие упорядоченные шаги являются рекомендуемой последовательностью запуска в приложении, использующем беспроводную размещенную сеть с полной ICS.
- Вызовите функцию WlanHostedNetworkInitSettings , чтобы убедиться, что беспроводная размещенная сеть настроена и готова к использованию.
- Вызовите функции WlanHostedNetworkQueryStatus и WlanHostedNetworkQueryProperty , чтобы определить, разрешена ли и доступна беспроводная размещенная сеть. Если беспроводная размещенная сеть не разрешена и недоступна, верните сообщение об ошибке.
- Проверьте, разрешена ли служба ICS, используемая для полной службы ICS. Если служба ICS не может быть запущена, верните сообщение об ошибке.
- Вызовите функцию WlanHostedNetworkForceStop , чтобы принудительно остановить беспроводную размещенную сеть.
- Вызовите функцию WlanHostedNetworkStartUsing , чтобы запустить беспроводную размещенную сеть.
- Если не удается запустить беспроводную размещенную сеть, верните сообщение об ошибке.
- Если полная служба ICS уже запущена и текущий общедоступный или частный интерфейс отличается от нового интерфейса, кэшируйте текущий общедоступный и частный интерфейсы. Приложение также может вернуть ошибку или предложить пользователю, если интеграция ICS уже запущена.
- Запустите полную ICS с новыми параметрами для общедоступного и частного интерфейсов.
- Если полная служба ICS не запускается с этими параметрами, попробуйте запустить полную службу ICS с кэшируемыми общедоступными и частными интерфейсами, если полная служба ICS выполнялась ранее. Вызовите функцию WlanHostedNetworkForceStop , чтобы остановить беспроводную размещенную сеть и вернуть ошибку.
- Возвращает успешное выполнение беспроводной размещенной сети и полной ics.
Последовательность остановки для беспроводной размещенной сети
При использовании беспроводной размещенной сети с полной icS приложение, которое завершило свою работу, может захотеть остановить беспроводную размещенную сеть и службу ICS, используемую для полного ics. В этом случае рекомендуется вызывать функцию WlanHostedNetworkForceStop , чтобы остановить размещенную сеть, а не вызывать функцию WlanHostedNetworkStopUsing . Функция WlanHostedNetworkForceStop останавливает беспроводную размещенную сеть, а также позволяет другим приложениям восстанавливаться. Дополнительные сведения см. в описании ниже о последовательности восстановления для беспроводной размещенной сети.
Следующие упорядоченные шаги являются рекомендуемой последовательностью остановки в приложении, использующем беспроводную размещенную сеть и полную ICS:
- Остановите полный ICS.
- Вызовите функцию WlanHostedNetworkForceStop , чтобы остановить беспроводную размещенную сеть.
Приложению, использующему беспроводную размещенную сеть без полной ICS, которая завершает свою работу, достаточно вызвать функцию WlanHostedNetworkStopUsing или WlanHostedNetworkForceStop , чтобы остановить беспроводную размещенную сеть. Если функция WlanHostedNetworkStartUsing была вызвана для запуска беспроводной размещенной сети, приложение должно вызвать функцию WlanHostedNetworkStopUsing , чтобы остановить беспроводную размещенную сеть. Если беспроводная размещенная сеть уже была запущена до приложения или приложение, вызываемое функцией WlanHostedNetworkForceStart для принудительного запуска беспроводной размещенной сети, приложение может вызвать функцию WlanHostedNetworkForceStop , чтобы остановить беспроводную размещенную сеть или ничего не делать (оставить беспроводную размещенную сеть запущенной) в зависимости от сценария.
Последовательность восстановления для беспроводной размещенной сети
На приложение, использующее беспроводную размещенную сеть, могут повлиять действия других приложений. Служба ICS и интерфейсы для управления ICS не предоставляют способ регистрации приложения для получения уведомлений об изменениях ICS. Если другое приложение вызывает методы EnableSharing или DisableSharing в интерфейсе INetSharingConfiguration для включения или отключения общего доступа к подключению, сообщение отправляется в пользовательский интерфейс (экран) на локальном компьютере, а не в другие приложения. Поэтому приложение должно полагаться на уведомления беспроводной размещенной сети для выполнения действий восстановления при изменении ICS или беспроводной размещенной сети.
Приложение, использующее беспроводную размещенную сеть, должно зарегистрироваться для получения уведомлений о беспроводной размещенной сети, вызвав WlanRegisterNotification. Если требуются уведомления только для беспроводной размещенной сети, приложение должно передать WLAN_NOTIFICATION_SOURCE_HNWK в параметре dwNotifSource , переданном wlanRegisterNotification. Если также требуются другие беспроводные уведомления, WLAN_NOTIFICATION_SOURCE_HNWK следует объединить с константами источника уведомлений для других типов беспроводных уведомлений и передать это значение в параметре dwNotifSource .
Последовательность восстановления одинакова для приложений с полными ics или без нее, при условии, что приложения не хотят запускать службу ICS снова. Получив уведомление о том, что размещенная сеть по беспроводной сети остановлена, выполните следующие действия.
- Если приложение с именем WlanHostedNetworkForceStart запускает беспроводную размещенную сеть, перезапустите размещенную сеть, вызвав WlanHostedNetworkForceStart. В противном случае вызовите WlanHostedNetworkStartUsing , чтобы перезапустить беспроводную размещенную сеть.
Последовательность восстановления для подключенных устройств
На удаленные устройства или компьютеры, подключенные к беспроводной размещенной сети, могут повлиять действия других приложений, влияющие на ICS и беспроводную размещенную сеть. К счастью, большинство устройств имеют встроенную логику повторных попыток в приложении устройства, чтобы справиться с временной потерей сигнала или роумингом.
Ниже приведена возможная последовательность восстановления для устройств или компьютеров, подключенных к беспроводной размещенной сети, которые теряют контакт.
- Драйвер беспроводного устройства указывает на отключение носителя к верхним слоям сетевого стека на устройстве.
- Приложение устройства начинает периодические проверки доступности беспроводной размещенной сети.
- Когда приложение устройства снова обнаружит беспроводную размещенную сеть, устройство инициирует беспроводное подключение.
- После успешного подключения к беспроводной размещенной сети приложение устройства соответствующим образом обновляет параметры IP-адресов.
Связанные темы