网络连接状态指示器Network Connectivity Status Indicator(NCSI)在 Windows 操作系统中用于显示当前网络连接状态。它通过主动和被动探测方法来判断设备是否与 Internet 连接。以下是对该功能的详细介绍:在 Windows 注册表中,NlaSvc(网络位置感知服务)用于网络连接状态探测,其中包括探测主机配置和代理设置。
设置原因:每次开机没必要去找国外美国微软网站域名,跳转几次域名,还有频率,时间间隔多少次访问,网络测试,网络连接,网络图标,
设置国产服务器,国内服务器,很快很好,秒连接,秒开!中国人自己的服务器!
适用于 Windows 的网络连接状态指示器概述 | Microsoft Learn
网络连接状态指示器 (NCSI) 故障排除指南 - Windows Server | Microsoft Learn
💡 补充信息
- 缩写:NCSI
- 功能:这是 Windows 操作系统中的一个组件,负责检测电脑是否连接到互联网,并决定任务栏右下角的网络图标是显示“地球仪”(无连接)、“黄色感叹号”(受限)还是正常的连接图标。
- 工作机制:它主要通过向微软的服务器发送 DNS 查询和 HTTP 请求(主动探测)来判断网络状态。


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) 的配置。高阶网络安全角度来看,如果这个注册表被 恶意篡改或被国外攻击者劫持,会有潜在的严重影响和危害。我来详细分析:
💡 补充信息
- 缩写: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. 被劫持可能带来的影响
-
网络状态判断失真
- 系统可能无法正确判断网络连接状态。
- 导致 Windows 认为没有互联网连接,即使实际上网络可用。
-
流量劫持 / 中间人攻击
- 如果 ActiveWebProbeHost 被替换为恶意域名,攻击者可以:
- 收集系统的网络访问信息
- 强行劫持 DNS 或 HTTP 流量
- 诱导系统向恶意服务器发起请求
- 如果 ActiveWebProbeHost 被替换为恶意域名,攻击者可以:
-
安全防护失效
- 某些安全软件会依赖 NLA 判断是否联网:
- 被劫持可能导致这些防护失效或延迟更新
-
用户体验和系统异常
- 网络图标显示错误
- Windows Store、Office 激活等联网功能异常
- 应用自动联网失败
3. 潜在危害的场景
| 攻击方式 | 可能危害 |
|---|---|
| DNS 劫持 ActiveWebProbeHost | 将流量导向恶意服务器,窃取数据或植入恶意软件 |
| 禁用 Active Probing | 系统无法检测到真实网络状态,更新和安全策略受影响 |
| 与其他恶意注册表组合 | 可作为持久化入口,持续监控网络和流量 |
总结:攻击者劫持这个注册表,通常目的是控制系统的网络感知,实现隐蔽的数据窃取、流量劫持,或绕过安全机制。
4. 检测与防御建议(高阶)
-
检查注册表
powershellGet-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Services\NlaSvc\Parameters\Internet"- 核对 EnableActiveProbing 是否为
1 - 核对 ActiveWebProbeHost 是否为
www.msftconnecttest.com
- 核对 EnableActiveProbing 是否为
-
重置 NLA 配置
powershellSet-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" -
网络和 DNS 安全
- 使用可信 DNS
- 检查 Hosts 文件是否被修改
- 防火墙限制可疑出站流量
-
高阶监控
- 使用 Wireshark / Sysmon 检查系统是否访问异常域名
- 检查系统是否存在其他注册表持久化点
-
安全软件全盘扫描
- 包括 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,这是一组供开发者使用的编程接口,用于管理和获取网络信息。
- 服务名称:在 Windows 系统中,该服务的内部名称为
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,然后配置相应的代理服务器和端口。
示例:如何修改注册表配置
-
开启主动探测:
- 打开注册表编辑器(
regedit)。 - 导航到
HKLM\SYSTEM\CurrentControlSet\Services\NlaSvc\Parameters\Internet。 - 找到并设置 EnableActiveProbe 为
1。
- 打开注册表编辑器(
-
禁用主动探测:
- 打开注册表编辑器。
- 导航到
HKLM\SYSTEM\CurrentControlSet\Services\NlaSvc\Parameters\Internet。 - 找到并设置 EnableActiveProbe 为
0。
-
启用手动代理配置:
- 打开注册表编辑器。
- 导航到
HKLM\SYSTEM\CurrentControlSet\Services\NlaSvc\Parameters\Internet\ManualProxies。 - 设置 UseManualProxy 为
1,并配置代理服务器(例如proxy.example.com:8080)。
-
禁用手动代理配置:
- 打开注册表编辑器。
- 导航到
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:启用自动代理检测
特殊应用:
-
在受限网络环境中使用代理:在某些组织内的计算机可能需要通过代理才能访问外部网络或互联网。通过在注册表中配置
ProxyServer和ProxyBypassList,可以为不同的网络条件定制代理设置。 -
绕过本地网络的代理:通过配置
ProxyBypassList,你可以确保访问局域网中的设备时不经过代理,减少对本地网络资源的延迟。
示例:如何进行高级配置
配置主动探测和代理设置的注册表例子:
-
开启主动探测并设置自定义探测主机:
- 打开注册表编辑器 (
regedit)。 - 导航到
HKLM\SYSTEM\CurrentControlSet\Services\NlaSvc\Parameters\Internet。 - 设置:
- EnableActiveProbe =
1 - ActiveProbeHost =
"www.customprobe.com" - ActiveProbePort =
"443"
- EnableActiveProbe =
- 打开注册表编辑器 (
-
启用手动代理并配置绕过列表:
- 打开注册表编辑器。
- 导航到
HKLM\SYSTEM\CurrentControlSet\Services\NlaSvc\Parameters\Internet\ManualProxies。 - 设置:
- UseManualProxy =
1 - ProxyServer =
"proxy.example.com:8080" - ProxyBypassList =
"*.example.com;10.*;192.168.*"
- UseManualProxy =
通过这些高级配置,你可以灵活地根据网络环境的需求调整 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.dllWin11 / 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)
- Win10:
❌ 不存在 ncsi.sys,网上流传名称为错误信息!NCSI无独立内核驱动。
2)承载服务宿主 DLL
Win10:nlasvc.dll(NlaSvc 网络位置感知服务)
%SystemRoot%\System32\nlasvc.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
svchost.exe -k NetworkService -p
NT AUTHORITY\NetworkService版本分水岭关键结论:Win10:NCSI 探测由 nlasvc.dll (NlaSvc) 调度;Win11/Server2022+ 迁移至 netprofm.dll 统一调度 ncsi.dll
一、导出函数解读
InitHelperDll
DllCanUnloadNow
DllGetClassObject
DllRegisterServer
DllUnregisterServer
InitHelperDll:svchost 标准服务入口,服务启动主入口;- 其余 4 个为标准 COM 组件导出,提供网络列表相关 COM 对象;
- 无对外直接暴露的网络连通性 API,内部通过 LoadLibrary 调用 ncsi.dll 导出函数。
二、依赖分层:硬性导入 vs 延迟加载(DELAYLOAD)
1)启动强制载入(基础运行底座)
api-ms-win-*API 集、ntdll.dll、RPCRT4.dll
2)延迟加载模块【核心链路】
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可见导入:
NcsiIdentifyUserSpecificProxies内部完整调用链:NcsiRegisterConnectivityStatusChange→ 注册连通性变更回调NcsiPerformReprobe→ 发起 HTTP/DNS 主动探测netprofm 充当调度器,不实现任何探针逻辑,探测全部交由 ncsi.dll 执行。 -
NSI.dll
NsiGetParameter / NsiAllocateAndGetTable订阅内核网络事件(IP 地址变更、网关切换、网卡插拔);一旦网络拓扑变动,netprofm 收到通知,触发调用 ncsi 重探测。 -
IPHLPAPI.DLL枚举网卡、LUID、路由信息,区分多网卡场景选择探测出口。
-
WlanAPI无线网卡专用逻辑,Wi-Fi 连接 / 断开触发连通性刷新。
-
RPCRT4.dll向外提供 RPC 服务:上层应用、Shell、任务栏网络图标远程订阅网络位置、连通性状态。
四、完整端到端工作时序(Win11 标准链路)
内核: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):网络位置判定(公用 / 专用 / 域)+ 调度 NCSInetprofm.dll(Netprofm):仅维护网络配置文件列表
Win11 / Server2022+(架构合并)
netprofm.dll(Netprofm):统一接管网络列表管理 + 网络位置判定 + NCSI 探测调度nlasvc.dll保留存在,但不再负责 NCSI 调度,功能大幅弱化
排查要点:Win11 观测 ncsi.dll 加载,宿主 svchost 内一定同时存在 netprofm.dll。
六、和你前面收集二进制形成完整组件拓扑
内核事件层
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 / 取证观测特征
- 进程约束:
svchost.exe,启动参数-k NetworkService -p - DLL 加载顺序特征:
网络变更 → netprofm 收到事件 → 延迟加载 ncsi.dll随后 ncsi 内部继续延迟加载 winhttp.dll、dnsapi.dll
- 网络流量归属:
进程:svchost.exe;栈:netprofm.dll → ncsi.dll → winhttp.dll
- ETW 追踪源:
Microsoft-Windows-NCSI(探测结果)、Microsoft-Windows-NetworkListManager(netprofm 事件)
八、常见误区整理
- ❌ ncsi.dll 可以独立运行;必须由 netprofm/nlasvc 调度,自身不主动监听网络事件
- ❌ Win11 NCSI 依旧由 NlaSvc 控制;已经迁移到 Netprofm
- ❌ netprofm.dll 本身发起网络请求;不产生任何网络流量,流量由 ncsi+winhttp 完成
- ❌ netprofm.dll 包含连通性判定算法;仅调度,判定逻辑全部封装在 ncsi.dll
%SystemRoot%\System32\netprofm.dll
二、NCSI 直接依赖 DLL 链路(ncsi.dll 导入集合)
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 开始探测)
- netio.sys(内核网络 I/O)
网卡上线 / IP 变更、路由变更 → 向上通知用户态服务
- ndis.sys(网络驱动接口规范)
底层网卡事件源头
- fwpkclnt.sys/fwpk.sys(WFP 平台)
防火墙、策略网络事件推送
四、状态分发链(NCSI 探测完成之后)
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 = 关闭主动探测ProbeHost、ProbeUrl、DnsProbeHost:自定义探测地址
六、完整端到端调用链路(最简时序)
网卡IP地址变更
→ NDIS → netio.sys 内核通知
→ svchost(NlaSvc/Netprofm)
→ LoadLibrary(ncsi.dll)
→ ncsi.dll:
1. WinHTTP 请求 ncsi.txt
2. dnsapi 查询 dns.msftncsi.com
→ 判定连通状态
→ 通过RPC广播状态
→ Shell刷新任务栏黄色感叹号图标
→ SENS转发事件给应用程序
七、常见误区纠正(重点)
- ❌ 不存在
ncsi.sys;NCSI 纯用户态逻辑,没有内核驱动 - ❌ NCSI≠NLA;NLA 是服务框架,NCSI 是探测子模块(ncsi.dll)
- ❌ Win11 不再由 NlaSvc 执行探测,迁移到 Netprofm,排查时不要只监控 nlasvc.dll
- ❌ 探针流量由
winhttp.dll产生,不是 ncsi.dll 直接创建套接字
八、EDR / 取证监控建议观测对象
- 进程:
svchost.exe (NetworkService) - DLL 加载:
ncsi.dll、nlasvc.dll、netprofm.dll、winhttp.dll - 网络特征:
- HTTP:
http://www.msftncsi.com/ncsi.txt - DNS:
dns.msftncsi.com
- HTTP:
- 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
svchost.exe -k NetworkService -p
NT AUTHORITY\NetworkService版本分水岭关键结论:Win10:NCSI 探测由 nlasvc.dll (NlaSvc) 调度;Win11/Server2022+ 迁移至 netprofm.dll 统一调度 ncsi.dll
一、导出函数解读
InitHelperDll
DllCanUnloadNow
DllGetClassObject
DllRegisterServer
DllUnregisterServer
InitHelperDll:svchost 标准服务入口,服务启动主入口;- 其余 4 个为标准 COM 组件导出,提供网络列表相关 COM 对象;
- 无对外直接暴露的网络连通性 API,内部通过 LoadLibrary 调用 ncsi.dll 导出函数。
二、依赖分层:硬性导入 vs 延迟加载(DELAYLOAD)
1)启动强制载入(基础运行底座)
api-ms-win-*API 集、ntdll.dll、RPCRT4.dll
2)延迟加载模块【核心链路】
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可见导入:
NcsiIdentifyUserSpecificProxies内部完整调用链:NcsiRegisterConnectivityStatusChange→ 注册连通性变更回调NcsiPerformReprobe→ 发起 HTTP/DNS 主动探测netprofm 充当调度器,不实现任何探针逻辑,探测全部交由 ncsi.dll 执行。 -
NSI.dll
NsiGetParameter / NsiAllocateAndGetTable订阅内核网络事件(IP 地址变更、网关切换、网卡插拔);一旦网络拓扑变动,netprofm 收到通知,触发调用 ncsi 重探测。 -
IPHLPAPI.DLL枚举网卡、LUID、路由信息,区分多网卡场景选择探测出口。
-
WlanAPI无线网卡专用逻辑,Wi-Fi 连接 / 断开触发连通性刷新。
-
RPCRT4.dll向外提供 RPC 服务:上层应用、Shell、任务栏网络图标远程订阅网络位置、连通性状态。
四、完整端到端工作时序(Win11 标准链路)
内核: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):网络位置判定(公用 / 专用 / 域)+ 调度 NCSInetprofm.dll(Netprofm):仅维护网络配置文件列表
Win11 / Server2022+(架构合并)
netprofm.dll(Netprofm):统一接管网络列表管理 + 网络位置判定 + NCSI 探测调度nlasvc.dll保留存在,但不再负责 NCSI 调度,功能大幅弱化
排查要点:Win11 观测 ncsi.dll 加载,宿主 svchost 内一定同时存在 netprofm.dll。
六、和你前面收集二进制形成完整组件拓扑
内核事件层
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 / 取证观测特征
- 进程约束:
svchost.exe,启动参数-k NetworkService -p - DLL 加载顺序特征:
网络变更 → netprofm 收到事件 → 延迟加载 ncsi.dll随后 ncsi 内部继续延迟加载 winhttp.dll、dnsapi.dll
- 网络流量归属:
进程:svchost.exe;栈:netprofm.dll → ncsi.dll → winhttp.dll
- ETW 追踪源:
Microsoft-Windows-NCSI(探测结果)、Microsoft-Windows-NetworkListManager(netprofm 事件)
八、常见误区整理
- ❌ ncsi.dll 可以独立运行;必须由 netprofm/nlasvc 调度,自身不主动监听网络事件
- ❌ Win11 NCSI 依旧由 NlaSvc 控制;已经迁移到 Netprofm
- ❌ netprofm.dll 本身发起网络请求;不产生任何网络流量,流量由 ncsi+winhttp 完成
- ❌ netprofm.dll 包含连通性判定算法;仅调度,判定逻辑全部封装在 ncsi.dll
winhttp.dll 完整技术解析(NCSI HTTP 探针底层实现)
基础信息
C:\Windows\System32\winhttp.dll
ncsi.dll延迟载入。一、导出函数重点梳理(和 NCSI 强相关 API)
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)启动强制载入底座
api-ms-win-*、ntdll.dll、kernelbase.dll
2)延迟加载模块【网络与安全核心】
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代理相关
架构特点
三、关键业务链路(NCSI 场景完整栈)
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更新任务栏网络图标
四、关键导入功能拆解
- DNSAPI.dll
域名解析
www.msftncsi.com;同时 NCSI 并行单独调用 dnsapi 探测dns.msftncsi.com。 - WS2_32.dll
socket connect、send、recv,所有 TCP 流量底层载体。
- CRYPT32.dll + SspiCli.dll
HTTPS 证书校验;门户认证、代理认证协商。
- NSI.dll / IPHLPAPI.DLL
多网卡场景,识别探测使用哪一张网卡出口、读取路由。
- Credential API
读取系统保存的代理账号、内网门户凭证。
五、和前面组件形成完整 Win11 NCSI 全链路拓扑
内核事件
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 / 流量 / 模块观测重点
- 进程主体:
svchost.exe(NetworkService)产生 msftncsi HTTP 流量; - 模块加载时序特征
网络变更 → netprofm → ncsi 载入 → 随后 winhttp 载入 → 再载入 dnsapi、crypt32;
- 栈溯源特征
网络发包栈:
winhttp.dll → ws2_32.dll上层调用栈:ncsi.dll → winhttp.dll!WinHttpProbeConnectivity - 区分两组 NCSI 探针
- HTTP 探针:winhttp.dll 实现(ncsi.txt)
- DNS 探针:ncsi.dll 直接调用 dnsapi.dll,不走 winhttp
- 常见误区
❌ 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 查询 API(
DnsQuery_W/A/Ex) - 管理 DNS 缓存、NRPT 策略、多网卡 DNS 服务器路由
- 承载 NCSI 的 DNS 连通性探测(
dns.msftncsi.comA 记录查询) - 处理 DoH、代理 DNS、DHCP 下发 DNS 配置
一、依赖分层解析
1)硬性导入(加载 DLL 立刻载入)
api-ms-win-*基础集、ntdll.dll、kernelbase.dll
2)延迟加载模块(关键网络栈,首次 DNS 查询才载入)
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 强相关)
DnsQuery_W / DnsQuery_A / DnsQueryExW
DnsQueryConfig
DnsFlushResolverCache
DnsGetAdaptersInfo
DnsNotifyResolver
DnsFree
NCSI 调用链路重点
- HTTP 探测:
ncsi.dll → winhttp.dll请求ncsi.txt - DNS 探测:
ncsi.dll → dnsapi.dll!DnsQuery_W查询dns.msftncsi.com
✅ 区分要点:DNS 探针不经过 winhttp,直接调用 dnsapi 原生 DNS 查询;HTTP 探针由 winhttp 完成。
134.170.168.1 → 判断互联网连通;
三、关键导入模块业务作用
- WS2_32.dll
UDP 53 / TCP 53 DNS 报文收发,传统 DNS 底层传输。
- IPHLPAPI.DLL
多网卡场景,绑定对应网卡出口,读取接口 DNS 服务器列表。
- NSI.dll
监听网络接口上下线,触发 DNS 缓存刷新、服务器重选。
- WINHTTP.dll
仅用于 DNS over HTTPS(DoH),建立 HTTPS 隧道发送 DNS 报文。
- dhcpcsvc / dhcpcsvc6
读取 DHCPv4/v6 分配的 DNS 服务器地址。
- CRYPT32
DoH 连接时 TLS 证书链验证。
四、整合进完整 Win11 NCSI 全链路拓扑(最新完整版)
内核层
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 溯源关键)
-
NCSI DNS 探针栈
ncsi.dll → dnsapi.dll!DnsQuery_W → WS2_32.dll目标:dns.msftncsi.com,协议:UDP53 DNS -
NCSI HTTP 探针栈
ncsi.dll → winhttp.dll!WinHttpSendRequestwinhttp 内部再次调用 dnsapi 解析域名;目标:www.msftncsi.com:80
五、观测特征 & EDR / 取证要点
-
模块加载时序网络事件 → netprofm → ncsi 载入;ncsi 发起 DNS 探测 → 触发 dnsapi 载入;发起 HTTP 探测 → 触发 winhttp 载入。
-
容易混淆的流量归属
- UDP53
dns.msftncsi.com:栈源头指向dnsapi.dll - TCP80
www.msftncsi.com:栈源头指向winhttp.dll
- 常见误区纠正
❌ winhttp.dll 负责 NCSI DNS 查询;✅ NCSI DNS 查询直接调用 dnsapi,winhttp 仅处理 HTTP;winhttp 内部域名解析才会调用 dnsapi。
六、与前面收集模块依赖关系汇总
netprofm.dll:顶层调度ncsi.dll:NCSI 业务逻辑dnsapi.dll:DNS 解析底层(NCSI DNS 探针载体)winhttp.dll:HTTP 客户端(NCSI HTTP 探针载体)WS2_32.dll:所有 TCP/UDP 套接字底层
NSI.dll 完整技术解析(Network Status Information,网络状态信息接口层)
基础信息
C:\Windows\System32\nsi.dll
svchost.exe -k NetworkService -p(Netprofm 进程组)一、PE 依赖特征(关键特点)
硬性依赖仅有基础底层组件:
ntdll.dll
api-ms-win-core-io / file / errorhandling / libraryloader / handle / heap / synch
✅ 【重大特征】NSI.dll **没有任何延迟加载依赖**
- 不直接依赖
WS2_32、dnsapi、winhttp、IPHLPAPI - 自身不产生任何网络流量,只负责下发 IOCTL 和接收内核网络事件通知
- 启动载入开销极低,加载后立刻可以订阅网络变更
二、导出函数分类解读
1. 数据快照接口(查询当前网络状态)
NsiAllocateAndGetTable
NsiAllocateAndGetPersistentDataWithMaskTable
NsiGetAllParameters / NsiGetAllParametersEx
NsiGetParameter / NsiGetParameterEx
NsiEnumerateObjectsAllParametersEx
NsiFreeTable
NsiFreePersistentDataWithMaskTable
2. 变更通知订阅接口(NCSI 链路触发源头)
NsiRegisterChangeNotification
NsiRegisterChangeNotificationEx
NsiRequestChangeNotificationEx
NsiDeregisterChangeNotification
NsiCancelChangeNotification
netprofm.dll 调用 NsiRegisterChangeNotification 向内核 netio.sys 注册回调;
netprofm 收到事件 → 启动 NCSI 探测。3. 参数写入与权限接口
NsiSetParameterEx
NsiSetAllParametersEx
NsiGetObjectSecurity / NsiSetObjectSecurity
三、底层工作原理
- 打开内核设备对象
\Device\NsI - 通过
DeviceIoControl和netio.sys通信 - 两种模式:
- 同步查询:NsiGetParameter 即时读取网络状态快照
- 异步通知:注册回调,内核主动推送网络变更事件
数据流方向:ndis.sys → netio.sys(内核)→ \Device\NsI → NSI.dll(用户态)→ netprofm.dll
四、嵌入完整 Win11 NCSI 端到端调用栈(最新完整链条)
内核
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 变更场景)
- 网络接口状态改变,
netio.sys生成变更通知 - 通知投递至
\Device\NsI设备 NSI.dll唤醒netprofm.dll注册的回调函数netprofm判定需要刷新连通性- 加载
ncsi.dll,并行启动 DNS+HTTP 探针 - 探测完成后,
netprofm通过 RPC 广播全网连通性状态 - Shell 接收事件,刷新任务栏网络图标
五、关键区分与取证 / EDR 要点
-
NSI.dll 不发包、不解析域名、不处理 TCP/UDP所有网络流量由
dnsapi.dll/winhttp.dll/WS2_32.dll完成;NSI 只做事件中继与状态查询。 -
模块加载特征
svchost.exe(NetworkService)启动默认直接加载 NSI.dll;不需要等待网络事件,进程启动即载入;而ncsi.dll / winhttp.dll / dnsapi.dll属于事件触发后延迟加载。 -
栈溯源特征网络变更事件回调栈:
netprofm.dll → NSI.dll!NsiRegisterChangeNotification 回调上下文 -
常见误区纠正❌ NSI.dll 实现连通性检测;✅ NSI 仅负责把内核网络事件通知给 netprofm;连通性检测逻辑在 ncsi.dll。
六、目前已收集全部模块依赖链汇总(完整 NCSI 组件树)
内核: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
svchost.exe -k NetworkService -p(Netprofm)重度依赖。一、PE 依赖特征
1)硬性加载依赖
api-ms-win-core-*、CRT api 集
2)延迟加载依赖(按需载入,重点)
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 流程高频调用)
GetAdaptersAddresses
GetIfTable2 / GetIfEntry2
GetUnicastIpAddressTable
ConvertInterfaceIndexToLuid
ConvertInterfaceLuidToNameW
2. 路由与路径查询
GetBestRoute2
GetBestInterfaceEx
GetIpForwardTable2
CreateSortedAddressPairs
3. 网络变更通知回调(事件订阅)
NotifyIpInterfaceChange
NotifyRouteChange2
NotifyAddrChange
NotifyNetworkConnectivityHintChange
CancelMibChangeNotify2
4. ICMP Ping 能力
IcmpCreateFile
IcmpSendEcho2
5. ARP、邻居表、IP 邻居管理
SendARP
GetIpNetTable2
ResolveIpNetEntry2
6. DHCP 交互(读取地址租约信息)
dhcpcsvc / dhcpcsvc6 获取 DHCP 分配 DNS、网关。7. DNS 配套接口
DNSAPI.dll 获取接口 DNS 服务器配置、读写 DNS 设置。三、在完整 NCSI 链路中的位置(整合整条调用链)
内核
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
时序要点
- 网卡 / IP 变更 → netio.sys 通过 NSI 推送事件;
- netprofm 同时使用两套事件源:
- NSI.dll:底层内核链路状态原始事件
- IPHLPAPI NotifyXXX:IP 层地址、路由变更事件
- 双重事件确认网络拓扑发生变化;
- 调用 IPHLPAPI 枚举当前所有可用接口与路由;
- 启动 ncsi.dll,选择对应网卡并行执行两组探针。
四、关键区分与 EDR / 取证特征
- NSI vs IPHLPAPI 职责边界(极易混淆)
- NSI.dll:直接与
netio.sys通信,获取内核原始网络状态对象,轻量、专注事件通知; - IPHLPAPI:高层 MIB 封装,提供人类友好的网卡 / IP / 路由表,内部可同时调用 NSI、DNSAPI、DHCP 组件;
- 依赖关系:IPHLPAPI 延迟依赖 NSI,NSI 不依赖 IPHLPAPI。
-
加载行为IPHLPAPI 随 Netprofm 进程启动即加载;WS2_32、DNSAPI、NSI 等属于 IPHLPAPI 内部延迟载入,仅调用对应函数时才触发。
-
流量特征IPHLPAPI自身不产生网络报文;所有 DNS、UDP、TCP 流量由它调用的下层 DLL 产生。
-
常见误区❌ NCSI 探测发包逻辑在 IPHLPAPI;✅ IPHLPAPI 只做信息采集;实际发包探测在 ncsi.dll → dnsapi /winhttp。
五、目前全部 NCSI 组件完整依赖拓扑汇总(最终整合版)
【内核】
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
dnsapi.dll、winhttp.dll 最终全部调用 WS2_32 完成报文收发。一、PE 依赖特征
1)硬性加载依赖
api-ms-win-core-*、CRT 系列
2)延迟加载依赖(按需载入)
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
- WS2_32 延迟依赖 NSI.dll:用于查询网络隔离域(compartment)、网络状态、多网卡路由上下文;
- 不存在反向依赖:
NSI、IPHLPAPI、dnsapi、winhttp都依赖 WS2_32,WS2_32 不强制依赖上层网络库; - 所有上层网络库不能绕过 WS2_32 直接收发报文(常规用户态应用)。
二、核心导出函数(NCSI 相关高频 API 分组)
1. 基础套接字生命周期(BSD Socket 兼容接口)
socket
closesocket
bind
connect
listen
accept
send / sendto
recv / recvfrom
setsockopt / getsockopt
shutdown
select
2. 现代 Winsock2 扩展(WSA 前缀)
WSASocketW
WSASend
WSARecv
WSASendTo
WSARecvFrom
WSAConnectByNameW
WSAStartup / WSACleanup
winhttp.dll、dnsapi.dll优先使用 WSA 系列扩展函数。
3. 地址解析接口(域名解析上层封装)
getaddrinfoW
freeaddrinfoW
GetNameInfoW
三、在完整 NCSI 链路中的层级定位(最终底层)
内核
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 取证标准栈)
四、关键架构边界与易混淆知识点
-
WS2_32 ≠ 内核协议栈WS2_32 是用户态 API 封装;真正内核报文处理:
afd.sys → netio.sys → ndis.sys。 -
依赖流向单向性
netprofm → ncsi → dnsapi/winhttp → WS2_32
-
延迟加载 NSI.dll 的用途多网卡、多网络隔离 compartment 场景,WS2_32 通过 NSI 获取接口网络上下文,选择正确路由出口。
-
常见误区❌ WS2_32 包含 DNS 解析逻辑;✅ DNS 解析实现在 dnsapi.dll;WS2_32 只提供 socket 收发。
五、模块加载时序特征(用于 EDR 基线)
svchost(NetworkService)启动默认载入:NSI.dll、IPHLPAPI.DLL、netprofm.dll- WS2_32.dll 为延迟触发载入:
- ncsi 启动 DNS 探测 → 加载 dnsapi → dnsapi 内部加载 WS2_32
- 或者启动 HTTP 探测 → 加载 winhttp → winhttp 内部加载 WS2_32
- 一次载入后常驻进程,后续所有网络操作复用。
六、整套 NCSI 组件完整依赖链汇总(全部收集完毕)
【内核】
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 基础核心常量
- DataCollection【数据收集和预览版本】策略条目总数:21 条
- UTC 遥测全局 ETW Provider 总量
- Security(0):13
- Basic(1):503
- Full(3):534
- 核心裁决引擎:
diagnosticpolicy.dll - 主线遥测服务:DiagTrack
- GDID 生成前提:登录 MSA 账户;由 wlidsvc 获取 PUID,CDPSvc 内存拼接生成
g:xxxx - 管控边界: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 流量双通道
- ETW → DiagTrack(受 21 条策略管控)
- 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 工程化加固包清单汇总
- OOBE 活跃 ETW Provider 清单
- OOBE_Telemetry_Hardening.reg 镜像预置基线
- Trace_OOBE_Telemetry.ps1 OOBE 事件捕获脚本
- NCSI 完整事件 ID(Operational+Analytic)
- NCSI_Telemetry_Hardening.reg
- Trace_NCSI_Events.ps1 NCSI 跟踪脚本
- NCSI 域名阻断防火墙 XML 规则

浙公网安备 33010602011771号