关于网络列表管理器 API

Microsoft Windows 网络环境允许多宿主计算机同时连接到多个网络。 可以有多个无线网络以及 LAN 和拨号连接。 网络列表管理器标识可用的网络,并将网络属性数据返回给应用程序。

网络列表管理器 API 与网络列表管理器服务交互,以标识和检索电脑连接到的每个网络的属性。 每个网络都根据该网络的唯一可识别属性使用网络签名进行唯一标识。 当应用程序注册网络列表管理器通知时,应用程序会收到有关新网络连接可用性或更改现有网络连接的通知。 应用程序可以根据以下情况调整其逻辑:它们连接到的网络;他们连接到的网络连接;或网络属性。 借助此信息,应用程序可以根据当前网络条件微调其操作

Windows Vista 引入了新接口,可用于获取有关这些网络特征等的详细信息。 借助 INetworkListManager 接口,可以轻松地枚举计算机曾经见过 (INetwork) 的所有网络,或者仅枚举连接的网络,或者仅枚举断开连接的网络。 INetworkListManager 接口还便于在计算机上枚举网络接口。

INetwork 接口用于确定网络连接的属性:名称、说明、ID、托管/身份验证、已连接/已断开连接等。 单个网络可能连接到多个接口,因此通过 INetwork 接口,还可以枚举正在使用的 INetwork 接口的实例。

INetwork 接口告知接口的相关属性:ID、GUID、类型 (托管、经过身份验证的) ,以及状态 (已连接、已断开连接、V4 本地、V4 Internet、V6 本地、V6 Internet) 。 V4 本地表示 internet 协议版本 4 (IPv4) 本地访问。 V4 Internet 是指具有 Internet 访问权限的 IPv4。 V6 本地和 V6 Internet 表示 IPv6。

网络位置的对象树的根是 INetworkListManager 接口。 此接口在 CLSID_NetworkListManager coclass 上实现。 若要使用此接口,必须创建 CLSID_NetworkListManager COM 对象,如下所示:

#include <windows.h>
#include <netlistmgr.h>

#pragma comment(lib, "ole32.lib")

void main()
{
    INetworkListManager *pNetworkListManager = NULL; 
    HRESULT hr = CoCreateInstance(CLSID_NetworkListManager, NULL,
            CLSCTX_ALL, IID_INetworkListManager,
            (LPVOID *)&pNetworkListManager);
}