【发布时间】:2020-10-07 23:18:45
【问题描述】:
我正在寻找一种在网络接口的已配置 DNS 服务器地址发生更改时使用本机 Windows API (C/C++) 接收通知的方法。出于性能和反应时间的原因,我显然希望避免轮询。
例如,Iphlpapi.dll 中有 NotifyIpInterfaceChange API。在我的测试中,当主机的 IP 地址、子网掩码或默认网关发生变化时,它会可靠地触发通知,但仅当 DNS 地址发生变化时根本不会触发。
到目前为止,我唯一的“解决方案”是使用 WMI 事件查询,但它实际上是在后台轮询,因此为了避免占用系统,需要将轮询间隔(WQL WITHIN 子句)设置为几个秒,这导致我的应用程序出现长时间且烦人的延迟。另外,出于各种原因(这不是本次讨论的主题),我更愿意避免使用 WMI,只有在没有其他方法时才使用它。
【问题讨论】:
-
在
HKLM\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\Interfaces[\interface-name]上调用RegNotifyChangeKeyValue的最小可能性是多少,因为当DNS 服务器更改时此密钥将被更改-NameServer 和DhcpNameServer -
好主意。我研究了一下,它应该可以工作。我绝对可以将其视为可接受的解决方案。我只是想知道这是否是唯一的方法?它肯定比 WMI 恕我直言。
-
如果这是唯一的方法?不知道。可能存在和更好的解决方案/ api,但我不知道这一点。比 WMI 更好 - 是的,100%
-
是的,我的意思是,如果有人提出更好的主意,我会再等一会儿。与此同时,如果你把你的答案放在答案而不是评论中,我会很乐意支持它。如果没有更好的结果,我会很乐意接受它作为答案。
-
@RbMm:我愿意接受您的建议作为解决方案。你能把它变成一个答案吗?然后你会得到它的积分。
标签: c++ c winapi network-programming