4-й аргумент DnsQuery PVOID pExtra
принимает PIP4_ARRAY
, содержащий конкретные DNS-серверы для запроса. Это объединено с 3-м аргументом DWORD Options
DNS_QUERY_BYPASS_CACHE, чтобы обойти кэш распознавателя.
Это работает с Windows 2000, и в Windows XP DnsQuery вызывает функцию
называется privateNarrowToWideQuery (в dnsapi.dll) и принимает аргумент pExtra
как PIP4_ARRAY.
MSDN является неточным в этом отношении, в результате чего это недокументированная функция.
В более старых версиях DnsQuery API Call pExtra
раньше назывался aipServers
.
Что касается DNS записей IPA6 AAAA, вы можете попробовать функцию со вторым аргументом.
WORD wType
как DNS_TYPE_AAAA
и пятый аргумент PDNS_RECORD *ppQueryResultsSet
как указатель на DNS_AAAA_DATA
. Хотя это все же заставляет вас передавать массив IPv4-адресов, а не IPV6.
Относительно поддержки версий Windows для запросов IPV6 см. Следующие ссылки
В будущих версиях Windows, я считаю, правильный способ сделать это для IPV6 будет использовать
DnsQueryEx
, с его первым аргументом PDNS_QUERY_REQUEST pQueryRequest
, который содержит
элемент PDNS_ADDR_ARRAY pDnsServerList;
, содержащий элемент WORD Family;
, который указывает тип IP-адреса DNS-сервера.
Независимо от того, поддерживает ли DnsQuery указатель на PDNS_ADDR_ARRAY в качестве аргумента PVOID pExtra
или будет изменен в будущих версиях Windows, я не уверен, но вы можете попробовать и посмотреть.
См. Как использовать функцию DnsQuery для разрешения имен хостов и адресов хостов с помощью Visual C ++ .NET для примера кода, как вы уже обнаружили.
См. Также аналогичный вопрос SO .