网络连接状态指示器Network Connectivity Status Indicator(NCSI)在 Windows 操作系统中用于显示当前网络连接状态。它通过主动和被动探测方法来判断设备是否与 Internet 连接。以下是对该功能的详细介绍:在 Windows 注册表中,NlaSvc(网络位置感知服务)用于网络连接状态探测,其中包括探测主机配置和代理设置。

设置原因:每次开机没必要去找国外美国微软网站域名,跳转几次域名,还有频率,时间间隔多少次访问,网络测试,网络连接,网络图标,

设置国产服务器,国内服务器,很快很好,秒连接,秒开!中国人自己的服务器!

适用于 Windows 的网络连接状态指示器概述 | Microsoft Learn

网络连接状态指示器 (NCSI) 故障排除指南 - Windows Server | Microsoft Learn

网络连接状态指示器 Network Connectivity Status Indicator(NCSI)

💡 补充信息

  • 缩写NCSI
  • 功能:这是 Windows 操作系统中的一个组件,负责检测电脑是否连接到互联网,并决定任务栏右下角的网络图标是显示“地球仪”(无连接)、“黄色感叹号”(受限)还是正常的连接图标
  • 工作机制:它主要通过向微软的服务器发送 DNS 查询和 HTTP 请求(主动探测)来判断网络状态

PixPin_2026-04-20_17-37-57

PixPin_2026-04-20_17-39-27

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\NlaSvc\Parameters\Internet]
"ActiveDnsProbeContent"="223.5.5.5"  ; 阿里 IPv4 DNS
"ActiveDnsProbeContentV6"="2400:3200::1"  ; 阿里 IPv6 DNS
"ActiveDnsProbeHost"="dns.aliyun.com"  ; 阿里 DNS 服务器
"ActiveDnsProbeHostV6"="dns.aliyun.com"  ; 阿里 DNS 服务器 (IPv6)
"ActiveWebProbeContent"="中国网络测试"  ; 替换为适合中国的网络测试内容
"ActiveWebProbeContentV6"="中国网络测试"  ; 替换为适合中国的网络测试内容
"ActiveWebProbeHost"="https://www.china-ipv6.cn"  ; 替换为适合中国的测试服务器
"ActiveWebProbeHostV6"="https://www.china-ipv6.cn"  ; 替换为适合中国的测试服务器 (IPv6)
"ActiveWebProbePath"="connecttest.txt" ;整个删除
"ActiveWebProbePathV6"="connecttest.txt" ;整个删除
"CaptivePortalTimer"=dword:00000000
"CaptivePortalTimerBackOffIncrementsInSeconds"=dword:00000005
"CaptivePortalTimerMaxInSeconds"=dword:0000001e
"EnableActiveProbing"=dword:00000000
"PassivePollPeriod"=dword:0000000f
"StaleThreshold"=dword:0000001e
"WebTimeout"=dword:00000023

注册表路径:

 
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\NlaSvc\Parameters\Internet

属于 Windows 网络位置感知服务 (Network Location Awareness, NLA) 的配置。高阶网络安全角度来看,如果这个注册表被 恶意篡改或被国外攻击者劫持,会有潜在的严重影响和危害。我来详细分析:

网络位置感知 Network Location Awareness(NLA)

💡 补充信息

  • 缩写NLA
  • 服务名称:在 Windows 服务列表中,其服务名通常显示为 Network Location Awareness(旧版本 Windows 中可能显示为 nlasvc)。
    Network Location Awareness 服务的英文全称就是 Network Location Awareness
    在 Windows 系统中,其对应的服务名称为 NlaSvc

    🔍 补充说明

    • 主要功能:该服务负责识别和感知计算机当前所连接的网络环境(如家庭网络、工作网络或公用网络),并根据不同的网络位置自动应用相应的安全策略和配置。
    • 常见问题:一个与此服务相关的典型问题是,在 Windows 8.1 系统中,开机联网时可能会自动弹出 Bing 网站。这通常与注册表中 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\NlaSvc\Parameters\Internet 路径下的 EnableActiveProbing 值有关
  • 功能:该服务负责识别计算机当前连接的网络环境(如“域网络”、“专用网络”或“公用网络”),并根据网络的变化通知其他应用程序(如 Windows 防火墙)调整配置

1. 该注册表键的作用

NlaSvc 服务负责感知网络连接状态,并向系统和应用提供网络状态信息。其 Parameters\Internet 下常见的值包括:

  • EnableActiveProbing

    • 值类型:DWORD
    • 默认值:1
    • 含义:控制系统是否通过主动探测(Active Probing)访问 Microsoft 网站来判断是否有互联网连接。
  • ActiveWebProbeHost

    • 值类型:REG_SZ
    • 默认值:www.msftconnecttest.com
    • 含义:系统用这个域名探测互联网连接。

如果攻击者修改了这些值,例如:

  • 改变 EnableActiveProbing 为 0,关闭探测功能。
  • 替换 ActiveWebProbeHost 为攻击者控制的域名。

2. 被劫持可能带来的影响

  1. 网络状态判断失真

    • 系统可能无法正确判断网络连接状态。
    • 导致 Windows 认为没有互联网连接,即使实际上网络可用。
  2. 流量劫持 / 中间人攻击

    • 如果 ActiveWebProbeHost 被替换为恶意域名,攻击者可以:
      • 收集系统的网络访问信息
      • 强行劫持 DNS 或 HTTP 流量
      • 诱导系统向恶意服务器发起请求
  3. 安全防护失效

    • 某些安全软件会依赖 NLA 判断是否联网:
    • 被劫持可能导致这些防护失效或延迟更新
  4. 用户体验和系统异常

    • 网络图标显示错误
    • Windows Store、Office 激活等联网功能异常
    • 应用自动联网失败

3. 潜在危害的场景

攻击方式 可能危害
DNS 劫持 ActiveWebProbeHost 将流量导向恶意服务器,窃取数据或植入恶意软件
禁用 Active Probing 系统无法检测到真实网络状态,更新和安全策略受影响
与其他恶意注册表组合 可作为持久化入口,持续监控网络和流量

总结:攻击者劫持这个注册表,通常目的是控制系统的网络感知,实现隐蔽的数据窃取、流量劫持,或绕过安全机制。


4. 检测与防御建议(高阶)

  1. 检查注册表

    powershell
    Get-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Services\NlaSvc\Parameters\Internet"
    • 核对 EnableActiveProbing 是否为 1
    • 核对 ActiveWebProbeHost 是否为 www.msftconnecttest.com
  2. 重置 NLA 配置

    powershell
    Set-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Services\NlaSvc\Parameters\Internet" -Name "EnableActiveProbing" -Value 1
    Set-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Services\NlaSvc\Parameters\Internet" -Name "ActiveWebProbeHost" -Value "www.msftconnecttest.com"
  3. 网络和 DNS 安全

    • 使用可信 DNS
    • 检查 Hosts 文件是否被修改
    • 防火墙限制可疑出站流量
  4. 高阶监控

    • 使用 Wireshark / Sysmon 检查系统是否访问异常域名
    • 检查系统是否存在其他注册表持久化点
  5. 安全软件全盘扫描

    • 包括 Rootkit 检测
    • 检查是否存在恶意驱动或服务

网络连接状态指示器Network Connectivity Status Indicator(NCSI)在 Windows 操作系统中用于显示当前网络连接状态。它通过主动和被动探测方法来判断设备是否与 Internet 连接。以下是对该功能的详细介绍:

1. Network Connectivity Status Indicator(NCSI 图标说明

Network Connectivity Status Indicator(NCSI图标通常位于任务栏的右下角,表示网络连接状态。其图标根据设备连接方式的不同,可能出现以下几种状态:

  • 已连接(有线)
  • 已连接(无线)
  • 已连接(未连接 Internet)

单击该图标可以查看网络状态,并进入“网络和 Internet 设置”以查看更多详细信息。

2.Network Connectivity Status Indicator(NCSI功能

Network Connectivity Status Indicator(NCSI负责判断设备的网络连接是否正常以及是否能够访问互联网。通过主动和被动探测,NCSI 确保设备的网络连接稳定,并向操作系统及应用程序提供信息。应用程序可以根据 NCSI 的反馈,决定如何处理网络连接问题。

3. 主动探测

  • 定义:主动探测是向特定的网络探测服务器(例如 Microsoft 托管的服务器)发送 HTTP 请求,通过接收响应来判断设备是否连接到 Internet。
  • 过程:如果 NCSI 发送的探测请求成功得到有效响应,表示设备已连接到互联网。反之,如果没有收到响应或收到错误响应,NCSI 会判定连接不可用。
  • 注意事项:如果 NCSI 不能完成主动探测,可能是由于网络配置或设备问题,如代理设置阻止了 HTTP 请求。

4. 被动探测

  • 定义:被动探测通过监控网络流量中的数据包来确定网络状态,而不是通过主机发送的请求。
  • 作用:被动探测可以检测间歇性网络问题,比如临时路由器问题或不稳定的网络连接,即使这些问题不会影响到设备的接口状态。
  • 补充:主动和被动探测相互配合,提供更加全面的网络状态判断。

5. 代理和强制验证门户问题

  • 代理问题:如果设备在企业网络中使用代理,Network Connectivity Status Indicator(NCSI) 需要正确配置代理设置,才能执行主动探测。常见问题包括代理未正确配置或代理设置未能正确处理探测请求。
  • 强制验证门户:在公共网络环境中(如机场、医院等),Network Connectivity Status Indicator(NCSI) 可能遇到强制验证门户。这些门户可能会拦截或重定向探测请求,导致Network Connectivity Status Indicator(NCSI)误判网络连接状态。

6. Windows 版本中的 Network Connectivity Status Indicator(NCSI)

  • 在 Windows 11 中,Network Connectivity Status Indicator(NCSI)服务由网络列表管理器服务Network List Manager(NLM)提供,而在早期版本的 Windows 中,则由网络位置感知服务 (Network Location Awareness, NLA) 提供。
    网络列表管理器服务Network List Manager(NLM)的英文全称是 Network List Manager

    🔍 补充说明

    • 服务名称:在 Windows 系统中,该服务的内部名称为 netprofm
    • 主要功能:它负责识别计算机已连接的网络,收集并存储这些网络的配置信息(如网络名称、类型),并在网络属性发生更改时通知相关应用程序。
    • 相关组件:在开发领域,它通常指代 Network List Manager API,这是一组供开发者使用的编程接口,用于管理和获取网络信息

7. 注册表配置

NCSI 的探测主机、代理设置及其他相关信息可以在 Windows 注册表中找到,路径如下:

  • 探测主机配置HKLM\SYSTEM\CurrentControlSet\Services\NlaSvc\Parameters\Internet
  • 代理设置HKLM\SYSTEM\CurrentControlSet\Services\NlaSvc\Parameters\Internet\ManualProxies

8. 警告与建议

不要禁用主动探测,因为只有依靠主动和被动探测的综合判断,才能准确确定网络连接的状态。对于代理问题,确保代理配置正确,避免影响 Network Connectivity Status Indicator(NCSI)的正常工作。

通过这种方式,Network Connectivity Status Indicator(NCSI) 提供了一个简单而有效的工具,用于帮助用户和应用程序实时了解网络连接状态。


在 Windows 操作系统中,NCSI(Network Connectivity Status Indicator)通过注册表来管理探测主机配置和代理设置。下面是关于这两个注册表项的详细信息,包括开启、关闭以及常见参数示例。

1. 探测主机配置

注册表路径:HKLM\SYSTEM\CurrentControlSet\Services\NlaSvc\Parameters\Internet

作用:该注册表项存储了用于主动探测的主机信息,例如 Network Connectivity Status Indicator(NCSI)请求的目标主机地址。

常见参数

  • EnableActiveProbe(启用主动探测):此项配置决定了是否启用主动探测。

    • 0:禁用主动探测
    • 1:启用主动探测(默认)
  • ActiveProbeHost(主动探测主机):配置要进行探测的目标主机,默认为 www.msftncsi.com

    • 示例值:www.msftncsi.com
  • ActiveProbeContent(主动探测内容):配置探测请求的内容,通常是简单的 HTTP 请求,可以定义请求头等。

    • 示例值:"Microsoft NCSI"(默认)
  • ActiveProbePort(主动探测端口):配置探测请求使用的端口,默认通常是端口 80。

    • 示例值:80(HTTP 默认端口)

开启/关闭探测主机

  • 如果你想关闭主动探测,可以通过设置 EnableActiveProbe 为 0
  • 如果想开启主动探测,可以将 EnableActiveProbe 设置为 1(默认值)。

2. 代理设置

注册表路径:HKLM\SYSTEM\CurrentControlSet\Services\NlaSvc\Parameters\Internet\ManualProxies

作用:该注册表项允许手动配置代理设置,通常用于企业环境或特定网络环境中。代理配置影响 Network Connectivity Status Indicator(NCSI)的主动探测请求,若代理设置不正确,可能会导致 Network Connectivity Status Indicator(NCSI)无法成功探测到互联网连接。

常见参数

  • UseManualProxy(启用手动代理):此项配置决定是否启用手动代理设置。

    • 0:禁用手动代理
    • 1:启用手动代理
  • ProxyServer(代理服务器地址):配置代理服务器的地址和端口。

    • 示例值:proxy.example.com:8080
  • ProxyBypassList(代理旁路列表):配置不使用代理的主机或域名列表。

    • 示例值:*.example.com;10.*;192.168.*(代理旁路的主机列表)
  • ProxyType(代理类型):配置代理类型。常见的代理类型包括:

    • 0:无代理
    • 1:HTTP 代理
    • 2:SOCKS 代理

开启/关闭代理设置

  • 如果你想关闭代理设置,可以将 UseManualProxy 设置为 0
  • 如果你需要启用手动代理,可以将 UseManualProxy 设置为 1,然后配置相应的代理服务器和端口。

示例:如何修改注册表配置

  1. 开启主动探测

    • 打开注册表编辑器(regedit)。
    • 导航到 HKLM\SYSTEM\CurrentControlSet\Services\NlaSvc\Parameters\Internet
    • 找到并设置 EnableActiveProbe 为 1
  2. 禁用主动探测

    • 打开注册表编辑器。
    • 导航到 HKLM\SYSTEM\CurrentControlSet\Services\NlaSvc\Parameters\Internet
    • 找到并设置 EnableActiveProbe 为 0
  3. 启用手动代理配置

    • 打开注册表编辑器。
    • 导航到 HKLM\SYSTEM\CurrentControlSet\Services\NlaSvc\Parameters\Internet\ManualProxies
    • 设置 UseManualProxy 为 1,并配置代理服务器(例如 proxy.example.com:8080)。
  4. 禁用手动代理配置

    • 打开注册表编辑器。
    • 导航到 HKLM\SYSTEM\CurrentControlSet\Services\NlaSvc\Parameters\Internet\ManualProxies
    • 设置 UseManualProxy 为 0

注意事项:

  • 修改注册表前,建议先备份注册表,以防止误操作。
  • 在企业环境中,某些代理设置可能会影响网络功能,因此更改时应谨慎。
  • 在某些情况下,修改这些注册表项可能需要重启计算机或重启网络服务以生效。

在 Windows 注册表中,NlaSvc(网络位置感知服务)用于网络连接状态探测,其中包括探测主机配置代理设置。除了常见的设置外,以下是一些较为高级、特殊或应用于特定场景的配置示例。

1. 探测主机配置(NlaSvc)

在注册表项 HKLM\SYSTEM\CurrentControlSet\Services\NlaSvc\Parameters\Internet 下,除了基本的探测主机配置,还可以配置一些更高级的设置,以满足特定需求。

高级配置:

  • EnableActiveProbe(启用/禁用主动探测):决定是否启用主动探测功能。

    • 0:禁用主动探测
    • 1:启用主动探测(默认)
  • ActiveProbeHost(主动探测主机):配置探测请求所使用的目标主机地址。默认是 www.msftncsi.com,你可以根据实际需求配置。

    • 示例:
      Copy Code
      ActiveProbeHost = "www.example.com"
  • ActiveProbePort(主动探测端口):设置用于探测的端口,默认值为 80(HTTP端口)。可以根据需要更改为不同端口,例如 443(HTTPS)。

    • 示例:
      Copy Code
      ActiveProbePort = "443"
  • ActiveProbeContent(主动探测内容):定义探测请求的内容或字符串,通常是 HTTP 请求体的内容。例如,可以配置请求头或请求参数。

    • 示例:
      Copy Code
      ActiveProbeContent = "Microsoft NCSI"
  • ProbeInterval(探测间隔):设置网络探测的时间间隔,单位为秒。这个参数可以帮助控制探测频率。

    • 示例:
      Copy Code
      ProbeInterval = 60  // 每60秒探测一次
  • EnableDnsCache(启用 DNS 缓存):开启或关闭 DNS 缓存,优化探测速度。

    • 0:禁用 DNS 缓存
    • 1:启用 DNS 缓存

特殊应用:

  • 自定义探测目标:一些企业环境可能要求定制的探测目标来确保互联网连接的有效性。你可以通过配置 ActiveProbeHost 来使用自定义的监控站点,例如内部的网络监测服务。

2. 代理设置(ManualProxies)

在注册表路径 HKLM\SYSTEM\CurrentControlSet\Services\NlaSvc\Parameters\Internet\ManualProxies 下,除了基本的代理设置(如代理地址和端口),还可以配置一些高级或特殊的代理策略。

高级配置:

  • UseManualProxy(启用手动代理):启用或禁用手动代理设置。

    • 0:禁用手动代理
    • 1:启用手动代理
  • ProxyServer(代理服务器地址):配置用于网络请求的代理服务器地址。该设置可以用于公司环境或特定的网络需求。

    • 示例:
      Copy Code
      ProxyServer = "proxy.example.com:8080"
  • ProxyBypassList(代理旁路列表):指定哪些网站或IP不通过代理服务器,常用于配置绕过内部局域网或某些特殊资源的情况。

    • 示例:
      Copy Code
      ProxyBypassList = "*.example.com;10.*;192.168.*"
  • ProxyOverride(代理覆盖):该设置允许你配置更细粒度的代理策略,决定哪些请求通过代理,哪些不通过。比如指定某些域名或IP通过特定的代理服务器。

    • 示例:
      Copy Code
      ProxyOverride = "*.companydomain.com"
  • ProxyType(代理类型):配置代理的类型。常见的代理类型包括 HTTP、SOCKS、自动检测等。

    • 0:无代理
    • 1:HTTP 代理
    • 2:SOCKS 代理
    • 3:自动配置脚本(如 PAC 文件)
  • AutoDetect(自动代理检测):启用自动代理检测功能,Windows 会自动查找合适的代理服务器配置。

    • 0:禁用自动代理检测
    • 1:启用自动代理检测

特殊应用:

  • 在受限网络环境中使用代理:在某些组织内的计算机可能需要通过代理才能访问外部网络或互联网。通过在注册表中配置 ProxyServerProxyBypassList,可以为不同的网络条件定制代理设置。

  • 绕过本地网络的代理:通过配置 ProxyBypassList,你可以确保访问局域网中的设备时不经过代理,减少对本地网络资源的延迟。

示例:如何进行高级配置

配置主动探测和代理设置的注册表例子:

  1. 开启主动探测并设置自定义探测主机

    • 打开注册表编辑器 (regedit)。
    • 导航到 HKLM\SYSTEM\CurrentControlSet\Services\NlaSvc\Parameters\Internet
    • 设置:
      • EnableActiveProbe = 1
      • ActiveProbeHost = "www.customprobe.com"
      • ActiveProbePort = "443"
  2. 启用手动代理并配置绕过列表

    • 打开注册表编辑器。
    • 导航到 HKLM\SYSTEM\CurrentControlSet\Services\NlaSvc\Parameters\Internet\ManualProxies
    • 设置:
      • UseManualProxy = 1
      • ProxyServer = "proxy.example.com:8080"
      • ProxyBypassList = "*.example.com;10.*;192.168.*"

通过这些高级配置,你可以灵活地根据网络环境的需求调整 Windows 中的网络连接状态探测和代理设置。


Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\NlaSvc\Parameters\Internet]
"ActiveDnsProbeContent"="131.107.255.255"
"ActiveDnsProbeContentV6"="fd3e:4f5a:5b81::1"
"ActiveDnsProbeHost"="dns.msftncsi.com"
"ActiveDnsProbeHostV6"="dns.msftncsi.com"
"ActiveWebProbeContent"="Microsoft Connect Test"
"ActiveWebProbeContentV6"="Microsoft Connect Test"
"ActiveWebProbeHost"="www.msftconnecttest.com"
"ActiveWebProbeHostV6"="ipv6.msftconnecttest.com"
"ActiveWebProbePath"="connecttest.txt"
"ActiveWebProbePathV6"="connecttest.txt"
"CaptivePortalTimer"=dword:00000000
"CaptivePortalTimerBackOffIncrementsInSeconds"=dword:00000005
"CaptivePortalTimerMaxInSeconds"=dword:0000001e
"EnableActiveProbing"=dword:00000001
"PassivePollPeriod"=dword:0000000f
"StaleThreshold"=dword:0000001e
"WebTimeout"=dword:00000023

国外服务器存在缓慢和被动检测问题,建议修改为国内地址,或者 

  • EnableActiveProbe(启用主动探测):此项配置决定了是否启用主动探测。

    • 0:禁用主动探测

 

NCSI(Network Connectivity Status Indicator)完整组件链 DLL/SYS 梳理

NCSI = 网络连接状态指示器;负责判定是否具备互联网访问,控制任务栏网络图标、触发门户认证弹窗、为 Windows Update/DirectAccess/Office 提供连通性状态。
 
⚠️ 版本重大分界线
 
Win10 及更早:NlaSvc(网络位置感知服务) 承载 ncsi.dll
 
Win11 / Server 2022+:迁移至 Netprofm(网络列表服务) 承载 ncsi.dll

一、核心主体二进制(最关键)

1)ncsi.dll(用户态核心探测逻辑)

路径:%SystemRoot%\System32\ncsi.dll
  • 导出 NCSI 探测全套逻辑:HTTP 探针、DNS 探针、被动网络状态采集
  • 使用 WinHTTP API 发起 http://www.msftncsi.com/ncsi.txt 请求
  • DNS 探测:查询 dns.msftncsi.com
  • 运行宿主:
    • Win10:svchost.exe -k NetworkService -p(NlaSvc)
    • Win11:svchost.exe -k NetworkService -p(Netprofm)
❌ 不存在 ncsi.sys,网上流传名称为错误信息!NCSI无独立内核驱动

2)承载服务宿主 DLL

Win10:nlasvc.dll(NlaSvc 网络位置感知服务)

%SystemRoot%\System32\nlasvc.dll
 
职责:加载 ncsi.dll、管理网络位置(专用 / 公用 / 域)、接收网卡变更通知、分发连通性事件给上层应用。

Win11:netprofm.dll(Netprofm 网络列表服务)

C:\Users\Administrator\Downloads\dumpbin-14.50.35722-x64>dumpbin /dependents  C:\Windows\System32\netprofm.dll
Microsoft (R) COFF/PE Dumper Version 14.50.35722.0
Copyright (C) Microsoft Corporation.  All rights reserved.


Dump of file C:\Windows\System32\netprofm.dll

File Type: DLL

  Image has the following dependencies:

    api-ms-win-crt-string-l1-1-0.dll
    api-ms-win-crt-runtime-l1-1-0.dll
    api-ms-win-crt-private-l1-1-0.dll
    ntdll.dll
    api-ms-win-core-libraryloader-l1-2-0.dll
    api-ms-win-core-synch-l1-1-0.dll
    api-ms-win-core-heap-l1-1-0.dll
    api-ms-win-core-errorhandling-l1-1-0.dll
    api-ms-win-eventing-provider-l1-1-0.dll
    api-ms-win-core-registry-l1-1-0.dll
    api-ms-win-eventing-classicprovider-l1-1-0.dll
    api-ms-win-core-processthreads-l1-1-0.dll
    api-ms-win-core-threadpool-l1-2-0.dll
    api-ms-win-core-localization-l1-2-0.dll
    api-ms-win-core-debug-l1-1-0.dll
    api-ms-win-core-handle-l1-1-0.dll
    api-ms-win-core-string-l1-1-0.dll
    api-ms-win-core-processthreads-l1-1-1.dll
    api-ms-win-core-profile-l1-1-0.dll
    api-ms-win-core-sysinfo-l1-1-0.dll
    api-ms-win-core-interlocked-l1-1-0.dll
    api-ms-win-service-management-l1-1-0.dll
    api-ms-win-core-timezone-l1-1-0.dll
    RPCRT4.dll
    api-ms-win-core-datetime-l1-1-1.dll
    api-ms-win-core-file-l1-2-0.dll
    api-ms-win-core-threadpool-legacy-l1-1-0.dll
    api-ms-win-service-private-l1-1-0.dll
    api-ms-win-core-heap-l2-1-0.dll
    api-ms-win-core-file-l1-1-0.dll
    msvcp_win.dll
    api-ms-win-core-delayload-l1-1-1.dll
    api-ms-win-core-delayload-l1-1-0.dll

  Image has the following delay load dependencies:

    api-ms-win-core-com-l1-1-0.dll
    OLEAUT32.dll
    IPHLPAPI.DLL
    ext-ms-win-session-winsta-l1-1-2.dll
    ext-ms-win-session-winsta-l1-1-0.dll
    ext-ms-win-networking-wlanapi-l1-1-0.dll
    WS2_32.dll
    ncsi.dll
    NSI.dll

  Summary

        2000 .data
        1000 .didat
        4000 .pdata
       1B000 .rdata
        1000 .reloc
        5000 .rsrc
       46000 .text
        1000 fothk

C:\Users\Administrator\Downloads\dumpbin-14.50.35722-x64>dumpbin /imports C:\Windows\System32\netprofm.dll
Microsoft (R) COFF/PE Dumper Version 14.50.35722.0
Copyright (C) Microsoft Corporation.  All rights reserved.


Dump of file C:\Windows\System32\netprofm.dll

File Type: DLL

  Section contains the following imports:

    api-ms-win-crt-string-l1-1-0.dll
             180049930 Import Address Table
             180061478 Import Name Table
                     0 time date stamp
                     0 Index of first forwarder reference

                          83 memset

    api-ms-win-crt-runtime-l1-1-0.dll
             180049918 Import Address Table
             180061460 Import Name Table
                     0 time date stamp
                     0 Index of first forwarder reference

                          36 _initterm
                          37 _initterm_e

    api-ms-win-crt-private-l1-1-0.dll
             1800497D8 Import Address Table
             180061320 Import Name Table
                     0 time date stamp
                     0 Index of first forwarder reference

                          C0 _o__errno
                          C2 _o__execute_onexit_table
                         13C _o__initialize_narrow_environment
                         13D _o__initialize_onexit_table
                         13F _o__invalid_parameter_noinfo
                         140 _o__invalid_parameter_noinfo_noreturn
                         243 _o__purecall
                         250 _o__recalloc
                         251 _o__register_onexit_function
                         252 _o__resetstkoflw
                         259 _o__seh_filter_dll
                         464 memmove
                         2C9 _o__wcsdup
                         2CD _o__wcsicmp
                         35C _o_calloc
                         38D _o_free
                         3D8 _o_malloc
                         436 _o_terminate
                         444 _o_wcscat_s
                         447 _o_wcscpy_s
                          20 __current_exception
                          21 __current_exception_context
                           1 _CxxThrowException
                          12 __CxxFrameHandler3
                          72 _o___stdio_common_vswprintf_s
                          70 _o___stdio_common_vswprintf
                          60 _o___std_type_info_destroy_list
                          5F _o___std_exception_destroy
                          5E _o___std_exception_copy
                          A7 _o__crt_atexit
                          A0 _o__configure_narrow_argv
                          93 _o__cexit
                          91 _o__callnewh
                          2A __std_terminate
                           C __C_specific_handler
                          13 __CxxFrameHandler4
                           D __C_specific_handler_noexcept
                         462 memcmp
                         463 memcpy

    ntdll.dll
             180049A88 Import Address Table
             1800615D0 Import Name Table
                     0 time date stamp
                     0 Index of first forwarder reference

                         67E RtlVirtualUnwind
                         522 RtlLookupFunctionEntry
                         30C RtlCaptureContext

    api-ms-win-core-libraryloader-l1-2-0.dll
             180049578 Import Address Table
             1800610C0 Import Name Table
                     0 time date stamp
                     0 Index of first forwarder reference

                           E FreeLibraryAndExitThread
                          13 GetModuleHandleExA
                           1 DisableThreadLibraryCalls
                          11 GetModuleFileNameW
                          16 GetProcAddress
                           D FreeLibrary
                          15 GetModuleHandleW
                          14 GetModuleHandleExW
                          19 LoadLibraryExW
                          10 GetModuleFileNameA

    api-ms-win-core-synch-l1-1-0.dll
             180049670 Import Address Table
             1800611B8 Import Name Table
                     0 time date stamp
                     0 Index of first forwarder reference

                          1B InitializeSRWLock
                           B CreateSemaphoreExW
                           5 CreateEventExW
                          11 EnterCriticalSection
                          26 ReleaseSemaphore
                          1D LeaveCriticalSection
                          18 InitializeCriticalSection
                          1A InitializeCriticalSectionEx
                           1 AcquireSRWLockShared
                          36 WaitForSingleObject
                          23 ReleaseMutex
                          37 WaitForSingleObjectEx
                          25 ReleaseSRWLockShared
                          21 OpenSemaphoreW
                           9 CreateMutexExW
                           0 AcquireSRWLockExclusive
                           F DeleteCriticalSection
                          24 ReleaseSRWLockExclusive
                          19 InitializeCriticalSectionAndSpinCount
                          29 SetEvent
                          27 ResetEvent
                          31 TryAcquireSRWLockExclusive
                           6 CreateEventW

    api-ms-win-core-heap-l1-1-0.dll
             180049530 Import Address Table
             180061078 Import Name Table
                     0 time date stamp
                     0 Index of first forwarder reference

                           0 GetProcessHeap
                           6 HeapFree
                           2 HeapAlloc

    api-ms-win-core-errorhandling-l1-1-0.dll
             1800494D0 Import Address Table
             180061018 Import Name Table
                     0 time date stamp
                     0 Index of first forwarder reference

                           5 GetLastError
                          11 UnhandledExceptionFilter
                           7 RaiseException
                           F SetUnhandledExceptionFilter
                           D SetLastError

    api-ms-win-eventing-provider-l1-1-0.dll
             180049978 Import Address Table
             1800614C0 Import Name Table
                     0 time date stamp
                     0 Index of first forwarder reference

                           4 EventSetInformation
                           0 EventActivityIdControl
                           3 EventRegister
                           9 EventWriteTransfer
                           5 EventUnregister

    api-ms-win-core-registry-l1-1-0.dll
             180049638 Import Address Table
             180061180 Import Name Table
                     0 time date stamp
                     0 Index of first forwarder reference

                          21 RegQueryInfoKeyW
                          1E RegOpenKeyExW
                           0 RegCloseKey
                          14 RegGetValueW

    api-ms-win-eventing-classicprovider-l1-1-0.dll
             180049940 Import Address Table
             180061488 Import Name Table
                     0 time date stamp
                     0 Index of first forwarder reference

                           7 UnregisterTraceGuids
                           3 RegisterTraceGuidsW
                           1 GetTraceEnableLevel
                           5 TraceMessage
                           2 GetTraceLoggerHandle
                           0 GetTraceEnableFlags

    api-ms-win-core-processthreads-l1-1-0.dll
             1800495E0 Import Address Table
             180061128 Import Name Table
                     0 time date stamp
                     0 Index of first forwarder reference

                          11 GetCurrentThreadId
                          55 TerminateProcess
                           C GetCurrentProcess
                           6 CreateThread
                           D GetCurrentProcessId
                          3C ResumeThread

    api-ms-win-core-threadpool-l1-2-0.dll
             180049748 Import Address Table
             180061290 Import Name Table
                     0 time date stamp
                     0 Index of first forwarder reference

                           D CreateThreadpoolWait
                          1C SetThreadpoolWait
                          1A SetThreadpoolTimer
                           C CreateThreadpoolTimer
                          23 WaitForThreadpoolWaitCallbacks
                          22 WaitForThreadpoolTimerCallbacks
                           7 CloseThreadpoolWait
                           E CreateThreadpoolWork
                           6 CloseThreadpoolTimer
                          1F SubmitThreadpoolWork
                           8 CloseThreadpoolWork

    api-ms-win-core-localization-l1-2-0.dll
             1800495D0 Import Address Table
             180061118 Import Name Table
                     0 time date stamp
                     0 Index of first forwarder reference

                           9 FormatMessageW

    api-ms-win-core-debug-l1-1-0.dll
             180049490 Import Address Table
             180060FD8 Import Name Table
                     0 time date stamp
                     0 Index of first forwarder reference

                           4 DebugBreak
                           7 OutputDebugStringW
                           5 IsDebuggerPresent

    api-ms-win-core-handle-l1-1-0.dll
             180049520 Import Address Table
             180061068 Import Name Table
                     0 time date stamp
                     0 Index of first forwarder reference

                           0 CloseHandle

    api-ms-win-core-string-l1-1-0.dll
             180049660 Import Address Table
             1800611A8 Import Name Table
                     0 time date stamp
                     0 Index of first forwarder reference

                           7 WideCharToMultiByte

    api-ms-win-core-processthreads-l1-1-1.dll
             180049618 Import Address Table
             180061160 Import Name Table
                     0 time date stamp
                     0 Index of first forwarder reference

                          32 IsProcessorFeaturePresent

    api-ms-win-core-profile-l1-1-0.dll
             180049628 Import Address Table
             180061170 Import Name Table
                     0 time date stamp
                     0 Index of first forwarder reference

                           0 QueryPerformanceCounter

    api-ms-win-core-sysinfo-l1-1-0.dll
             180049730 Import Address Table
             180061278 Import Name Table
                     0 time date stamp
                     0 Index of first forwarder reference

                          18 GetSystemTimeAsFileTime
                          1D GetTickCount64

    api-ms-win-core-interlocked-l1-1-0.dll
             180049568 Import Address Table
             1800610B0 Import Name Table
                     0 time date stamp
                     0 Index of first forwarder reference

                           0 InitializeSListHead

    api-ms-win-service-management-l1-1-0.dll
             1800499A8 Import Address Table
             1800614F0 Import Name Table
                     0 time date stamp
                     0 Index of first forwarder reference

                           5 OpenServiceW
                           4 OpenSCManagerW
                           0 CloseServiceHandle

    api-ms-win-core-timezone-l1-1-0.dll
             1800497C0 Import Address Table
             180061308 Import Name Table
                     0 time date stamp
                     0 Index of first forwarder reference

                           A SystemTimeToFileTime
                           1 FileTimeToSystemTime

    RPCRT4.dll
             180049470 Import Address Table
             180060FB8 Import Name Table
                     0 time date stamp
                     0 Index of first forwarder reference

                         223 UuidFromStringW

    api-ms-win-core-datetime-l1-1-1.dll
             180049480 Import Address Table
             180060FC8 Import Name Table
                     0 time date stamp
                     0 Index of first forwarder reference

                           1 GetDateFormatEx

    api-ms-win-core-file-l1-2-0.dll
             180049510 Import Address Table
             180061058 Import Name Table
                     0 time date stamp
                     0 Index of first forwarder reference

                           7 CreateFile2

    api-ms-win-core-threadpool-legacy-l1-1-0.dll
             1800497A8 Import Address Table
             1800612F0 Import Name Table
                     0 time date stamp
                     0 Index of first forwarder reference

                           5 DeleteTimerQueueTimer
                           2 CreateTimerQueueTimer

    api-ms-win-service-private-l1-1-0.dll
             1800499C8 Import Address Table
             180061510 Import Name Table
                     0 time date stamp
                     0 Index of first forwarder reference

                          19 UnsubscribeServiceChangeNotifications
                          18 SubscribeServiceChangeNotifications

    api-ms-win-core-heap-l2-1-0.dll
             180049550 Import Address Table
             180061098 Import Name Table
                     0 time date stamp
                     0 Index of first forwarder reference

                           8 LocalAlloc
                           A LocalFree

    api-ms-win-core-file-l1-1-0.dll
             180049500 Import Address Table
             180061048 Import Name Table
                     0 time date stamp
                     0 Index of first forwarder reference

                          65 WriteFile

    msvcp_win.dll
             1800499E0 Import Address Table
             180061528 Import Name Table
                     0 time date stamp
                     0 Index of first forwarder reference

                         533 ?wcout@std@@3V?$basic_ostream@_WU?$char_traits@_W@std@@@1@A
                         4E3 ?sputn@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@QEAA_JPEB_W_J@Z
                         50E ?tie@?$basic_ios@_WU?$char_traits@_W@std@@@std@@QEBAPEAV?$basic_ostream@_WU?$char_traits@_W@std@@@2@XZ
                         246 ?_Osfx@?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QEAAXXZ
                         4C9 ?setstate@?$basic_ios@_WU?$char_traits@_W@std@@@std@@QEAAXH_N@Z
                         48B ?rdbuf@?$basic_ios@_WU?$char_traits@_W@std@@@std@@QEBAPEAV?$basic_streambuf@_WU?$char_traits@_W@std@@@2@XZ
                         536 ?widen@?$basic_ios@_WU?$char_traits@_W@std@@@std@@QEBA_WD@Z
                         51F ?uncaught_exceptions@std@@YAHXZ
                         36A ?flush@?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV12@XZ
                         4E0 ?sputc@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@QEAAG_W@Z
                         128 ??6?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV01@P6AAEAV01@AEAV01@@Z@Z
                         53D ?width@ios_base@std@@QEAA_J_J@Z
                         53E ?width@ios_base@std@@QEBA_JXZ
                         367 ?flags@ios_base@std@@QEBAHXZ
                         3C5 ?good@ios_base@std@@QEBA_NXZ
                         28F ?_Xout_of_range@std@@YAXPEBD@Z
                         28C ?_Xbad_function_call@std@@YAXXZ
                         463 ?put@?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV12@_W@Z
                         28E ?_Xlength_error@std@@YAXPEBD@Z
                         365 ?fill@?$basic_ios@_WU?$char_traits@_W@std@@@std@@QEBA_WXZ

    api-ms-win-core-delayload-l1-1-1.dll
             1800494C0 Import Address Table
             180061008 Import Name Table
                     0 time date stamp
                     0 Index of first forwarder reference

                           1 ResolveDelayLoadedAPI

    api-ms-win-core-delayload-l1-1-0.dll
             1800494B0 Import Address Table
             180060FF8 Import Name Table
                     0 time date stamp
                     0 Index of first forwarder reference

                           0 DelayLoadFailureHook

  Section contains the following delay load imports:

    api-ms-win-core-com-l1-1-0.dll
              00000001 Characteristics
      0000000180064440 Address of HMODULE
      0000000180069130 Import Address Table
      0000000180060348 Import Name Table
      00000001800608D8 Bound Import Name Table
      0000000000000000 Unload Import Name Table
                     0 time date stamp

                                    000000018001059A    3F CoSetProxyBlanket
                                    0000000180010588    4A CoWaitForMultipleObjects
                                    0000000180010540    11 CoEnableCallCancellation
                                    00000001800104B2     5 CoCancelCall
                                    0000000180010470     E CoDisableCallCancellation
                                    00000001800103C1    43 CoTaskMemFree
                                    00000001800103AF    46 CoUninitialize
                                    000000018001039D    49 CoWaitForMultipleHandles
                                    000000018001026A    54 StringFromGUID2
                                    000000018001038B     8 CoCreateGuid
                                    0000000180010379    42 CoTaskMemAlloc
                                    000000018001027C     9 CoCreateInstance
                                    000000018001052E    28 CoInitializeEx

    OLEAUT32.dll
              00000001 Characteristics
      0000000180064448 Address of HMODULE
      0000000180069098 Import Address Table
      00000001800602B0 Import Name Table
      00000001800608F0 Bound Import Name Table
      0000000000000000 Unload Import Name Table
                     0 time date stamp

                                    0000000180010367       Ordinal   162
                                    0000000180010355       Ordinal   161
                                    0000000180010337       Ordinal     6
                                    0000000180010576       Ordinal     8
                                    0000000180010325       Ordinal     2
                                    0000000180010564       Ordinal   185
                                    0000000180010552       Ordinal     9
                                    0000000180010307       Ordinal     7

    IPHLPAPI.DLL
              00000001 Characteristics
      0000000180064450 Address of HMODULE
      0000000180069000 Import Address Table
      0000000180060218 Import Name Table
      0000000180060948 Bound Import Name Table
      0000000000000000 Unload Import Name Table
                     0 time date stamp

                                    000000018001045E     E ConvertInterfaceGuidToLuid
                                    0000000180010940     F ConvertInterfaceIndexToLuid
                                    0000000180010825    45 GetAdaptersAddresses
                                    000000018001092E    6D GetIpInterfaceTable
                                    000000018001091C    4C GetBestRoute2
                                    0000000180010510     8 CloseGetIPPhysicalInterfaceForDestination
                                    00000001800104F0    BD InternalGetIPPhysicalInterfaceForDestination
                                    00000001800104D0    5A GetIfEntry2Ex
                                    000000018001090A    11 ConvertInterfaceLuidToGuid
                                    00000001800104A0    4A GetBestInterfaceEx
                                    0000000180010482    FF NotifyRouteChange2
                                    0000000180010813    5B GetIfStackTable
                                    0000000180010801    42 FreeMibTable
                                    0000000180010952    6B GetIpForwardTable2
                                    00000001800108D4    5D GetIfTable2
                                    000000018001044C     5 CancelMibChangeNotify2

    ext-ms-win-session-winsta-l1-1-2.dll
              00000001 Characteristics
      0000000180064458 Address of HMODULE
      0000000180069210 Import Address Table
      0000000180060428 Import Name Table
      00000001800609D0 Bound Import Name Table
      0000000000000000 Unload Import Name Table
                     0 time date stamp

                                    0000000180010625    1D WinStationQueryCurrentSessionInformation

    ext-ms-win-session-winsta-l1-1-0.dll
              00000001 Characteristics
      0000000180064460 Address of HMODULE
      0000000180069200 Import Address Table
      0000000180060418 Import Name Table
      00000001800609E0 Bound Import Name Table
      0000000000000000 Unload Import Name Table
                     0 time date stamp

                                    00000001800106B0     9 WinStationGetChildSessionId

    ext-ms-win-networking-wlanapi-l1-1-0.dll
              00000001 Characteristics
      0000000180064468 Address of HMODULE
      00000001800691A0 Import Address Table
      00000001800603B8 Import Name Table
      00000001800609F0 Bound Import Name Table
      0000000000000000 Unload Import Name Table
                     0 time date stamp

                                    00000001800107DD     A WlanGetProfileSsidList
                                    00000001800107CB     7 WlanGetProfileIndex
                                    00000001800107B9     1 WlanCloseHandle
                                    00000001800107A7     3 WlanEnumInterfaces
                                    0000000180010795     F WlanQueryInterface
                                    0000000180010783    15 WlanUtf8SsidToDisplayName
                                    0000000180010771     E WlanOpenHandle
                                    000000018001075F     6 WlanGetProfile
                                    000000018001074D     8 WlanGetProfileList
                                    00000001800107EF     4 WlanFreeMemory
                                    000000018001073B     5 WlanGetAvailableNetworkList

    WS2_32.dll
              00000001 Characteristics
      0000000180064470 Address of HMODULE
      00000001800690E0 Import Address Table
      00000001800602F8 Import Name Table
      0000000180060A68 Bound Import Name Table
      0000000000000000 Unload Import Name Table
                     0 time date stamp

                                    00000001800108C2       Ordinal   116
                                    00000001800108B0       Ordinal   115
                                    00000001800108F8    14 WSAAddressToStringW
                                    00000001800109AC    40 WSALookupServiceEnd
                                    000000018001099A    3F WSALookupServiceBeginW
                                    0000000180010988    42 WSALookupServiceNextW
                                    00000001800108E6     7 GetAddrInfoW
                                    0000000180010976       Ordinal   111
                                    0000000180010964     2 FreeAddrInfoW

    ncsi.dll
              00000001 Characteristics
      0000000180064478 Address of HMODULE
      0000000180069220 Import Address Table
      0000000180060438 Import Name Table
      0000000180060AE8 Bound Import Name Table
      0000000000000000 Unload Import Name Table
                     0 time date stamp

                                    0000000180010A37     6 NcsiIdentifyUserSpecificProxies

    NSI.dll
              00000001 Characteristics
      0000000180064480 Address of HMODULE
      0000000180069088 Import Address Table
      00000001800602A0 Import Name Table
      0000000180060AF8 Bound Import Name Table
      0000000000000000 Unload Import Name Table
                     0 time date stamp

                                    0000000180010AFF     E NsiGetParameter

  Summary

        2000 .data
        1000 .didat
        4000 .pdata
       1B000 .rdata
        1000 .reloc
        5000 .rsrc
       46000 .text
        1000 fothk

C:\Users\Administrator\Downloads\dumpbin-14.50.35722-x64>dumpbin /exports  C:\Windows\System32\netprofm.dll
Microsoft (R) COFF/PE Dumper Version 14.50.35722.0
Copyright (C) Microsoft Corporation.  All rights reserved.


Dump of file C:\Windows\System32\netprofm.dll

File Type: DLL

  Section contains the following exports for NETPROFM.dll

    00000000 characteristics
    EC8ED719 time date stamp
        0.00 version
           1 ordinal base
           5 number of functions
           5 number of names

    ordinal hint RVA      name

          2    0 0000C950 DllCanUnloadNow
          3    1 0000C640 DllGetClassObject
          4    2 000169B0 DllRegisterServer
          5    3 000169C0 DllUnregisterServer
          1    4 0000A3D0 InitHelperDll

  Summary

        2000 .data
        1000 .didat
        4000 .pdata
       1B000 .rdata
        1000 .reloc
        5000 .rsrc
       46000 .text
        1000 fothk

netprofm.dll 完整技术解析(Win11 网络列表服务核心)

基础信息

路径:C:\Windows\System32\netprofm.dll
 
承载服务名称:Netprofm(Network List Service / 网络列表服务)
 
宿主进程:svchost.exe -k NetworkService -p
 
权限:NT AUTHORITY\NetworkService
版本分水岭关键结论:
 
Win10:NCSI 探测由 nlasvc.dll (NlaSvc) 调度;Win11/Server2022+ 迁移至 netprofm.dll 统一调度 ncsi.dll

一、导出函数解读

plaintext
 
 
 
InitHelperDll
DllCanUnloadNow
DllGetClassObject
DllRegisterServer
DllUnregisterServer
 
  1. InitHelperDll:svchost 标准服务入口,服务启动主入口;
  2. 其余 4 个为标准 COM 组件导出,提供网络列表相关 COM 对象;
  3. 无对外直接暴露的网络连通性 API,内部通过 LoadLibrary 调用 ncsi.dll 导出函数。

二、依赖分层:硬性导入 vs 延迟加载(DELAYLOAD)

1)启动强制载入(基础运行底座)

CRT、各类api-ms-win-*API 集、ntdll.dllRPCRT4.dll
 
负责:线程池、同步原语、注册表、ETW 日志、内存管理、RPC 服务框架。

2)延迟加载模块【核心链路】

plaintext
 
 
 
ncsi.dll         ✅ 【最关键】NCSI连通性探测引擎
NSI.dll          ✅ 内核网络状态信息订阅(IP/路由变更事件源)
IPHLPAPI.DLL     ✅ 网卡、接口、路由表查询
WS2_32.dll       ✅ 基础套接字
ext-ms-win-networking-wlanapi-l1-1-0.dll  ✅ WLAN无线适配
COM组件:api-ms-win-core-com-l1-1-0.dll、OLEAUT32.dll
会话组件:WinStation API(多用户会话网络状态隔离)
 

架构设计特点

采用延迟加载:
 
系统启动初期只加载基础框架;第一次网络事件触发连通性检测时,才载入 ncsi.dll
 
如果网卡长期无变更、无主动查询网络状态,ncsi.dll 可能不会被加载。

三、关键导入对应业务逻辑

  1. ncsi.dll
     
    可见导入:NcsiIdentifyUserSpecificProxies
     
    内部完整调用链:
     
    NcsiRegisterConnectivityStatusChange → 注册连通性变更回调
     
    NcsiPerformReprobe → 发起 HTTP/DNS 主动探测
     
    netprofm 充当调度器,不实现任何探针逻辑,探测全部交由 ncsi.dll 执行。
  2. NSI.dll
     
    NsiGetParameter / NsiAllocateAndGetTable
     
    订阅内核网络事件(IP 地址变更、网关切换、网卡插拔);
     
    一旦网络拓扑变动,netprofm 收到通知,触发调用 ncsi 重探测。
  3. IPHLPAPI.DLL
     
    枚举网卡、LUID、路由信息,区分多网卡场景选择探测出口。
  4. WlanAPI
     
    无线网卡专用逻辑,Wi-Fi 连接 / 断开触发连通性刷新。
  5. RPCRT4.dll
     
    向外提供 RPC 服务:上层应用、Shell、任务栏网络图标远程订阅网络位置、连通性状态。

四、完整端到端工作时序(Win11 标准链路)

plaintext
 
 
 
内核:ndis.sys → netio.sys
        ↓ 网络事件推送
用户态:NSI.dll 通知 netprofm.dll
        ↓
netprofm → LoadLibrary(ncsi.dll)
        ↓ 调用 NcsiPerformReprobe()
ncsi.dll → DelayLoad(winhttp.dll + dnsapi.dll)
        ↓ HTTP+DNS双探针
生成状态:Internet / Limited / NoInternet / CaptivePortal
        ↓ 回调通知 netprofm
netprofm 通过RPC广播全网状态
        ↓
消费方:
• ShellExperienceHost / shell32.dll(任务栏网络图标黄色感叹号)
• sens.dll(系统事件通知服务)
• 各类应用程序、UWP、Windows Update
 

五、netprofm.dll VS nlasvc.dll 职责变迁(极易混淆)

Win10

  • nlasvc.dll(NlaSvc):网络位置判定(公用 / 专用 / 域)+ 调度 NCSI
  • netprofm.dll(Netprofm):仅维护网络配置文件列表

Win11 / Server2022+(架构合并)

  • netprofm.dll(Netprofm)统一接管
     
    网络列表管理 + 网络位置判定 + NCSI 探测调度
  • nlasvc.dll保留存在,但不再负责 NCSI 调度,功能大幅弱化
排查要点:Win11 观测 ncsi.dll 加载,宿主 svchost 内一定同时存在 netprofm.dll。

六、和你前面收集二进制形成完整组件拓扑

plaintext
 
 
 
内核事件层
ndis.sys → netio.sys → NSI.dll

svchost.exe(NetworkService)
└─ netprofm.dll(调度中枢)
    ├─ NSI.dll(网络变更通知)
    ├─ IPHLPAPI.DLL(网卡信息)
    └── ncsi.dll(探测引擎,延迟载入)
         ├─ winhttp.dll(HTTP探针 www.msftncsi.com)
         └─ dnsapi.dll(DNS探针 dns.msftncsi.com)

状态分发:RPC → Shell / SENS / 应用

七、EDR / 取证观测特征

  1. 进程约束:svchost.exe,启动参数 -k NetworkService -p
  2. DLL 加载顺序特征:
     
    网络变更 → netprofm 收到事件 → 延迟加载 ncsi.dll
     
    随后 ncsi 内部继续延迟加载 winhttp.dll、dnsapi.dll
  3. 网络流量归属:
     
    进程:svchost.exe;栈:netprofm.dll → ncsi.dll → winhttp.dll
  4. ETW 追踪源:
     
    Microsoft-Windows-NCSI(探测结果)、Microsoft-Windows-NetworkListManager(netprofm 事件)

八、常见误区整理

  1. ❌ ncsi.dll 可以独立运行;必须由 netprofm/nlasvc 调度,自身不主动监听网络事件
  2. ❌ Win11 NCSI 依旧由 NlaSvc 控制;已经迁移到 Netprofm
  3. ❌ netprofm.dll 本身发起网络请求;不产生任何网络流量,流量由 ncsi+winhttp 完成
  4. ❌ netprofm.dll 包含连通性判定算法;仅调度,判定逻辑全部封装在 ncsi.dll
%SystemRoot%\System32\netprofm.dll
 
新版统一接管:网络列表管理 + NCSI 探测调度,替代旧 NLA 部分职责。

二、NCSI 直接依赖 DLL 链路(ncsi.dll 导入集合)

plaintext
winhttp.dll      # 【核心】HTTP探针实现(ncsi最关键依赖)
dnsapi.dll       # DNS域名探测 dns.msftncsi.com
iphlpapi.dll     # 获取网卡、IP地址、路由表、网络接口状态
ntdll.dll
kernel32.dll
advapi32.dll     # 读取NCSI注册表配置
ole32.dll        # COM事件通知
rpcrt4.dll       # RPC跨进程状态广播
sens.dll         # 系统事件通知(网络变化事件订阅)
ws2_32.dll       # 基础Winsock套接字

三、上游事件来源组件(通知 NCSI 开始探测)

  1. netio.sys(内核网络 I/O)
     
    网卡上线 / IP 变更、路由变更 → 向上通知用户态服务
  2. ndis.sys(网络驱动接口规范)
     
    底层网卡事件源头
  3. fwpkclnt.sys/fwpk.sys(WFP 平台)
     
    防火墙、策略网络事件推送

四、状态分发链(NCSI 探测完成之后)

plaintext
ncsi.dll(得到结果:Internet/受限/无网络)
    ↓
nlasvc.dll / netprofm.dll
    ↓ RPC事件
上层订阅组件:
• sens.dll(SENS服务,System Event Notification)
• shell32.dll / ShellExperienceHost.exe(任务栏网络图标UI)
• nlaapi.dll(第三方应用查询网络位置API)
• wlansvc.dll(WLAN无线服务,无线网络场景联动)
• winhttp.dll / wininet.dll(应用自动根据连通性调整代理)

五、注册表控制(ncsi.dll 读取配置)

路径:
 
HKLM\SYSTEM\CurrentControlSet\Services\NlaSvc\Parameters\Internet
 
常用键:
  • EnableActiveProbing:0 = 关闭主动探测
  • ProbeHostProbeUrlDnsProbeHost:自定义探测地址

六、完整端到端调用链路(最简时序)

plaintext
网卡IP地址变更
→ NDIS → netio.sys 内核通知
→ svchost(NlaSvc/Netprofm)
→ LoadLibrary(ncsi.dll)
→ ncsi.dll:
    1. WinHTTP 请求 ncsi.txt
    2. dnsapi 查询 dns.msftncsi.com
→ 判定连通状态
→ 通过RPC广播状态
→ Shell刷新任务栏黄色感叹号图标
→ SENS转发事件给应用程序

七、常见误区纠正(重点)

  1. ❌ 不存在 ncsi.sys;NCSI 纯用户态逻辑,没有内核驱动
  2. ❌ NCSI≠NLA;NLA 是服务框架,NCSI 是探测子模块(ncsi.dll)
  3. ❌ Win11 不再由 NlaSvc 执行探测,迁移到 Netprofm,排查时不要只监控 nlasvc.dll
  4. ❌ 探针流量由 winhttp.dll 产生,不是 ncsi.dll 直接创建套接字

八、EDR / 取证监控建议观测对象

  1. 进程:svchost.exe (NetworkService)
  2. DLL 加载:ncsi.dllnlasvc.dllnetprofm.dllwinhttp.dll
  3. 网络特征:
    • HTTP:http://www.msftncsi.com/ncsi.txt
    • DNS:dns.msftncsi.com
  4. ETW 日志提供者:Microsoft-Windows-NCSI(分析追踪最佳数据源)

 

C:\Users\Administrator\Downloads\dumpbin-14.50.35722-x64>dumpbin /dependents  C:\Windows\System32\ncsi.dll
Microsoft (R) COFF/PE Dumper Version 14.50.35722.0
Copyright (C) Microsoft Corporation.  All rights reserved.


Dump of file C:\Windows\System32\ncsi.dll

File Type: DLL

  Image has the following dependencies:

    msvcp_win.dll
    api-ms-win-crt-runtime-l1-1-0.dll
    api-ms-win-crt-private-l1-1-0.dll
    api-ms-win-crt-string-l1-1-0.dll
    ntdll.dll
    api-ms-win-core-libraryloader-l1-2-0.dll
    api-ms-win-core-registry-l1-1-0.dll
    api-ms-win-core-string-l1-1-0.dll
    api-ms-win-stateseparation-helpers-l1-1-0.dll
    api-ms-win-core-heap-l1-1-0.dll
    api-ms-win-core-threadpool-l1-2-0.dll
    api-ms-win-core-processthreads-l1-1-0.dll
    api-ms-win-core-localization-l1-2-0.dll
    api-ms-win-core-debug-l1-1-0.dll
    api-ms-win-core-synch-l1-1-0.dll
    api-ms-win-core-errorhandling-l1-1-0.dll
    api-ms-win-core-synch-l1-2-0.dll
    api-ms-win-core-handle-l1-1-0.dll
    api-ms-win-core-heap-l2-1-0.dll
    api-ms-win-core-synch-l1-2-1.dll
    api-ms-win-core-profile-l1-1-0.dll
    api-ms-win-core-processenvironment-l1-1-0.dll
    api-ms-win-core-version-l1-1-1.dll
    api-ms-win-core-version-l1-1-0.dll
    api-ms-win-core-timezone-l1-1-0.dll
    api-ms-win-core-sysinfo-l1-1-0.dll
    api-ms-win-core-interlocked-l1-1-0.dll
    api-ms-win-core-processthreads-l1-1-1.dll
    api-ms-win-service-private-l1-1-0.dll
    api-ms-win-core-apiquery-l1-1-0.dll
    api-ms-win-eventing-provider-l1-1-0.dll
    api-ms-win-core-delayload-l1-1-1.dll
    api-ms-win-core-delayload-l1-1-0.dll

  Image has the following delay load dependencies:

    ext-ms-win-wevtapi-eventlog-l1-1-0.dll
    ext-ms-win-wevtapi-eventlog-l1-1-1.dll
    ext-ms-win-networking-wcmapi-l1-1-0.dll
    api-ms-win-service-management-l1-1-0.dll
    WS2_32.dll
    WINHTTP.dll
    IPHLPAPI.DLL
    api-ms-win-core-com-l1-1-0.dll
    DNSAPI.dll
    USERENV.dll
    DEVOBJ.dll
    NSI.dll
    UMPDC.dll
    ext-ms-win-session-wtsapi32-l1-1-2.dll
    ext-ms-win-session-wtsapi32-l1-1-0.dll
    ext-ms-win-networking-wlanapi-l1-1-0.dll
    fwpuclnt.dll
    ext-ms-win-wwan-wwapi-l1-1-0.dll
    ext-ms-win-firewallapi-webproxy-l1-1-0.dll
    OLEAUT32.dll
    WINNSI.DLL

  Summary

        5000 .data
        1000 .didat
        6000 .pdata
       1C000 .rdata
        1000 .reloc
        7000 .rsrc
       7E000 .text
        1000 fothk

C:\Users\Administrator\Downloads\dumpbin-14.50.35722-x64>dumpbin /imports C:\Windows\System32\ncsi.dll
Microsoft (R) COFF/PE Dumper Version 14.50.35722.0
Copyright (C) Microsoft Corporation.  All rights reserved.


Dump of file C:\Windows\System32\ncsi.dll

File Type: DLL

  Section contains the following imports:

    msvcp_win.dll
             180081438 Import Address Table
             18009A210 Import Name Table
                     0 time date stamp
                     0 Index of first forwarder reference

                         1C6 ?_Getcoll@_Locinfo@std@@QEBA?AU_Collvec@@XZ
                          6C ??0_Locinfo@std@@QEAA@PEBD@Z
                         28C ?_Xbad_function_call@std@@YAXXZ
                          A4 ??1_Locinfo@std@@QEAA@XZ
                         131 ??Bid@locale@std@@QEAA_KXZ
                          6D ??0_Lockit@std@@QEAA@H@Z
                          A5 ??1_Lockit@std@@QEAA@XZ
                         5C8 _Wcscoll
                         5C9 _Wcsxfrm
                         20F ?_Init@locale@std@@CAPEAV_Locimp@12@_N@Z
                         1D5 ?_Getgloballocale@locale@std@@CAPEAV_Locimp@12@XZ
                         28B ?_Xbad_alloc@std@@YAXXZ
                         3D0 ?id@?$ctype@G@std@@2V0locale@2@A
                         3CD ?id@?$collate@G@std@@2V0locale@2@A
                         291 ?_Xregex_error@std@@YAXW4error_type@regex_constants@1@@Z
                         29F ?c_str@?$_Yarn@D@std@@QEBAPEBDXZ
                         1B7 ?_Getcat@?$ctype@G@std@@SA_KPEAPEBVfacet@locale@2@PEBV42@@Z
                         512 ?tolower@?$ctype@G@std@@QEBAPEBGPEAGPEBG@Z
                         511 ?tolower@?$ctype@G@std@@QEBAGG@Z
                         411 ?is@?$ctype@G@std@@QEBA_NFG@Z
                          AB ??1facet@locale@std@@MEAA@XZ
                          75 ??0facet@locale@std@@IEAA@_K@Z
                         19E ?_Decref@facet@locale@std@@UEAAPEAV_Facet_base@3@XZ
                         1F2 ?_Incref@facet@locale@std@@UEAAXXZ
                         28E ?_Xlength_error@std@@YAXPEBD@Z

    api-ms-win-crt-runtime-l1-1-0.dll
             1800813B8 Import Address Table
             18009A190 Import Name Table
                     0 time date stamp
                     0 Index of first forwarder reference

                          37 _initterm_e
                          36 _initterm

    api-ms-win-crt-private-l1-1-0.dll
             180081250 Import Address Table
             18009A028 Import Name Table
                     0 time date stamp
                     0 Index of first forwarder reference

                          C0 _o__errno
                          C2 _o__execute_onexit_table
                         13C _o__initialize_narrow_environment
                         13D _o__initialize_onexit_table
                         13F _o__invalid_parameter_noinfo
                         140 _o__invalid_parameter_noinfo_noreturn
                         243 _o__purecall
                         251 _o__register_onexit_function
                         259 _o__seh_filter_dll
                         464 memmove
                         2CD _o__wcsicmp
                         2D3 _o__wcslwr_s
                         2D7 _o__wcsnicmp
                         38D _o_free
                         3B1 _o_iswdigit
                         3B6 _o_iswspace
                         3D8 _o_malloc
                         3FF _o_realloc
                         436 _o_terminate
                         444 _o_wcscat_s
                         450 _o_wcstok_s
                         46D wcsstr
                          2B __std_type_info_compare
                           C __C_specific_handler
                         46B wcschr
                          20 __current_exception
                          21 __current_exception_context
                          12 __CxxFrameHandler3
                           1 _CxxThrowException
                         467 strchr
                          60 _o___std_type_info_destroy_list
                          5F _o___std_exception_destroy
                          5E _o___std_exception_copy
                          93 _o__cexit
                          91 _o__callnewh
                          8F _o__beginthreadex
                          A7 _o__crt_atexit
                          70 _o___stdio_common_vswprintf
                          6C _o___stdio_common_vsprintf
                          A0 _o__configure_narrow_argv
                          2A __std_terminate
                          13 __CxxFrameHandler4
                         462 memcmp
                         463 memcpy

    api-ms-win-crt-string-l1-1-0.dll
             1800813D0 Import Address Table
             18009A1A8 Import Name Table
                     0 time date stamp
                     0 Index of first forwarder reference

                          83 memset
                          9E wcscmp

    ntdll.dll
             180081508 Import Address Table
             18009A2E0 Import Name Table
                     0 time date stamp
                     0 Index of first forwarder reference

                          3F EtwEventUnregister
                          3D EtwEventRegister
                          47 EtwEventWriteTransfer
                         4CD RtlIpv4StringToAddressW
                         4D5 RtlIpv6StringToAddressW
                         555 RtlPublishWnfStateData
                         25D NtSetInformationProcess
                          48 EtwGetTraceEnableFlags
                          56 EtwTraceMessage
                          4A EtwGetTraceLoggerHandle
                          49 EtwGetTraceEnableLevel
                          58 EtwUnregisterTraceGuids
                          51 EtwRegisterTraceGuidsW
                         211 NtQueryWnfStateData
                         622 RtlSubscribeWnfStateChangeNotification
                         660 RtlUnsubscribeWnfStateChangeNotification
                         65E RtlUnsubscribeWnfNotificationWaitForCompletion
                         538 RtlNtStatusToDosError
                          3A EtwEventActivityIdControl
                          40 EtwEventWrite
                         1CA NtPowerInformation
                         4C6 RtlIpv4AddressToStringA
                         4CE RtlIpv6AddressToStringA
                         30C RtlCaptureContext
                          36 EtwCheckCoverage
                         522 RtlLookupFunctionEntry
                         67E RtlVirtualUnwind
                          3E EtwEventSetInformation

    api-ms-win-core-libraryloader-l1-2-0.dll
             180080F40 Import Address Table
             180099D18 Import Name Table
                     0 time date stamp
                     0 Index of first forwarder reference

                          16 GetProcAddress
                           D FreeLibrary
                          15 GetModuleHandleW
                          10 GetModuleFileNameA
                          13 GetModuleHandleExA
                          19 LoadLibraryExW
                          14 GetModuleHandleExW

    api-ms-win-core-registry-l1-1-0.dll
             180081008 Import Address Table
             180099DE0 Import Name Table
                     0 time date stamp
                     0 Index of first forwarder reference

                           B RegDeleteValueW
                          2E RegSetValueExW
                           0 RegCloseKey
                          25 RegQueryValueExW
                          1E RegOpenKeyExW
                          14 RegGetValueW
                          1B RegNotifyChangeKeyValue

    api-ms-win-core-string-l1-1-0.dll
             180081048 Import Address Table
             180099E20 Import Name Table
                     0 time date stamp
                     0 Index of first forwarder reference

                           6 MultiByteToWideChar
                           7 WideCharToMultiByte

    api-ms-win-stateseparation-helpers-l1-1-0.dll
             180081428 Import Address Table
             18009A200 Import Name Table
                     0 time date stamp
                     0 Index of first forwarder reference

                           2 GetPersistedRegistryLocationW

    api-ms-win-core-heap-l1-1-0.dll
             180080EF0 Import Address Table
             180099CC8 Import Name Table
                     0 time date stamp
                     0 Index of first forwarder reference

                           6 HeapFree
                           0 GetProcessHeap
                           2 HeapAlloc

    api-ms-win-core-threadpool-l1-2-0.dll
             180081160 Import Address Table
             180099F38 Import Name Table
                     0 time date stamp
                     0 Index of first forwarder reference

                          20 TrySubmitThreadpoolCallback
                           A CreateThreadpoolCleanupGroup
                           3 CloseThreadpoolCleanupGroup
                           4 CloseThreadpoolCleanupGroupMembers
                           7 CloseThreadpoolWait
                          23 WaitForThreadpoolWaitCallbacks
                          1C SetThreadpoolWait
                          1F SubmitThreadpoolWork
                           8 CloseThreadpoolWork
                          24 WaitForThreadpoolWorkCallbacks
                           2 CloseThreadpool
                           E CreateThreadpoolWork
                          18 SetThreadpoolThreadMaximum
                          19 SetThreadpoolThreadMinimum
                           9 CreateThreadpool
                           0 CallbackMayRunLong
                           C CreateThreadpoolTimer
                          1A SetThreadpoolTimer
                           6 CloseThreadpoolTimer
                          22 WaitForThreadpoolTimerCallbacks
                           D CreateThreadpoolWait
                          11 IsThreadpoolTimerSet

    api-ms-win-core-processthreads-l1-1-0.dll
             180080FA0 Import Address Table
             180099D78 Import Name Table
                     0 time date stamp
                     0 Index of first forwarder reference

                           D GetCurrentProcessId
                          14 GetExitCodeThread
                           C GetCurrentProcess
                          11 GetCurrentThreadId
                          55 TerminateProcess
                          10 GetCurrentThread
                          28 GetThreadId

    api-ms-win-core-localization-l1-2-0.dll
             180080F80 Import Address Table
             180099D58 Import Name Table
                     0 time date stamp
                     0 Index of first forwarder reference

                           9 FormatMessageW

    api-ms-win-core-debug-l1-1-0.dll
             180080E78 Import Address Table
             180099C50 Import Name Table
                     0 time date stamp
                     0 Index of first forwarder reference

                           4 DebugBreak
                           7 OutputDebugStringW
                           5 IsDebuggerPresent

    api-ms-win-core-synch-l1-1-0.dll
             180081060 Import Address Table
             180099E38 Import Name Table
                     0 time date stamp
                     0 Index of first forwarder reference

                           B CreateSemaphoreExW
                          37 WaitForSingleObjectEx
                           1 AcquireSRWLockShared
                           0 AcquireSRWLockExclusive
                          24 ReleaseSRWLockExclusive
                          26 ReleaseSemaphore
                           F DeleteCriticalSection
                          1A InitializeCriticalSectionEx
                          11 EnterCriticalSection
                          1D LeaveCriticalSection
                          29 SetEvent
                          36 WaitForSingleObject
                          21 OpenSemaphoreW
                           9 CreateMutexExW
                          23 ReleaseMutex
                           6 CreateEventW
                          1B InitializeSRWLock
                          27 ResetEvent
                          25 ReleaseSRWLockShared
                           5 CreateEventExW
                          31 TryAcquireSRWLockExclusive

    api-ms-win-core-errorhandling-l1-1-0.dll
             180080EB8 Import Address Table
             180099C90 Import Name Table
                     0 time date stamp
                     0 Index of first forwarder reference

                           5 GetLastError
                           D SetLastError
                          11 UnhandledExceptionFilter
                           F SetUnhandledExceptionFilter

    api-ms-win-core-synch-l1-2-0.dll
             180081110 Import Address Table
             180099EE8 Import Name Table
                     0 time date stamp
                     0 Index of first forwarder reference

                          14 InitOnceComplete
                          13 InitOnceBeginInitialize
                          2D Sleep

    api-ms-win-core-handle-l1-1-0.dll
             180080EE0 Import Address Table
             180099CB8 Import Name Table
                     0 time date stamp
                     0 Index of first forwarder reference

                           0 CloseHandle

    api-ms-win-core-heap-l2-1-0.dll
             180080F10 Import Address Table
             180099CE8 Import Name Table
                     0 time date stamp
                     0 Index of first forwarder reference

                           2 GlobalFree
                           A LocalFree
                           8 LocalAlloc

    api-ms-win-core-synch-l1-2-1.dll
             180081130 Import Address Table
             180099F08 Import Name Table
                     0 time date stamp
                     0 Index of first forwarder reference

                          65 WaitForMultipleObjects

    api-ms-win-core-profile-l1-1-0.dll
             180080FF0 Import Address Table
             180099DC8 Import Name Table
                     0 time date stamp
                     0 Index of first forwarder reference

                           0 QueryPerformanceCounter
                           1 QueryPerformanceFrequency

    api-ms-win-core-processenvironment-l1-1-0.dll
             180080F90 Import Address Table
             180099D68 Import Name Table
                     0 time date stamp
                     0 Index of first forwarder reference

                           1 ExpandEnvironmentStringsW

    api-ms-win-core-version-l1-1-1.dll
             180081238 Import Address Table
             18009A010 Import Name Table
                     0 time date stamp
                     0 Index of first forwarder reference

                           3 GetFileVersionInfoW
                           2 GetFileVersionInfoSizeW

    api-ms-win-core-version-l1-1-0.dll
             180081228 Import Address Table
             18009A000 Import Name Table
                     0 time date stamp
                     0 Index of first forwarder reference

                           5 VerQueryValueW

    api-ms-win-core-timezone-l1-1-0.dll
             180081218 Import Address Table
             180099FF0 Import Name Table
                     0 time date stamp
                     0 Index of first forwarder reference

                           1 FileTimeToSystemTime

    api-ms-win-core-sysinfo-l1-1-0.dll
             180081140 Import Address Table
             180099F18 Import Name Table
                     0 time date stamp
                     0 Index of first forwarder reference

                          1D GetTickCount64
                          1C GetTickCount
                          18 GetSystemTimeAsFileTime

    api-ms-win-core-interlocked-l1-1-0.dll
             180080F30 Import Address Table
             180099D08 Import Name Table
                     0 time date stamp
                     0 Index of first forwarder reference

                           0 InitializeSListHead

    api-ms-win-core-processthreads-l1-1-1.dll
             180080FE0 Import Address Table
             180099DB8 Import Name Table
                     0 time date stamp
                     0 Index of first forwarder reference

                          32 IsProcessorFeaturePresent

    api-ms-win-service-private-l1-1-0.dll
             180081410 Import Address Table
             18009A1E8 Import Name Table
                     0 time date stamp
                     0 Index of first forwarder reference

                          18 SubscribeServiceChangeNotifications
                          19 UnsubscribeServiceChangeNotifications

    api-ms-win-core-apiquery-l1-1-0.dll
             180080E68 Import Address Table
             180099C40 Import Name Table
                     0 time date stamp
                     0 Index of first forwarder reference

                           1 ApiSetQueryApiSetPresence

    api-ms-win-eventing-provider-l1-1-0.dll
             1800813E8 Import Address Table
             18009A1C0 Import Name Table
                     0 time date stamp
                     0 Index of first forwarder reference

                           9 EventWriteTransfer
                           5 EventUnregister
                           4 EventSetInformation
                           3 EventRegister

    api-ms-win-core-delayload-l1-1-1.dll
             180080EA8 Import Address Table
             180099C80 Import Name Table
                     0 time date stamp
                     0 Index of first forwarder reference

                           1 ResolveDelayLoadedAPI

    api-ms-win-core-delayload-l1-1-0.dll
             180080E98 Import Address Table
             180099C70 Import Name Table
                     0 time date stamp
                     0 Index of first forwarder reference

                           0 DelayLoadFailureHook

  Section contains the following delay load imports:

    ext-ms-win-wevtapi-eventlog-l1-1-0.dll
              00000001 Characteristics
      000000018009D538 Address of HMODULE
      00000001800A73C0 Import Address Table
      0000000180098710 Import Name Table
      0000000180099170 Bound Import Name Table
      0000000000000000 Unload Import Name Table
                     0 time date stamp

                                    0000000180047AB4    26 EvtSubscribe
                                    0000000180047B51     5 EvtCreateRenderContext
                                    00000001800479F9     3 EvtClose
                                    0000000180047B63    22 EvtRender

    ext-ms-win-wevtapi-eventlog-l1-1-1.dll
              00000001 Characteristics
      000000018009D550 Address of HMODULE
      00000001800A73E8 Import Address Table
      0000000180098738 Import Name Table
      0000000180099188 Bound Import Name Table
      0000000000000000 Unload Import Name Table
                     0 time date stamp

                                    0000000180047B3F    20 EvtOpenSession

    ext-ms-win-networking-wcmapi-l1-1-0.dll
              00000001 Characteristics
      000000018009D560 Address of HMODULE
      00000001800A7340 Import Address Table
      0000000180098690 Import Name Table
      00000001800991A8 Bound Import Name Table
      0000000000000000 Unload Import Name Table
                     0 time date stamp

                                    0000000180048DC3    16 WcmSetParameter
                                    0000000180047C45       Ordinal     4
                                    0000000180048DD5     3 WcmCloseHandle
                                    0000000180048DB1     D WcmOpenHandle
                                    0000000180047C57       Ordinal     5

    api-ms-win-service-management-l1-1-0.dll
              00000001 Characteristics
      000000018009D568 Address of HMODULE
      00000001800A7308 Import Address Table
      0000000180098658 Import Name Table
      00000001800991C0 Bound Import Name Table
      0000000000000000 Unload Import Name Table
                     0 time date stamp

                                    0000000180047CE2     4 OpenSCManagerW
                                    0000000180047CF4     5 OpenServiceW
                                    0000000180047DA3     0 CloseServiceHandle

    WS2_32.dll
              00000001 Characteristics
      000000018009D570 Address of HMODULE
      00000001800A7280 Import Address Table
      00000001800985D0 Import Name Table
      00000001800991D8 Bound Import Name Table
      0000000000000000 Unload Import Name Table
                     0 time date stamp

                                    0000000180048E0B     A InetNtopW
                                    00000001800481C9     2 FreeAddrInfoW
                                    0000000180048193       Ordinal   111
                                    0000000180047D7F       Ordinal   115
                                    0000000180048E2F       Ordinal    14
                                    0000000180047D91       Ordinal   116
                                    0000000180048DE7       Ordinal     9
                                    0000000180048DF9       Ordinal    15
                                    0000000180047E52     7 GetAddrInfoW
                                    0000000180047ED8    14 WSAAddressToStringW
                                    0000000180048E1D    5B WSAStringToAddressW

    WINHTTP.dll
              00000001 Characteristics
      000000018009D578 Address of HMODULE
      00000001800A71B0 Import Address Table
      0000000180098500 Import Name Table
      00000001800991F8 Bound Import Name Table
      0000000000000000 Unload Import Name Table
                     0 time date stamp

                                    0000000180047EB4    25 WinHttpGetDefaultProxyConfiguration
                                    0000000180048278     9 WinHttpConnect
                                    000000018004828A    32 WinHttpOpenRequest
                                    000000018004829C    4E WinHttpSetStatusCallback
                                    0000000180047EA2    4B WinHttpSetOption
                                    00000001800482C0    48 WinHttpSendRequest
                                    00000001800482D2    42 WinHttpReceiveResponse
                                    00000001800482E4    3B WinHttpQueryHeaders
                                    00000001800482F6    3A WinHttpQueryDataAvailable
                                    0000000180048308    3E WinHttpReadData
                                    000000018004831A    3D WinHttpQueryOption
                                    0000000180047E2E    26 WinHttpGetIEProxyConfigForCurrentUser
                                    0000000180047E40    18 WinHttpCrackUrl
                                    0000000180047EC6    27 WinHttpGetProxyForUrl
                                    0000000180047E64    31 WinHttpOpen
                                    0000000180047E76    45 WinHttpResetAutoProxy
                                    0000000180047E90     8 WinHttpCloseHandle
                                    0000000180048042     D WinHttpConnectionFreeProxyInfo
                                    0000000180048030    10 WinHttpConnectionGetProxyInfo
                                    00000001800482AE    4F WinHttpSetTimeouts

    IPHLPAPI.DLL
              00000001 Characteristics
      000000018009D580 Address of HMODULE
      00000001800A7070 Import Address Table
      00000001800983C0 Import Name Table
      0000000180099250 Bound Import Name Table
      0000000000000000 Unload Import Name Table
                     0 time date stamp

                                    0000000180048E41    45 GetAdaptersAddresses
                                    00000001800481B7    4C GetBestRoute2
                                    0000000180049089   104 ParseNetworkString
                                    00000001800481A5    19 ConvertLengthToIpv4Mask
                                    00000001800480AE     E ConvertInterfaceGuidToLuid
                                    000000018004809C     8 CloseGetIPPhysicalInterfaceForDestination
                                    000000018004808A    BD InternalGetIPPhysicalInterfaceForDestination
                                    0000000180048078    42 FreeMibTable
                                    0000000180048066   116 ResolveIpNetEntry2
                                    0000000180048054    6B GetIpForwardTable2
                                    000000018004801E    12 ConvertInterfaceLuidToIndex
                                    0000000180047F81    11 ConvertInterfaceLuidToGuid
                                    0000000180047F63    59 GetIfEntry2

    api-ms-win-core-com-l1-1-0.dll
              00000001 Characteristics
      000000018009D588 Address of HMODULE
      00000001800A72E0 Import Address Table
      0000000180098630 Import Name Table
      0000000180099268 Bound Import Name Table
      0000000000000000 Unload Import Name Table
                     0 time date stamp

                                    0000000180048E53     9 CoCreateInstance
                                    0000000180048F5C    28 CoInitializeEx
                                    000000018004800C    4E IIDFromString
                                    0000000180048F4A    46 CoUninitialize

    DNSAPI.dll
              00000001 Characteristics
      000000018009D590 Address of HMODULE
      00000001800A7040 Import Address Table
      0000000180098390 Import Name Table
      00000001800992C0 Bound Import Name Table
      0000000000000000 Unload Import Name Table
                     0 time date stamp

                                    0000000180048181    C0 DnsResolverOp
                                    000000018004814B    B1 DnsRecordListUnmapV4MappedAAAAInPlace
                                    000000018004815D    4E DnsFree
                                    000000018004816F    9F DnsNotifyResolverEx
                                    0000000180048139    A3 DnsQueryEx

    USERENV.dll
              00000001 Characteristics
      000000018009D598 Address of HMODULE
      00000001800A7198 Import Address Table
      00000001800984E8 Import Name Table
      0000000180099310 Bound Import Name Table
      0000000000000000 Unload Import Name Table
                     0 time date stamp

                                    0000000180048254    30 RegisterGPNotification
                                    0000000180048266    38 UnregisterGPNotification

    DEVOBJ.dll
              00000001 Characteristics
      000000018009D5A0 Address of HMODULE
      00000001800A7000 Import Address Table
      0000000180098350 Import Name Table
      0000000180099378 Bound Import Name Table
      0000000000000000 Unload Import Name Table
                     0 time date stamp

                                    00000001800483FF    1B DevObjGetDeviceInstanceId
                                    00000001800483A5     7 DevObjCreateDeviceInfoList
                                    0000000180048411    10 DevObjDestroyDeviceInfoList
                                    00000001800483B7    14 DevObjGetClassDevs
                                    00000001800483ED    22 DevObjGetDeviceRegistryProperty
                                    00000001800483DB    25 DevObjOpenDevRegKey
                                    00000001800483C9    11 DevObjEnumDeviceInfo

    NSI.dll
              00000001 Characteristics
      000000018009D5A8 Address of HMODULE
      00000001800A70E0 Import Address Table
      0000000180098430 Import Name Table
      00000001800993B8 Bound Import Name Table
      0000000000000000 Unload Import Name Table
                     0 time date stamp

                                    0000000180048F92     1 NsiAllocateAndGetTable
                                    00000001800484A8     5 NsiEnumerateObjectsAllParameters
                                    0000000180048FB6     E NsiGetParameter
                                    00000001800484CC    14 NsiSetAllParameters
                                    00000001800484BA     A NsiGetAllParameters
                                    0000000180048FA4     9 NsiFreeTable

    UMPDC.dll
              00000001 Characteristics
      000000018009D5B0 Address of HMODULE
      00000001800A7160 Import Address Table
      00000001800984B0 Import Name Table
      00000001800993D8 Bound Import Name Table
      0000000000000000 Unload Import Name Table
                     0 time date stamp

                                    0000000180048569     7 PdcNotificationClientRegister
                                    00000001800485B1    1F Pdcv2ActivationClientDeactivate
                                    0000000180048557     8 PdcNotificationClientUnregister
                                    000000018004859F    1E Pdcv2ActivationClientActivate
                                    000000018004858D    20 Pdcv2ActivationClientRegister
                                    000000018004857B    23 Pdcv2ActivationClientUnregister

    ext-ms-win-session-wtsapi32-l1-1-2.dll
              00000001 Characteristics
      000000018009D5C8 Address of HMODULE
      00000001800A73B0 Import Address Table
      0000000180098700 Import Name Table
      0000000180099410 Bound Import Name Table
      0000000000000000 Unload Import Name Table
                     0 time date stamp

                                    00000001800486E5     0 WTSActiveSessionExists

    ext-ms-win-session-wtsapi32-l1-1-0.dll
              00000001 Characteristics
      000000018009D5D0 Address of HMODULE
      00000001800A7398 Import Address Table
      00000001800986E8 Import Name Table
      0000000180099420 Bound Import Name Table
      0000000000000000 Unload Import Name Table
                     0 time date stamp

                                    0000000180048770     5 WTSEnumerateSessionsW
                                    0000000180048782     6 WTSFreeMemory

    ext-ms-win-networking-wlanapi-l1-1-0.dll
              00000001 Characteristics
      000000018009D5E0 Address of HMODULE
      00000001800A7370 Import Address Table
      00000001800986C0 Import Name Table
      0000000180099438 Bound Import Name Table
      0000000000000000 Unload Import Name Table
                     0 time date stamp

                                    0000000180048885     4 WlanFreeMemory
                                    0000000180048873     F WlanQueryInterface
                                    0000000180048861     E WlanOpenHandle
                                    0000000180048897     1 WlanCloseHandle

    fwpuclnt.dll
              00000001 Characteristics
      000000018009D5E8 Address of HMODULE
      00000001800A7420 Import Address Table
      0000000180098770 Import Name Table
      0000000180099460 Bound Import Name Table
      0000000000000000 Unload Import Name Table
                     0 time date stamp

                                    0000000180048934    E5 IPsecSaContextSubscribe0
                                    0000000180048946    E9 IPsecSaCreateEnumHandle0
                                    0000000180048922    2C FwpmEngineOpen0
                                    000000018004896A    EC IPsecSaDestroyEnumHandle0
                                    000000018004897C    E7 IPsecSaContextUnsubscribe0
                                    000000018004898E    29 FwpmEngineClose0
                                    00000001800489A0    E0 IPsecSaContextGetById0
                                    00000001800489B2    43 FwpmFreeMemory0
                                    0000000180048958    ED IPsecSaEnum0

    ext-ms-win-wwan-wwapi-l1-1-0.dll
              00000001 Characteristics
      000000018009D600 Address of HMODULE
      00000001800A73F8 Import Address Table
      0000000180098748 Import Name Table
      00000001800994B0 Bound Import Name Table
      0000000000000000 Unload Import Name Table
                     0 time date stamp

                                    0000000180048AB5    15 WwanFreeMemory
                                    0000000180048A91    1C WwanOpenHandle
                                    0000000180048AA3    1D WwanQueryInterface
                                    0000000180048AC7     F WwanCloseHandle

    ext-ms-win-firewallapi-webproxy-l1-1-0.dll
              00000001 Characteristics
      000000018009D608 Address of HMODULE
      00000001800A7328 Import Address Table
      0000000180098678 Import Name Table
      00000001800994D8 Bound Import Name Table
      0000000000000000 Unload Import Name Table
                     0 time date stamp

                                    0000000180048BB8     7 FWIndicateTupleInUse
                                    0000000180048B52     D FWResetIndicatedTupleInUse

    OLEAUT32.dll
              00000001 Characteristics
      000000018009D620 Address of HMODULE
      00000001800A7118 Import Address Table
      0000000180098468 Import Name Table
      0000000180099540 Bound Import Name Table
      0000000000000000 Unload Import Name Table
                     0 time date stamp

                                    0000000180048EF0       Ordinal     6
                                    0000000180048EDE       Ordinal     8
                                    0000000180048F38       Ordinal    23
                                    0000000180048F6E       Ordinal     2
                                    0000000180048F26       Ordinal   411
                                    0000000180048F14       Ordinal    24
                                    0000000180048F80       Ordinal    16
                                    0000000180048F02       Ordinal     4

    WINNSI.DLL
              00000001 Characteristics
      000000018009D628 Address of HMODULE
      00000001800A7258 Import Address Table
      00000001800985A8 Import Name Table
      00000001800995B0 Bound Import Name Table
      0000000000000000 Unload Import Name Table
                     0 time date stamp

                                    0000000180049041     0 NsiConnectToServer
                                    0000000180049065     2 NsiRpcDeregisterChangeNotification
                                    0000000180049053     9 NsiRpcRegisterChangeNotification
                                    0000000180049077     1 NsiDisconnectFromServer

  Summary

        5000 .data
        1000 .didat
        6000 .pdata
       1C000 .rdata
        1000 .reloc
        7000 .rsrc
       7E000 .text
        1000 fothk

C:\Users\Administrator\Downloads\dumpbin-14.50.35722-x64>dumpbin /exports  C:\Windows\System32\ncsi.dll
Microsoft (R) COFF/PE Dumper Version 14.50.35722.0
Copyright (C) Microsoft Corporation.  All rights reserved.


Dump of file C:\Windows\System32\ncsi.dll

File Type: DLL

  Section contains the following exports for ncsi.dll

    00000000 characteristics
    B6D17CE0 time date stamp
        0.00 version
           1 ordinal base
          13 number of functions
          13 number of names

    ordinal hint RVA      name

          1    0 0000F570 NcsiAllocateAndGetConnectivityStatusSet
          2    1 000509F0 NcsiDeregisterConnectivityStatusChange
          3    2 00050A90 NcsiDeregisterDiagnosticsInfoChange
          4    3 00038870 NcsiFreeConnectivityStatusSet
          5    4 00050B10 NcsiGetCaptivePortalHosts
          6    5 00050D20 NcsiGetWebProbeConfig
          7    6 000546D0 NcsiIdentifyUserSpecificProxies
          8    7 00038C00 NcsiNotifySessionChange
          9    8 00050ED0 NcsiPerformRefresh
         10    9 0002F700 NcsiPerformReprobe
         11    A 000510F0 NcsiRegisterConnectivityStatusChange
         12    B 000511D0 NcsiRegisterDiagnosticsInfoChange
         13    C 000512A0 NcsiUpdateClientPresence

  Summary

        5000 .data
        1000 .didat
        6000 .pdata
       1C000 .rdata
        1000 .reloc
        7000 .rsrc
       7E000 .text
        1000 fothk

netprofm.dll 完整技术解析(Win11 网络列表服务核心)

基础信息

路径:C:\Windows\System32\netprofm.dll
 
承载服务名称:Netprofm(Network List Service / 网络列表服务)
 
宿主进程:svchost.exe -k NetworkService -p
 
权限:NT AUTHORITY\NetworkService
版本分水岭关键结论:
 
Win10:NCSI 探测由 nlasvc.dll (NlaSvc) 调度;Win11/Server2022+ 迁移至 netprofm.dll 统一调度 ncsi.dll

一、导出函数解读

plaintext
 
 
 
InitHelperDll
DllCanUnloadNow
DllGetClassObject
DllRegisterServer
DllUnregisterServer
 
  1. InitHelperDll:svchost 标准服务入口,服务启动主入口;
  2. 其余 4 个为标准 COM 组件导出,提供网络列表相关 COM 对象;
  3. 无对外直接暴露的网络连通性 API,内部通过 LoadLibrary 调用 ncsi.dll 导出函数。

二、依赖分层:硬性导入 vs 延迟加载(DELAYLOAD)

1)启动强制载入(基础运行底座)

CRT、各类api-ms-win-*API 集、ntdll.dllRPCRT4.dll
 
负责:线程池、同步原语、注册表、ETW 日志、内存管理、RPC 服务框架。

2)延迟加载模块【核心链路】

plaintext
 
 
 
ncsi.dll         ✅ 【最关键】NCSI连通性探测引擎
NSI.dll          ✅ 内核网络状态信息订阅(IP/路由变更事件源)
IPHLPAPI.DLL     ✅ 网卡、接口、路由表查询
WS2_32.dll       ✅ 基础套接字
ext-ms-win-networking-wlanapi-l1-1-0.dll  ✅ WLAN无线适配
COM组件:api-ms-win-core-com-l1-1-0.dll、OLEAUT32.dll
会话组件:WinStation API(多用户会话网络状态隔离)
 

架构设计特点

采用延迟加载:
 
系统启动初期只加载基础框架;第一次网络事件触发连通性检测时,才载入 ncsi.dll
 
如果网卡长期无变更、无主动查询网络状态,ncsi.dll 可能不会被加载。

三、关键导入对应业务逻辑

  1. ncsi.dll
     
    可见导入:NcsiIdentifyUserSpecificProxies
     
    内部完整调用链:
     
    NcsiRegisterConnectivityStatusChange → 注册连通性变更回调
     
    NcsiPerformReprobe → 发起 HTTP/DNS 主动探测
     
    netprofm 充当调度器,不实现任何探针逻辑,探测全部交由 ncsi.dll 执行。
  2. NSI.dll
     
    NsiGetParameter / NsiAllocateAndGetTable
     
    订阅内核网络事件(IP 地址变更、网关切换、网卡插拔);
     
    一旦网络拓扑变动,netprofm 收到通知,触发调用 ncsi 重探测。
  3. IPHLPAPI.DLL
     
    枚举网卡、LUID、路由信息,区分多网卡场景选择探测出口。
  4. WlanAPI
     
    无线网卡专用逻辑,Wi-Fi 连接 / 断开触发连通性刷新。
  5. RPCRT4.dll
     
    向外提供 RPC 服务:上层应用、Shell、任务栏网络图标远程订阅网络位置、连通性状态。

四、完整端到端工作时序(Win11 标准链路)

plaintext
 
 
 
内核:ndis.sys → netio.sys
        ↓ 网络事件推送
用户态:NSI.dll 通知 netprofm.dll
        ↓
netprofm → LoadLibrary(ncsi.dll)
        ↓ 调用 NcsiPerformReprobe()
ncsi.dll → DelayLoad(winhttp.dll + dnsapi.dll)
        ↓ HTTP+DNS双探针
生成状态:Internet / Limited / NoInternet / CaptivePortal
        ↓ 回调通知 netprofm
netprofm 通过RPC广播全网状态
        ↓
消费方:
• ShellExperienceHost / shell32.dll(任务栏网络图标黄色感叹号)
• sens.dll(系统事件通知服务)
• 各类应用程序、UWP、Windows Update
 

五、netprofm.dll VS nlasvc.dll 职责变迁(极易混淆)

Win10

  • nlasvc.dll(NlaSvc):网络位置判定(公用 / 专用 / 域)+ 调度 NCSI
  • netprofm.dll(Netprofm):仅维护网络配置文件列表

Win11 / Server2022+(架构合并)

  • netprofm.dll(Netprofm)统一接管
     
    网络列表管理 + 网络位置判定 + NCSI 探测调度
  • nlasvc.dll保留存在,但不再负责 NCSI 调度,功能大幅弱化
排查要点:Win11 观测 ncsi.dll 加载,宿主 svchost 内一定同时存在 netprofm.dll。

六、和你前面收集二进制形成完整组件拓扑

plaintext
 
 
 
内核事件层
ndis.sys → netio.sys → NSI.dll

svchost.exe(NetworkService)
└─ netprofm.dll(调度中枢)
    ├─ NSI.dll(网络变更通知)
    ├─ IPHLPAPI.DLL(网卡信息)
    └── ncsi.dll(探测引擎,延迟载入)
         ├─ winhttp.dll(HTTP探针 www.msftncsi.com)
         └─ dnsapi.dll(DNS探针 dns.msftncsi.com)

状态分发:RPC → Shell / SENS / 应用
 

七、EDR / 取证观测特征

  1. 进程约束:svchost.exe,启动参数 -k NetworkService -p
  2. DLL 加载顺序特征:
     
    网络变更 → netprofm 收到事件 → 延迟加载 ncsi.dll
     
    随后 ncsi 内部继续延迟加载 winhttp.dll、dnsapi.dll
  3. 网络流量归属:
     
    进程:svchost.exe;栈:netprofm.dll → ncsi.dll → winhttp.dll
  4. ETW 追踪源:
     
    Microsoft-Windows-NCSI(探测结果)、Microsoft-Windows-NetworkListManager(netprofm 事件)

八、常见误区整理

  1. ❌ ncsi.dll 可以独立运行;必须由 netprofm/nlasvc 调度,自身不主动监听网络事件
  2. ❌ Win11 NCSI 依旧由 NlaSvc 控制;已经迁移到 Netprofm
  3. ❌ netprofm.dll 本身发起网络请求;不产生任何网络流量,流量由 ncsi+winhttp 完成
  4. ❌ netprofm.dll 包含连通性判定算法;仅调度,判定逻辑全部封装在 ncsi.dll

 

winhttp.dll 完整技术解析(NCSI HTTP 探针底层实现)

基础信息

路径:C:\Windows\System32\winhttp.dll
 
组件:Windows HTTP Services(WinHTTP)
 
角色:系统原生 HTTP/HTTPS 客户端库;NCSI 连通性 HTTP 探针的最终执行载体
 
运行模式:用户态 DLL,可被任意进程加载;在 NCSI 链路中由ncsi.dll延迟载入。

一、导出函数重点梳理(和 NCSI 强相关 API)

plaintext
 
 
 
WinHttpOpen                  // 创建会话环境
WinHttpConnect               // 建立目标主机连接
WinHttpOpenRequest           // 构造HTTP请求
WinHttpSendRequest           // 发送请求
WinHttpReceiveResponse       // 接收响应
WinHttpQueryHeaders          // 读取响应头
WinHttpReadData              // 读取body(校验"Microsoft NCSI")
WinHttpSetTimeouts           // 设置探针超时
WinHttpGetProxyForUrl        // 自动获取系统代理配置【NCSI关键】
WinHttpGetIEProxyConfigForCurrentUser
WinHttpSetOption
WinHttpCloseHandle
✅ WinHttpProbeConnectivity  // 专用连通性探测入口,NCSI优先调用
 
NCSI 链路调用路径:
 
ncsi.dll → WinHttpProbeConnectivity / 标准 WinHttp 序列 → 请求 http://www.msftncsi.com/ncsi.txt

二、依赖分层:硬性导入 vs 延迟加载(DELAYLOAD)

1)启动强制载入底座

CRT、大量api-ms-win-*ntdll.dllkernelbase.dll
 
负责:内存、线程池、同步、注册表、ETW、字符串、安全 SID 基础能力。

2)延迟加载模块【网络与安全核心】

plaintext
 
 
 
WS2_32.dll        // 底层套接字
DNSAPI.dll        // DNS解析(域名→IP)
CRYPT32.dll       // TLS/SSL证书验证
SspiCli.dll       // SSP安全包、HTTP认证
websocket.dll     // WebSocket支持
IPHLPAPI.DLL      // 网卡/路由信息
NSI.dll           // 网络状态查询
webio.dll         // 底层I/O辅助
WINTRUST.dll      // 证书信任校验
dhcpcsvc.DLL      // DHCP相关网络配置
RPCRT4.dll        // RPC代理相关
 

架构特点

winhttp 采用延迟加载设计:
 
初始化时不载入全套网络与密码学组件;第一次发起 HTTP 请求时才加载套接字、DNS、加密库。
 
对应观测现象:svchost 刚启动模块列表看不到 dnsapi/crypt32;第一次 NCSI 探测出现后载入。

三、关键业务链路(NCSI 场景完整栈)

plaintext
 
 
 
svchost.exe(NetworkService)
    ↓ netprofm.dll
        ↓ LoadLibrary(ncsi.dll)
            ↓ ncsi.dll 内部触发 LoadLibrary(winhttp.dll)
                ↓ winhttp.dll【延迟加载】WS2_32.dll、DNSAPI.dll、CRYPT32.dll
                ↓ HTTP GET http://www.msftncsi.com/ncsi.txt
                ↓ 读取响应正文比对字符串
            ↓ 返回探测结果(Internet / Limited / CaptivePortal)
        ↓ netprofm通过RPC广播状态
    ↓ Shell更新任务栏网络图标
 

四、关键导入功能拆解

  1. DNSAPI.dll
     
    域名解析 www.msftncsi.com;同时 NCSI 并行单独调用 dnsapi 探测 dns.msftncsi.com
  2. WS2_32.dll
     
    socket connect、send、recv,所有 TCP 流量底层载体。
  3. CRYPT32.dll + SspiCli.dll
     
    HTTPS 证书校验;门户认证、代理认证协商。
  4. NSI.dll / IPHLPAPI.DLL
     
    多网卡场景,识别探测使用哪一张网卡出口、读取路由。
  5. Credential API
     
    读取系统保存的代理账号、内网门户凭证。

五、和前面组件形成完整 Win11 NCSI 全链路拓扑

plaintext
 
 
 
内核事件
ndis.sys → netio.sys → NSI.dll

svchost.exe -k NetworkService -p
├─ netprofm.dll(调度中枢)
│   └── ncsi.dll(连通性探测引擎,delay load)
│        └── winhttp.dll(HTTP探针,第二层delay load)
│             ├─ WS2_32.dll
│             ├─ DNSAPI.dll
│             └─ CRYPT32.dll / SspiCli.dll
└─ RPC向外分发连通性事件
 

六、EDR / 流量 / 模块观测重点

  1. 进程主体svchost.exe(NetworkService)产生 msftncsi HTTP 流量;
  2. 模块加载时序特征
     
    网络变更 → netprofm → ncsi 载入 → 随后 winhttp 载入 → 再载入 dnsapi、crypt32;
  3. 栈溯源特征
     
    网络发包栈:winhttp.dll → ws2_32.dll
     
    上层调用栈:ncsi.dll → winhttp.dll!WinHttpProbeConnectivity
  4. 区分两组 NCSI 探针
    • HTTP 探针:winhttp.dll 实现(ncsi.txt)
    • DNS 探针:ncsi.dll 直接调用 dnsapi.dll,不走 winhttp
  5. 常见误区
     
    ❌ ncsi.dll 直接产生网络流量;实际流量全部委托 winhttp/ws2_32
     
    ❌ wininet.dll 参与 NCSI;NCSI 固定使用 winhttp,不使用 wininet

七、WinHTTP 与 WinINet 简要区分(取证易混淆)

  • WinHTTP(winhttp.dll):服务后台、守护进程、系统组件使用(NCSI、WU、svchost);无浏览器缓存、无 UI 关联;
  • WinINet(wininet.dll):浏览器、普通交互式应用;绑定用户缓存、Cookie、IE 设置;NCSI 完全不使用

 

 

dnsapi.dll 完整技术解析(Windows DNS 客户端库 & NCSI DNS 探针载体)

基础信息

路径:C:\Windows\System32\dnsapi.dll
 
组件:DNS Client API(DNS 解析用户态核心库)
 
核心职责:
  1. 提供系统标准 DNS 查询 API(DnsQuery_W/A/Ex
  2. 管理 DNS 缓存、NRPT 策略、多网卡 DNS 服务器路由
  3. 承载 NCSI 的 DNS 连通性探测dns.msftncsi.com A 记录查询)
  4. 处理 DoH、代理 DNS、DHCP 下发 DNS 配置
运行特征:延迟加载依赖链,大量底层网络组件按需载入。

一、依赖分层解析

1)硬性导入(加载 DLL 立刻载入)

CRT 系列、api-ms-win-*基础集、ntdll.dllkernelbase.dll
 
提供基础内存、线程、同步、注册表、ETW、字符串、错误处理底座。

2)延迟加载模块(关键网络栈,首次 DNS 查询才载入)

plaintext
 
 
 
WS2_32.dll        // 底层socket收发
IPHLPAPI.DLL      // 网卡、路由、接口LUID
NSI.dll           // 网络状态查询、网络变更通知
WINHTTP.dll       // DoH查询、HTTP DNS通道
CRYPT32.dll / CRYPTBASE.dll // DoH TLS证书校验
dhcpcsvc.DLL / dhcpcsvc6.DLL // 获取DHCP分配DNS服务器
RPCRT4.dll        // RPC通信、策略下发
WCMAPI(ext-ms-win-networking-wcmapi-l1-1-0.dll)// WCM网络配置
 
重要特征:dnsapi.dll 延迟依赖winhttp.dll,用于 DNS over HTTPS,NCSI 场景不会走这条分支

二、核心导出函数(与 NCSI 强相关)

plaintext
 
 
 
DnsQuery_W / DnsQuery_A / DnsQueryExW
DnsQueryConfig
DnsFlushResolverCache
DnsGetAdaptersInfo
DnsNotifyResolver
DnsFree
 

NCSI 调用链路重点

NCSI 执行两组独立探测
  1. HTTP 探测ncsi.dll → winhttp.dll 请求 ncsi.txt
  2. DNS 探测ncsi.dll → dnsapi.dll!DnsQuery_W 查询 dns.msftncsi.com
✅ 区分要点:DNS 探针不经过 winhttp,直接调用 dnsapi 原生 DNS 查询;HTTP 探针由 winhttp 完成。
探测逻辑:
 
成功解析出134.170.168.1 → 判断互联网连通;
 
解析失败 / 返回其他地址 → 受限网络 / 门户认证。

三、关键导入模块业务作用

  1. WS2_32.dll
     
    UDP 53 / TCP 53 DNS 报文收发,传统 DNS 底层传输。
  2. IPHLPAPI.DLL
     
    多网卡场景,绑定对应网卡出口,读取接口 DNS 服务器列表。
  3. NSI.dll
     
    监听网络接口上下线,触发 DNS 缓存刷新、服务器重选。
  4. WINHTTP.dll
     
    仅用于 DNS over HTTPS(DoH),建立 HTTPS 隧道发送 DNS 报文。
  5. dhcpcsvc / dhcpcsvc6
     
    读取 DHCPv4/v6 分配的 DNS 服务器地址。
  6. CRYPT32
     
    DoH 连接时 TLS 证书链验证。

四、整合进完整 Win11 NCSI 全链路拓扑(最新完整版)

plaintext
 
 
 
内核层
ndis.sys → netio.sys → NSI.dll(网络变更通知)

svchost.exe -k NetworkService -p
├─ netprofm.dll(调度中枢 Netprofm 服务)
│   └── ncsi.dll(NCSI探测引擎,延迟载入)
│        ├─【DNS探针分支】
│        │   └─ dnsapi.dll(DnsQuery_W 查询 dns.msftncsi.com)
│        │       └─ WS2_32.dll(UDP 53)
│        └─【HTTP探针分支】
│             └─ winhttp.dll(GET ncsi.txt)
│                 ├─ WS2_32.dll
│                 ├─ DNSAPI.dll(域名解析www.msftncsi.com)
│                 └─ CRYPT32.dll
└─ RPC服务:向外广播连通性状态 → Shell更新任务栏网络图标
 

两条探针调用栈清晰区分(EDR 溯源关键)

  1. NCSI DNS 探针栈
     
    ncsi.dll → dnsapi.dll!DnsQuery_W → WS2_32.dll
     
    目标:dns.msftncsi.com,协议:UDP53 DNS
  2. NCSI HTTP 探针栈
     
    ncsi.dll → winhttp.dll!WinHttpSendRequest
     
    winhttp 内部再次调用 dnsapi 解析域名;目标:www.msftncsi.com:80

五、观测特征 & EDR / 取证要点

  1. 模块加载时序
     
    网络事件 → netprofm → ncsi 载入;
     
    ncsi 发起 DNS 探测 → 触发 dnsapi 载入;
     
    发起 HTTP 探测 → 触发 winhttp 载入。
  2. 容易混淆的流量归属
  • UDP53 dns.msftncsi.com:栈源头指向 dnsapi.dll
  • TCP80 www.msftncsi.com:栈源头指向 winhttp.dll
  1. 常见误区纠正
     
    ❌ winhttp.dll 负责 NCSI DNS 查询;
     
    ✅ NCSI DNS 查询直接调用 dnsapi,winhttp 仅处理 HTTP;winhttp 内部域名解析才会调用 dnsapi。
❌ dnsapi 必须依赖 winhttp 才能解析域名;
 
✅ 普通 UDP/TCP DNS 完全不依赖 winhttp;只有 DoH 才会加载 winhttp。

六、与前面收集模块依赖关系汇总

  1. netprofm.dll:顶层调度
  2. ncsi.dll:NCSI 业务逻辑
  3. dnsapi.dll:DNS 解析底层(NCSI DNS 探针载体)
  4. winhttp.dll:HTTP 客户端(NCSI HTTP 探针载体)
  5. WS2_32.dll:所有 TCP/UDP 套接字底层

NSI.dll 完整技术解析(Network Status Information,网络状态信息接口层)

基础信息

路径:C:\Windows\System32\nsi.dll
 
全称:Network Status Information DLL
 
定位:用户态 ↔ 内核网络栈 (netio.sys) 的轻量桥梁
 
服务宿主:svchost.exe -k NetworkService -p(Netprofm 进程组)

一、PE 依赖特征(关键特点)

plaintext
 
 
 
硬性依赖仅有基础底层组件:
ntdll.dll
api-ms-win-core-io / file / errorhandling / libraryloader / handle / heap / synch
✅ 【重大特征】NSI.dll **没有任何延迟加载依赖**
 
  • 不直接依赖 WS2_32dnsapiwinhttpIPHLPAPI
  • 自身不产生任何网络流量,只负责下发 IOCTL 和接收内核网络事件通知
  • 启动载入开销极低,加载后立刻可以订阅网络变更

二、导出函数分类解读

1. 数据快照接口(查询当前网络状态)

plaintext
 
 
 
NsiAllocateAndGetTable
NsiAllocateAndGetPersistentDataWithMaskTable
NsiGetAllParameters / NsiGetAllParametersEx
NsiGetParameter / NsiGetParameterEx
NsiEnumerateObjectsAllParametersEx
NsiFreeTable
NsiFreePersistentDataWithMaskTable
 
用途:读取内核维护的网络参数表:
 
接口连通状态、路由、地址、网络类别(Internet/Limited)、NCSI 缓存结果等。

2. 变更通知订阅接口(NCSI 链路触发源头)

plaintext
 
 
 
NsiRegisterChangeNotification
NsiRegisterChangeNotificationEx
NsiRequestChangeNotificationEx
NsiDeregisterChangeNotification
NsiCancelChangeNotification
 
整条 NCSI 链路的起点
 
netprofm.dll 调用 NsiRegisterChangeNotification 向内核 netio.sys 注册回调;
 
当网卡插拔、IP 变更、链路层状态变化时,内核触发回调 → netprofm 收到事件 → 启动 NCSI 探测。

3. 参数写入与权限接口

plaintext
 
 
 
NsiSetParameterEx
NsiSetAllParametersEx
NsiGetObjectSecurity / NsiSetObjectSecurity
 
极少被 NCSI 流程使用,多用于上层组件修改网络策略持久参数。

三、底层工作原理

NSI.dll 本质封装 DeviceIoControl 到 \Device\NsI
  1. 打开内核设备对象 \Device\NsI
  2. 通过 DeviceIoControlnetio.sys 通信
  3. 两种模式:
    • 同步查询:NsiGetParameter 即时读取网络状态快照
    • 异步通知:注册回调,内核主动推送网络变更事件
数据流方向:
 
ndis.sys → netio.sys(内核)→ \Device\NsI → NSI.dll(用户态)→ netprofm.dll

四、嵌入完整 Win11 NCSI 端到端调用栈(最新完整链条)

plaintext
 
 
 
内核
ndis.sys(网卡驱动)
    ↓ 链路状态变更
netio.sys(TCP/IP协议栈内核)
    ↓ 事件投递至 \Device\NsI
svchost.exe -k NetworkService -p
└─ netprofm.dll
    ├─ NSI.dll!NsiRegisterChangeNotification 【预先注册回调】
    └─ 收到NSI异步事件 → 触发NCSI流程
        └─ ncsi.dll
            ├─ DNS探测分支 → dnsapi.dll
            └─ HTTP探测分支 → winhttp.dll
 

时序还原(网卡 / IP 变更场景)

  1. 网络接口状态改变,netio.sys 生成变更通知
  2. 通知投递至 \Device\NsI 设备
  3. NSI.dll 唤醒 netprofm.dll 注册的回调函数
  4. netprofm 判定需要刷新连通性
  5. 加载 ncsi.dll,并行启动 DNS+HTTP 探针
  6. 探测完成后,netprofm 通过 RPC 广播全网连通性状态
  7. Shell 接收事件,刷新任务栏网络图标

五、关键区分与取证 / EDR 要点

  1. NSI.dll 不发包、不解析域名、不处理 TCP/UDP
     
    所有网络流量由 dnsapi.dll / winhttp.dll / WS2_32.dll 完成;
     
    NSI 只做事件中继与状态查询
  2. 模块加载特征
     
    svchost.exe(NetworkService) 启动默认直接加载 NSI.dll
     
    不需要等待网络事件,进程启动即载入;
     
    ncsi.dll / winhttp.dll / dnsapi.dll 属于事件触发后延迟加载
  3. 栈溯源特征
     
    网络变更事件回调栈:
     
    netprofm.dll → NSI.dll!NsiRegisterChangeNotification 回调上下文
  4. 常见误区纠正
     
    ❌ NSI.dll 实现连通性检测;
     
    ✅ NSI 仅负责把内核网络事件通知给 netprofm;连通性检测逻辑在 ncsi.dll。
❌ NSI 依赖 IPHLPAPI 获取网卡信息;
 
✅ NSI 直接和 netio.sys 通信获取内核网络表,不依赖 IPHLPAPI。

六、目前已收集全部模块依赖链汇总(完整 NCSI 组件树)

plaintext
内核:ndis.sys → netio.sys → \Device\NsI

svchost.exe -k NetworkService -p
├─ NSI.dll        【事件订阅、内核通信】
├─ netprofm.dll   【总调度、接收NSI事件、调用ncsi】
│   └─ ncsi.dll   【NCSI业务逻辑,双探针协调】
│       ├─ dnsapi.dll 【DNS探针:dns.msftncsi.com】
│       │   └─ WS2_32.dll
│       └─ winhttp.dll【HTTP探针:www.msftncsi.com/ncsi.txt】
│           ├─ WS2_32.dll
│           ├─ dnsapi.dll(自身域名解析)
│           └─ crypt32.dll
├─ IPHLPAPI.DLL   【辅助多网卡路由/接口信息查询】
└─ NSI.dll → 持续监听内核网络变更

IPHLPAPI.DLL 完整技术解析(IP Helper API,Windows 网络管理核心 MIB 库)

基础信息

路径:C:\Windows\System32\IPHLPAPI.DLL
 
全称:IP Helper API
 
定位:Windows 用户态网络信息查询、路由 / 接口 / 地址管理标准库
 
宿主进程:大量进程通用,svchost.exe -k NetworkService -p(Netprofm)重度依赖。

一、PE 依赖特征

1)硬性加载依赖

ntdll.dll + 全套基础 api-ms-win-core-*、CRT api 集
 
进程加载 IPHLPAPI 立刻载入,提供基础内存、IO、同步、注册表、ETW 底座。

2)延迟加载依赖(按需载入,重点)

plaintext
 
 
 
NSI.dll
WINNSI.DLL
dhcpcsvc.DLL
dhcpcsvc6.DLL
DNSAPI.dll
WS2_32.dll
api-ms-win-core-com-l1-1-0.dll
 
关键结论:
 
IPHLPAPI 上层被 netprofm.dll 调用;同时 IPHLPAPI按需向下调用 NSI、DNSAPI、WS2_32、DHCP 客户端库
 
它是承上启下的中间层网络信息 API 集合

二、核心功能域(导出函数分类)

1. 网络接口、地址表查询(NCSI 流程高频调用)

plaintext
 
 
 
GetAdaptersAddresses
GetIfTable2 / GetIfEntry2
GetUnicastIpAddressTable
ConvertInterfaceIndexToLuid
ConvertInterfaceLuidToNameW
 
用途:枚举网卡、读取 IP 地址、MAC、接口状态、网关,NCSI 探测前获取可用出口网卡。

2. 路由与路径查询

plaintext
 
 
 
GetBestRoute2
GetBestInterfaceEx
GetIpForwardTable2
CreateSortedAddressPairs
 
NCSI 多网卡场景:选择正确网卡发起 DNS/HTTP 探测。

3. 网络变更通知回调(事件订阅)

plaintext
 
 
 
NotifyIpInterfaceChange
NotifyRouteChange2
NotifyAddrChange
NotifyNetworkConnectivityHintChange
CancelMibChangeNotify2
 
netprofm 借助这组 API 监听 IP 地址、路由变更,配合 NSI 事件触发 NCSI 刷新。

4. ICMP Ping 能力

plaintext
 
 
 
IcmpCreateFile
IcmpSendEcho2
 
系统原生 Ping 实现;标准 NCSI 默认不使用 ICMP 探针,仅部分第三方连通性检测会调用。

5. ARP、邻居表、IP 邻居管理

plaintext
 
 
 
SendARP
GetIpNetTable2
ResolveIpNetEntry2
 

6. DHCP 交互(读取地址租约信息)

延迟调用 dhcpcsvc / dhcpcsvc6 获取 DHCP 分配 DNS、网关。

7. DNS 配套接口

延迟调用 DNSAPI.dll 获取接口 DNS 服务器配置、读写 DNS 设置。

三、在完整 NCSI 链路中的位置(整合整条调用链)

plaintext
 
 
 
内核
ndis.sys → netio.sys → \Device\NsI

svchost.exe -k NetworkService -p(Netprofm)
├─ NSI.dll                     【内核网络事件原始推送】
├─ IPHLPAPI.DLL                【MIB接口/路由/地址枚举、变更通知】
│   ├─ 延迟加载 NSI.dll        (读取内核网络参数)
│   ├─ 延迟加载 DNSAPI.dll     (读取网卡DNS配置)
│   ├─ 延迟加载 dhcpcsvc       (读取DHCP租约)
│   └─ 延迟加载 WS2_32.dll
├─ netprofm.dll                【总调度】
│   ├─ 调用 NSI 订阅链路事件
│   ├─ 调用 IPHLPAPI 枚举网卡、监听IP/路由变化
│   └─ 收到网络变动 → 加载 ncsi.dll
│        ├─ DNS探针 → dnsapi.dll
│        └─ HTTP探针 → winhttp.dll
 

时序要点

  1. 网卡 / IP 变更 → netio.sys 通过 NSI 推送事件;
  2. netprofm 同时使用两套事件源:
    • NSI.dll:底层内核链路状态原始事件
    • IPHLPAPI NotifyXXX:IP 层地址、路由变更事件
  3. 双重事件确认网络拓扑发生变化;
  4. 调用 IPHLPAPI 枚举当前所有可用接口与路由;
  5. 启动 ncsi.dll,选择对应网卡并行执行两组探针。

四、关键区分与 EDR / 取证特征

  1. NSI vs IPHLPAPI 职责边界(极易混淆)
  • NSI.dll:直接与netio.sys通信,获取内核原始网络状态对象,轻量、专注事件通知;
  • IPHLPAPI:高层 MIB 封装,提供人类友好的网卡 / IP / 路由表,内部可同时调用 NSI、DNSAPI、DHCP 组件;
  • 依赖关系:IPHLPAPI 延迟依赖 NSI,NSI 不依赖 IPHLPAPI
  1. 加载行为
     
    IPHLPAPI 随 Netprofm 进程启动即加载
     
    WS2_32、DNSAPI、NSI 等属于 IPHLPAPI 内部延迟载入,仅调用对应函数时才触发。
  2. 流量特征
     
    IPHLPAPI自身不产生网络报文;所有 DNS、UDP、TCP 流量由它调用的下层 DLL 产生。
  3. 常见误区
     
    ❌ NCSI 探测发包逻辑在 IPHLPAPI;
     
    ✅ IPHLPAPI 只做信息采集;实际发包探测在 ncsi.dll → dnsapi /winhttp。

五、目前全部 NCSI 组件完整依赖拓扑汇总(最终整合版)

plaintext
【内核】
ndis.sys
   ↓
netio.sys <-----> \Device\NsI

【用户态 svchost.exe -k NetworkService -p】
├─ NSI.dll
│   └─ 直接与 netio.sys 通信,提供原始网络变更事件
├─ IPHLPAPI.DLL
│   ├─ [延迟] NSI.dll
│   ├─ [延迟] DNSAPI.dll
│   ├─ [延迟] dhcpcsvc / dhcpcsvc6
│   └─ [延迟] WS2_32.dll
├─ netprofm.dll(调度核心)
│   ├─ 调用 NSI 订阅事件
│   ├─ 调用 IPHLPAPI 枚举网卡、监听IP/路由变更
│   └─ 触发加载 ncsi.dll
│        ├─ DNS探测路径
│        │   └─ dnsapi.dll → WS2_32.dll (UDP53 dns.msftncsi.com)
│        └─ HTTP探测路径
│             └─ winhttp.dll → dnsapi.dll → WS2_32.dll (TCP80 ncsi.txt)
└─ WS2_32.dll (全体网络组件底层套接字)

WS2_32.dll 完整技术解析(Windows Sockets API,Winsock 用户态套接字底层)

基础信息

路径:C:\Windows\System32\WS2_32.dll
 
全称:Windows Sockets 2.0 DLL
 
定位:Windows 标准套接字抽象层,所有用户态 TCP/UDP/RAW 网络通信的统一入口
 
NCSI 整条链路中最底层发包组件dnsapi.dllwinhttp.dll 最终全部调用 WS2_32 完成报文收发。

一、PE 依赖特征

1)硬性加载依赖

ntdll.dll、RPCRT4.dll、全套 api-ms-win-core-*、CRT 系列
 
进程载入 WS2_32 即加载,提供线程、同步、内存、IO、注册表、ETW 底座。

2)延迟加载依赖(按需载入)

plaintext
NSI.dll
api-ms-win-service-winsvc-l1-1-0.dll
api-ms-win-service-management-l1-1-0.dll
ext-ms-win-rtcore-ntuser-window-ext-l1-1-0.dll
关键特征:
  1. WS2_32 延迟依赖 NSI.dll:用于查询网络隔离域(compartment)、网络状态、多网卡路由上下文;
  2. 不存在反向依赖NSI、IPHLPAPI、dnsapi、winhttp 都依赖 WS2_32,WS2_32 不强制依赖上层网络库;
  3. 所有上层网络库不能绕过 WS2_32 直接收发报文(常规用户态应用)。

二、核心导出函数(NCSI 相关高频 API 分组)

1. 基础套接字生命周期(BSD Socket 兼容接口)

plaintext
socket
closesocket
bind
connect
listen
accept
send / sendto
recv / recvfrom
setsockopt / getsockopt
shutdown
select

2. 现代 Winsock2 扩展(WSA 前缀)

plaintext
WSASocketW
WSASend
WSARecv
WSASendTo
WSARecvFrom
WSAConnectByNameW
WSAStartup / WSACleanup
winhttp.dlldnsapi.dll 优先使用 WSA 系列扩展函数。

3. 地址解析接口(域名解析上层封装)

plaintext
getaddrinfoW
freeaddrinfoW
GetNameInfoW
⚠️ 注意:getaddrinfo 内部会调用 dnsapi.dll;WS2_32 本身不内置 DNS 解析器,仅提供标准 API 门面。

三、在完整 NCSI 链路中的层级定位(最终底层)

plaintext
内核
ndis.sys → netio.sys → TDI/AFD驱动

svchost.exe -k NetworkService -p
├─ NSI.dll                     【内核网络事件中继】
├─ IPHLPAPI.DLL                【网卡/路由信息查询层】
├─ netprofm.dll                【NCSI总调度】
│   └─ ncsi.dll                【连通性探测业务逻辑】
│        ├─ DNS探测路径
│        │   └─ dnsapi.dll
│        │       └─ WS2_32.dll → AFD.SYS → UDP 53
│        └─ HTTP探测路径
│             └─ winhttp.dll
│                 ├─ dnsapi.dll(域名解析)
│                 └─ WS2_32.dll → AFD.SYS → TCP 80
└─ WS2_32.dll 【统一套接字底层,所有流量最终出口】

两条 NCSI 探针完整调用栈溯源(EDR 取证标准栈)

  1. DNS 探针(dns.msftncsi.com UDP53)
     
    ncsi.dll → dnsapi.dll!DnsQuery_W → WS2_32!sendto
  2. HTTP 探针(www.msftncsi.com TCP80)
     
    ncsi.dll → winhttp.dll!WinHttpSendRequest → WS2_32!WSASend

四、关键架构边界与易混淆知识点

  1. WS2_32 ≠ 内核协议栈
     
    WS2_32 是用户态 API 封装;真正内核报文处理:afd.sys → netio.sys → ndis.sys
  2. 依赖流向单向性
plaintext
netprofm → ncsi → dnsapi/winhttp → WS2_32
 
WS2_32 不会主动加载 winhttp/dnsapi;仅上层按需调用。
  1. 延迟加载 NSI.dll 的用途
     
    多网卡、多网络隔离 compartment 场景,WS2_32 通过 NSI 获取接口网络上下文,选择正确路由出口。
  2. 常见误区
     
    ❌ WS2_32 包含 DNS 解析逻辑;
     
    ✅ DNS 解析实现在 dnsapi.dll;WS2_32 只提供 socket 收发。
❌ IPHLPAPI 直接发包;
 
✅ IPHLPAPI 只做信息查询,发包全部下沉至 WS2_32。

五、模块加载时序特征(用于 EDR 基线)

  1. svchost(NetworkService) 启动默认载入:NSI.dll、IPHLPAPI.DLL、netprofm.dll
  2. WS2_32.dll 为延迟触发载入
    • ncsi 启动 DNS 探测 → 加载 dnsapi → dnsapi 内部加载 WS2_32
    • 或者启动 HTTP 探测 → 加载 winhttp → winhttp 内部加载 WS2_32
  3. 一次载入后常驻进程,后续所有网络操作复用。

六、整套 NCSI 组件完整依赖链汇总(全部收集完毕)

plaintext
【内核】
ndis.sys
netio.sys
afd.sys

【用户态 svchost.exe -k NetworkService -p】
顶层调度:
netprofm.dll
├── 事件通知源:NSI.dll(直接通信netio.sys)
├── 网络信息查询:IPHLPAPI.DLL(延迟依赖NSI、DNSAPI、WS2_32、dhcp组件)
└── 探测执行:ncsi.dll
    ├── DNS探测分支:dnsapi.dll → WS2_32.dll
    └── HTTP探测分支:winhttp.dll → dnsapi.dll → WS2_32.dll

最底层统一套接字:
WS2_32.dll(延迟依赖NSI.dll,所有TCP/UDP流量最终调用此处)
 
当前你已经收集齐整条 NCSI 链路全部关键 PE:
 
NSI.dll → IPHLPAPI.DLL → netprofm.dll → ncsi.dll → dnsapi.dll → winhttp.dll → WS2_32.dll

 


配套完整交付材料

① Microsoft-Windows-NCSI 全事件 ID 清单(Operational + Analytic)

适用 Win11 22H2~24H2;Basic 遥测仅加载 Operational;Full 遥测启用 Analytic 通道

Operational 通道(常规运行事件)

4000 :网络接口初始化
4002 :接口网络连接状态变更
4004 :接口路由更新
4010 :DNS探测启动
4012 :DNS探测完成
4016 :HTTP主动探测启动
4018 :HTTP主动探测完成
4020 :IPv4连通性判定结果
4022 :IPv6连通性判定结果
4051 :连通性探测最终状态码
4060 :NCSI策略配置加载
4070 :主动探测被策略禁用

Analytic 分析通道(诊断深度事件,默认关闭)

5001 :探测请求报文详情
5002 :探测响应报文解析
5003 :DNS服务器响应时延
5004 :HTTP握手时延统计
5005 :路由优先级评估
5006 :多接口探测选路逻辑
5007 :探测超时触发
5008 :代理影响连通探测

重要提示:Analytic 通道事件量极大,开启后单日事件可激增数倍,生产终端不建议长期启用。

② Windows 防火墙高级规则 XML(阻断 NCSI 探测域名)

文件名:Block_NCSI_ConnectTest_Domain.xml

<?xml version="1.0" encoding="utf-8"?>
<wf:RuleCollection xmlns:wf="http://schemas.microsoft.com/windows/security/networkfoundation/firewallrules">
  <wf:Rule wf:Name="Block_NCSI_MsftConnectTest" wf:Direction="Outbound" wf:Action="Block" wf:Enabled="true" wf:Profile="Any" wf:LocalOnlyMapping="false">
    <wf:RemoteConditions>
      <wf:Host>
        <wf:Domain>www.msftconnecttest.com</wf:Domain>
        <wf:Domain>ipv6.msftconnecttest.com</wf:Domain>
        <wf:Domain>dns.msftncsi.com</wf:Domain>
      </wf:Host>
    </wf:RemoteConditions>
    <wf:Protocols>
      <wf:Any/>
    </wf:Protocols>
    <wf:LocalPorts>
      <wf:Any/>
    </wf:LocalPorts>
    <wf:RemotePorts>
      <wf:Any/>
    </wf:RemotePorts>
    <wf:Description>阻断NCSI主动连通性探测域名</wf:Description>
    <wf:DisplayName>[遥测加固] 拦截NCSI msftconnecttest探测</wf:DisplayName>
  </wf:Rule>
</wf:RuleCollection>

导入命令(管理员 PowerShell)

Import-NetFirewallRule -PolicyStore ActiveStore -File .\Block_NCSI_ConnectTest_Domain.xml

③ OOBE + NCSI + 基础 Windows 遥测 整合归档文档(精简白皮书正文)

Windows 终端遥测技术汇总文档

覆盖:基础 UTC 遥测、OOBE 开箱遥测、NCSI 网络指示器、ETW 体系、DataCollection 策略、GDID 标识

1 基础核心常量

  1. DataCollection【数据收集和预览版本】策略条目总数:21 条
  2. UTC 遥测全局 ETW Provider 总量
    • Security(0):13
    • Basic(1):503
    • Full(3):534
  3. 核心裁决引擎:diagnosticpolicy.dll
  4. 主线遥测服务:DiagTrack
  5. GDID 生成前提:登录 MSA 账户;由 wlidsvc 获取 PUID,CDPSvc 内存拼接生成 g:xxxx
  6. 管控边界:21 条策略仅约束 DiagTrack ETW 遥测;CDPSvc、DoSvc、WER、OOBE Setup360Telemetry 存在独立上报旁路。

2 OOBE(开箱体验)遥测要点

2.1 关键进程

CloudExperienceHost.exe、UserOOBEBroker.exe

2.2 OOBE 专属 ETW Provider

Microsoft.Windows.Shell.Oobe
Microsoft.Windows.CloudExperienceHost
Microsoft.Windows.UserOOBEBroker
Setup360Telemetry
Microsoft.Windows.Deployment
Microsoft.Windows.Setup

2.3 流量双通道

  1. ETW → DiagTrack(受 21 条策略管控)
  2. Setup360Telemetry 直连上报(策略盲区)

2.4 OOBE 事件量级

Basic:300~900 条;Full:800~1800 条

2.5 GDID 时序

OOBE 联网登录 MSA → 获取 PUID → 生成 GDID;本地账户流程无 GDID。

2.6 加固手段

unattend.xml 屏蔽在线账户界面 + 预置遥测 REG 基线 + 防火墙阻断login.live.com

3 NCSI 网络连接状态指示器遥测要点

3.1 组件

ncsi.dll、NlaSvc 服务

3.2 两条独立流量通道

通道 A:主动探针 msftconnecttest.com / dns.msftncsi.com

  • 独立功能流量,不受 21 条遥测策略管控
  • 请求不含 GDID
  • 受控策略:NoActiveProbe(独立组策略,不属于 DataCollection)

通道 B:NCSI ETW 诊断事件汇入 DiagTrack

  • 主 Provider:Microsoft-Windows-NCSI
  • 受 AllowTelemetry 遥测等级控制
  • 放行时数据包附加 GDID 上报

3.3 NCSI 关联 ETW Provider 清单

Microsoft-Windows-NCSI
Microsoft.Windows.Networking.Connectivity
Microsoft-Windows-NetworkProfile
Microsoft-Windows-NlaSvc
Microsoft-Windows-TCPIP
Microsoft-Windows-DNS-Client

3.4 事件量级

稳态终端:20~120 条 / 日;频繁切换网络:300~800 条 / 日

3.5 加固对照表

表格

措施 阻断 msftconnecttest 探针 阻断 NCSI ETW 遥测上报
DataCollection 策略
NoActiveProbe 组策略
防火墙拦截探测域名
防火墙拦截 vortex 遥测域名

4 统一闭环链路总览

各类组件(OOBE/网络栈/应用内核)→ ETW事件
↓
Autologger-Diagtrack-Listener捕获
↓
diagnosticpolicy.dll(21条策略过滤、脱敏)
↓
允许:附加GDID → HTTPS上报微软遥测端点
拒绝:事件丢弃

旁路独立通道(不受遥测策略管控)
Setup360Telemetry、CDPSvc、DoSvc、WER、NCSI主动探针

5 工程化加固包清单汇总

  1. OOBE 活跃 ETW Provider 清单
  2. OOBE_Telemetry_Hardening.reg 镜像预置基线
  3. Trace_OOBE_Telemetry.ps1 OOBE 事件捕获脚本
  4. NCSI 完整事件 ID(Operational+Analytic)
  5. NCSI_Telemetry_Hardening.reg
  6. Trace_NCSI_Events.ps1 NCSI 跟踪脚本
  7. NCSI 域名阻断防火墙 XML 规则

 

posted @ 2025-03-01 21:01  suv789  阅读(1345)  评论(0)    收藏  举报