本文内容显示另外 4 个

无线托管网络是 Windows 7 和 Windows 8 支持的新 WLAN 功能。 在安装了无线 LAN 服务的 Windows Server 2012 和 Windows Server 2008 R2 上也支持它。 此功能实现两个主要功能:

Internet 连接共享 (ICS) 是 Windows 中通过 SharedAccess 服务提供的一项功能。 严格地说,SharedAccess 允许通过共享网络访问不一定提供 Internet 访问权限的计算机进行网络共享。 我们在本部分中互换使用术语 ICS 和 SharedAccess,因为 Internet 连接共享是无线托管网络的主要方案,并且 ICS 术语更为用户社区所熟知。

无线托管网络与 ICS 紧密关联,可实现无线个人区域网络 (PAN) 和 Internet 共享方案。 本部分向应用程序开发人员提供有关如何使用公共无线托管网络和 ICS API 集成无线托管网络和 ICS 的常规建议。

Internet 连接共享

ICS 服务在以下两种可能的模式之一中运行:

在本部分中,我们使用术语“完整 ICS”来表示在 ICS 服务中调用所有 ICS 函数,以便通过无线托管网络提供对所有完整 ICS 功能的访问。

这两种 ICS 操作模式互斥,完整 ICS 具有更高的优先级。 ICS 服务可以从独立模式转换为完整模式,但不能从完整模式转换为独立模式。 ICS 独立模式是在 Windows 7 和 Windows Server 2008 R2 中引入的,其中无线 LAN 服务与无线托管网络功能一起安装。 它在早期版本的 Windows 中不可用。

任何完整的 ICS 操作都涉及系统中的两个不同的网络适配器:

当公共接口无法访问 Internet 时,专用接口上的 DHCP 服务器将继续向连接的设备提供本地 IP 地址。 独立 ICS 仅涉及运行 SoftAP 的专用接口;它不涉及任何公共接口。

在任何时候,本地计算机上最多运行一个完整 ICS 实例。 如果完整的 ICS 已在本地计算机上运行,启动另一个完整的 ICS 会表现出以下功能行为:

当完整 ICS 已在运行时,只要第二个 ICS 集成使用不同的新专用接口,调用第二个完整 ICS 会中断使用旧专用接口的远程连接设备。

若要管理和使用 ICS 服务来支持 ICS 与无线托管网络的集成,软件应用程序必须首先获取 INetSharingManager 接口。 INetSharingManager 接口提供对 ICS API 中所有其他 COM 接口的直接或间接访问。 INetSharingManager 接口上的 get_SharingInstalled 方法报告本地计算机是否支持连接共享。 INetSharingManager 接口上的 get_EnumEveryConnection 方法检索 connections 文件夹中所有连接的枚举接口。 get_INetSharingConfigurationForINetConnection 方法检索指定连接的 INetSharingConfiguration 接口。 INetSharingConfiguration 接口上的方法可用于查询和更改 ICS 设置。

必须先启动无线托管网络,然后才能在 INetSharingManager 接口上调用 get_EnumEveryConnection 方法,以枚举 connections 文件夹中的所有连接。

有关 ICS 以及可用于查询和更改 ICS 设置的公共接口和方法的信息,请参阅 关于 Internet 连接共享和 Internet 连接防火墙的文档。

托管网络和 ICS 集成

未运行完整的 ICS 时,启动无线托管网络还会在独立模式下内部启动 ICS 服务,仅使用 DHCPv4 服务器功能为无线托管网络接口上的已连接设备分配 IP 地址。 独立 DHCPv4 服务器的子网地址范围为 192.168.173.0/24。 这不同于与完整 ICS 一起使用的子网范围 192.168.137.0/24。

使用完整 ICS 启动无线托管网络采用以下逻辑:

上述逻辑的影响突出了以下事实:

在本地计算机上以完整或独立模式启动或停止 ICS 服务需要一段时间。 应用程序应使用 NotifyServiceStatusChange 函数检查 ICS 服务的状态,以确保 ICS 服务在启动或停止用于 ICS 集成的无线托管网络之前不处于启动/停止挂起状态。

启动和停止无线托管网络

Windows 提供了一个平台,允许多个并发应用程序同时管理无线托管网络。 具体而言,每个应用程序都可以自行启动和停止无线托管网络,而无需事先了解其他应用程序。

有两组函数可用于启动和停止托管网络。

多个应用程序可能需要使用无线托管网络。 WlanHostedNetworkStartUsing 和 WlanHostedNetworkStopUsing 函数以与其他并发应用程序兼容的方式启动和停止无线托管网络。 WlanHostedNetworkStartUsing 和 WlanHostedNetworkStopUsing 函数允许应用程序引用无线托管网络。 此机制使无线托管网络保持运行,前提是至少有一个其他应用程序具有对无线托管网络的当前引用。 任何用户都可以调用这些函数。 对 WlanHostedNetworkStartUsing 的成功调用必须与对 WlanHostedNetworkStopUsing 函数的调用匹配。 如果调用应用程序通过使用传递给 WlanHostedNetworkStartUsing) 的相同 hClientHandle 参数调用 WlanCloseHandle 来关闭其调用句柄 (,则由 WlanHostedNetworkStartUsing 函数引起的任何托管网络状态更改都会自动撤消,或者进程结束。

WlanHostedNetworkForceStart 和 WlanHostedNetworkForceStop 函数强制启动和停止无线托管网络。 仅当用户具有相应的提升权限时,才能调用这些函数。 成功调用 WlanHostedNetworkForceStart 最终可以通过调用 WlanHostedNetworkForceStop 函数进行匹配,具体取决于应用程序设计。 这些函数转换无线托管网络状态,而无需将请求与应用程序的调用句柄相关联。 如果调用应用程序通过使用传递给 WlanHostedNetworkStartUsing) 的相同 hClientHandle 参数调用 WlanCloseHandle 来关闭其调用句柄 (,则不会自动撤消由 WlanHostedNetworkForceStart 函数引起的任何托管网络状态更改,或者进程结束。 如果调用 WlanHostedNetworkForceStart 函数的应用程序在关闭时未调用其中一个函数来停止无线托管网络,则托管网络保持运行状态。 在确保提升的系统用户接受长时间运行无线托管网络时涉及的电源要求增加后,应用程序可能会调用 WlanHostedNetworkForceStart 函数。

有关调用哪些函数来启动和停止无线托管网络的一般建议如下:

无线托管网络的启动序列

对于使用完整 ICS 启动无线托管网络的应用程序,建议启动无线托管网络,然后启动完整的 ICS。 如果无线托管网络已在运行,则仅当需要完整的 ICS 但尚未启用托管网络之前,应用程序才应使用 WlanHostedNetworkForceStop 函数来停止无线托管网络。 这将允许其他应用程序从启动完整 ICS 导致的潜在中断中恢复。 有关详细信息,请参阅下面有关无线托管网络的恢复顺序的讨论。 组合操作应作为一个整体成功和失败。

备注

必须先启动无线托管网络,然后才能尝试使用 IEnumNetSharingEveryConnection 接口枚举相应的适配器。

以下有序步骤是使用具有完整 ICS 的无线托管网络的应用程序中建议的启动顺序:

无线托管网络的停止序列

使用具有完整 ICS 的无线托管网络时,已完成其工作的应用程序可能需要停止无线托管网络和用于完整 ICS 的 ICS 服务。 在这种情况下,建议调用 WlanHostedNetworkForceStop 函数来停止托管网络,而不是调用 WlanHostedNetworkStopUsing 函数。 WlanHostedNetworkForceStop 函数停止无线托管网络,还可用于允许其他应用程序恢复。 有关详细信息,请参阅下面有关无线托管网络的恢复顺序的讨论。

以下有序步骤是使用无线托管网络和完整 ICS 的应用程序中建议的停止顺序:

使用未完成完整 ICS 的无线托管网络的应用程序只需调用 WlanHostedNetworkStopUsing 或 WlanHostedNetworkForceStop 函数即可停止无线托管网络。 如果调用 WlanHostedNetworkStartUsing 函数来启动无线托管网络,则应用程序应调用 WlanHostedNetworkStopUsing 函数来停止无线托管网络。 如果在应用程序或应用程序调用 WlanHostedNetworkForceStart 函数以强制启动无线托管网络之前已启动无线托管网络,则应用程序可以调用 WlanHostedNetworkForceStop 函数来停止无线托管网络或不执行任何操作 (使无线托管网络启动) ,具体取决于方案。

无线托管网络的恢复顺序

使用无线托管网络的应用程序可能会受到其他应用程序操作的影响。 ICS 服务和用于管理 ICS 的接口不提供应用程序注册 ICS 更改通知的方法。 如果另一个应用程序调用 INetSharingConfiguration 接口上的 EnableSharing 或 DisableSharing 方法来启用或禁用连接上的共享,则会将消息发送到用户界面 (本地计算机上的屏幕) ,而不是发送到其他应用程序。 因此,当 ICS 或无线托管网络发生更改时,应用程序需要依赖无线托管网络通知来执行恢复操作。

使用无线托管网络的应用程序应通过调用 WlanRegisterNotification 注册无线托管网络通知。 如果仅需要无线托管网络的通知,则应用程序应传递传递给 WlanRegisterNotification 的 dwNotifSource 参数中的WLAN_NOTIFICATION_SOURCE_HNWK。 如果还需要其他无线通知,则应 将WLAN_NOTIFICATION_SOURCE_HNWK 与所需其他类型的无线通知的通知源常量组合在一起,并在 dwNotifSource 参数中传递此值。

对于具有或不具有完整 ICS 的应用程序,恢复顺序是相同的,前提是应用程序不想再次启动 ICS 服务。 收到无线托管网络通知,指出托管网络已停止后,请执行以下操作:

已连接设备的恢复顺序

连接到无线托管网络的远程设备或计算机可能会受到影响 ICS 和无线托管网络的其他应用程序的操作的影响。 幸运的是,大多数设备在设备应用程序中内置了重试逻辑,以处理暂时丢失的信号或漫游。

连接到无线托管网络但失去联系的设备或计算机的可能恢复顺序如下:

相关主题

关于无线托管网络

无线托管网络示例

WlanHostedNetworkForceStart

WlanHostedNetworkInitSettings

WlanHostedNetworkQueryProperty

WlanHostedNetworkQuerySecondaryKey

WlanHostedNetworkQueryStatus

WlanHostedNetworkRefreshSecuritySettings

WlanHostedNetworkSetProperty

WlanHostedNetworkSetSecondaryKey

WlanHostedNetworkStartUsing

WlanHostedNetworkStopUsing

WlanRegisterVirtualStationNotification

参与评论