DnsApi简单探索(5) DnsQuery function

来源:互联网 发布:手机遥控麻将机软件 编辑:程序博客网 时间:2024/05/22 17:22

前面提到的DnsQueryEx方法及相关内容仅适用于Win8, 对于Win8以下版本的系统, 需要用DnsQuery这个方法.

基本大同小异, 比DnsQueryEx简单明了一些.


DnsQuery function

DnsQuery是通用DNS查询接口.像很多DNS方法一样, DnsQuery方法可以实现多种字符集编码查询,如下:

    • DnsQuery_A (for ANSI encoding)
    • DnsQuery_W (for Unicode encoding)
    • DnsQuery_UTF8 (for UTF-8 encoding)

Windows 8: 如果应用程序要进行异步查询,请使用DnsQueryEx方法.

语法

DNS_STATUS WINAPI DnsQuery( _In_         PCTSTRl<span style="white-space:pre"></span>pstrName, _In_         WORD<span style="white-space:pre"></span>wType, _In_         DWORD<span style="white-space:pre"></span>Options, _Inout_opt_  PVOID<span style="white-space:pre"></span>pExtra, _Out_opt_    PDNS_RECORD*<span style="white-space:pre"></span>ppQueryResultsSet, _Out_opt_    PVOID*<span style="white-space:pre"></span>pReserved);

参数

lpstrName [in]

指向要查询的DNS名称(DNS name)的字符串指针.

wType [in]

要请求的资源记录(Resource Record)(RR)类型DNS Record Type.  wType决定了ppQueryResultsSet的数据类型.例如,如果wType值为DNS_TYPE_A,ppQueryResultsSet数据类型为DNS_A_DATA.

Options [in]

查询配置,可以是一个或多个DNS QueryOptions的组合,配置将覆盖DNS_QUERY_STANDARD (0).

pExtra [in, out, optional]

预留参数,必须置NULL.

ppQueryResultsSet [out, optional]

可选参数.指向响应中RR列表的指针的指针,详请参考注意.

pReserved [out, optional]

预留参数,必须置NULL.

返回值

成功返回ERROR_SUCCESS.失败错误码DNS_STATUS定义参阅Winerror.h

注意

应用程序使用合法DNS名称(DNS name)和资源记录(Resource Record)(RR)类型进行查询,并根据服务所需设置查询配置选项(Options).Options设置为DNS_QUERY_STANDARD,使用解析器缓存,先进行UDP查询,然后如果响应截断使用TCP重试,并请求服务器代表客户端执行递归解析查询

 

应用程序必须调用DnsRecordListFree()方法释放返回的RR.

 

注意:当调用DnsQuery, DNS服务器可能在一次查询中返回多个记录.多宿主主机,例如,对于同一个IP可能会收到多个A记录.调用者应确保所有返回的记录都被妥善处理.

考虑一下情景,多宿主主机返回的记录需要额外的动作:一个多宿主主机调用DnsQuery_A方法进行查询,发现与第一条记录相关连的IP地址没有响应.那么应用程序应该尝试使用记录中的其他IP地址.

 

如果lpstrName 参数被置为NULL,那么DnsQuery函数将返回错误码INVALID_PARAMETER.

 

0 0
原创粉丝点击