gpt4 book ai didi

c++ - 如何过滤/区分 Windows API NotifyIpInterfaceChange() 捕获的实际事件和 "dummy"事件

转载 作者:太空宇宙 更新时间:2023-11-04 12:40:26 32 4
gpt4 key购买 nike

我需要捕获网络接口(interface)更改,即基于 C++ 的 Windows 服务中的网络连接/断开事件。Windows API 函数 NotifyIpInterfaceChange () 确实捕获了所有需要的事件,但问题是它还捕获/触发了更多“虚拟”(与任何网络接口(interface)更改无关的事件)事件。并且捕获的额外事件的数量与 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++ 检测网络接口(interface)更改,但我需要修复此问题,如果可能的话,使用现有的代码库。我提到了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

最佳答案

在回调函数(MIB_IPINTERFACE_ROW.connected)中过滤/区分它们。

NotifyIpInterfaceChange功能:

registers to be notified for changes to all IP interfaces, IPv4 interfaces, or IPv6 interfaces on a local computer.

关于c++ - 如何过滤/区分 Windows API NotifyIpInterfaceChange() 捕获的实际事件和 "dummy"事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54457814/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com