【发布时间】:2019-06-24 18:00:59
【问题描述】:
我需要捕获网络接口更改,即基于 C++ 的 Windows 服务中的网络连接/断开连接事件。 Windows API 函数NotifyIpInterfaceChange() 确实捕获了所有需要的事件,但问题是它还捕获/触发了更多“虚拟”(与任何网络接口更改无关的事件)事件。并且捕获的额外事件数量与MIB_IPINTERFACE_ROW参数的值没有任何差异。
根据this 似乎是针对网速变化引发了事件,但是没有关于速度变化阈值的信息,也无法在引发的事件中检查速度变化。
没有可用于进一步故障排除的一致模式(就额外事件的数量、此事件的时间或触发此额外事件的特定网络连接而言)
在 Windows 服务启动时注册回调的函数 -
bool NetworkInterfaceHelper::initNotification(PVOID Callback,PVOID CallerContext,HANDLE NotificationHandle) {
PIPINTERFACE_CHANGE_CALLBACK interfaceChangeCallback = (PIPINTERFACE_CHANGE_CALLBACK)Callback;
return
NotifyIpInterfaceChange(
TARGET_FAMILIY,
interfaceChangeCallback,
CallerContext,
INITIAL_NOTIFICATION,
&NotificationHandle
) == NO_ERROR;
}
我了解可能存在使用 C++ 检测网络接口更改的替代方法,但如果可能,我需要使用现有代码库来解决此问题。 我已经提到了I need a event to detect Internet connect/disconnect,但是如果有可用于当前用例的修复程序,那将需要重写代码,这是不可取的。
环境: Windows-7 64 位和 Windows 10 64 位。 C++ Windows 服务。 Visual Studio 2017 社区版。 Windows SDK 版本 10.0.16299.0
【问题讨论】: