簡體   English   中英

Windows API 為 DNS 更改通知

[英]Windows API for DNS change notification

我正在尋找一種方法來接收通知,只要 a.network 接口的配置 DNS 服務器地址發生變化,使用本機 Windows API (C/C++)。 出於性能和反應時間的原因,我顯然希望避免輪詢。

例如, Iphlpapi.dll中有NotifyIpInterfaceChange API。 在我的測試中,當主機的 IP 地址、su.net 掩碼或默認網關發生變化時,它會可靠地觸發通知,但當只有 DNS 地址發生變化時,它根本不會觸發通知。

到目前為止,我唯一的“解決方案”是使用 WMI 事件查詢,但它實際上是在后台輪詢,因此為了避免占用系統,需要將輪詢間隔(WQL WITHIN子句)設置為幾秒,這會導致對我的應用程序來說是一個漫長而煩人的延遲。 此外,由於各種原因(不是本次討論的主題),我寧願避免使用 WMI,只有在沒有其他方法時才使用它。

這個答案的實際功勞應該是 go 到 RbMm,但他沒有發布答案並且似乎已經消失了。

要接收 DNS 更改通知,唯一的非輪詢解決方案似乎是使用RegNotifyChangeKeyValue WinApi 來監視HKLM\SYSTEM\CurrentControlSet\Services\Tcpip[6]\Parameters\Interfaces鍵下的更改。 請注意,IPv4 和 IPv6 分別有單獨的 Tcpip 和 Tcpip6 密鑰。 無論如何,自最初的建議以來,我已經實施並徹底測試了該解決方案,並且它可以正常工作。

一個半相關的警告: RegNotifyChangeKeyValue有其非直觀的特性,並且它與大多數其他通知 API 不同,所以一定要研究它的文檔。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM