gpt4 book ai didi

c++ - 用于 DNS 更改通知的 Windows API

转载 作者:行者123 更新时间:2023-12-03 06:54:54 26 4
gpt4 key购买 nike

我正在寻找一种使用 native Windows API(C/C++)在配置的网络接口(interface)的 DNS 服务器地址发生更改时接收通知的方法。出于性能和 react 时间的原因,我显然希望避免轮询。
例如, NotifyIpInterfaceChange Iphlpapi.dll 中的 API .在我的测试中,当主机的 IP 地址、子网掩码或默认网关发生更改时,它会可靠地触发通知,但仅当 DNS 地址发生更改时根本不会。
到目前为止,我唯一的“解决方案”是使用 WMI 事件查询,但它实际上是在后台轮询,因此为了避免占用系统,需要将轮询间隔(WQL WITHIN 子句)设置为几秒钟,这导致我的应用程序出现漫长而烦人的延迟。此外,出于各种原因(这不是本次讨论的主题),我更愿意避免使用 WMI,只有在没有其他方法时才使用它。

最佳答案

这个答案的实际功劳应该归于 RbMm,但他没有发布答案,而且似乎已经离开了 MIA。
要接收 DNS 更改通知,唯一的非轮询解决方案似乎是使用 RegNotifyChangeKeyValue WinApi 监控 HKLM\SYSTEM\CurrentControlSet\Services\Tcpip[6]\Parameters\Interfaces 下的变化 key 。请注意,IPv4 和 IPv6 分别有单独的 Tcpip 和 Tcpip6 key 。无论如何,自最初的建议以来,我已经实现并彻底测试了该解决方案,并且它可以正常工作。
半相关警告:RegNotifyChangeKeyValue有其非直观的特性,它与大多数其他通知 API 不同,所以一定要研究它的文档。

关于c++ - 用于 DNS 更改通知的 Windows API,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64253605/

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