DNS_QUERY_CANCEL仅用于异步查询时取消, 且只能在回调开始后使用. 内容很少, 余下部分贴一点DNS_QUERY_REQUEST和DNS_QUERY_RESULT结构内成员的类型.
DNS_QUERY_CANCEL structure
DNS_QUERY_CANCEL可以被用于取消一个异步DNS请求.
语法
typedef struct_DNS_QUERY_CANCEL
{
CHAR Reserved[32];
} DNS_QUERY_CANCEL, *PDNS_QUERY_CANCEL;
成员
Reserved
包含一个handle, 用于异步请求取消. 应用程序不能修改这个值.
注意
这个结构从一个已被调用的DnsQueryEx的pCancelHandle 参数返回.
Constant
|
Value
|
Meaning
|
DNS_QUERY_STANDARD
|
0x00000000
|
标准请求
.
|
DNS_QUERY_ACCEPT_TRUNCATED_RESPONSE
|
0x00000001
|
返回截断的结果
. TCP
不重试
.
|
DNS_QUERY_USE_TCP_ONLY
|
0x00000002
|
仅用
TCP
请求
.
|
DNS_QUERY_NO_RECURSION
|
0x00000004
|
指示
DNS
服务器执行迭代查询
(
特别的
,
指示
DNS
服务器不执行递归查询
)
|
DNS_QUERY_BYPASS_CACHE
|
0x00000008
|
绕过解析器缓冲
|
DNS_QUERY_NO_WIRE_QUERY
|
0x00000010
|
指示
DNS
仅通过本地缓存查询
. (Win2000
不支持
)
|
DNS_QUERY_NO_LOCAL_NAME
|
0x00000020
|
指示
DNS
绕过本地名称
.(Win2000
不支持
)
|
DNS_QUERY_NO_HOSTS_FILE
|
0x00000040
|
阻止
DNS
通过
hosts
文件查询
. (Win2000
不支持
)
|
DNS_QUERY_NO_NETBT
|
0x00000080
|
阻止
DNS
使用
NetBT
查询
. (Win2000
不支持
)
|
DNS_QUERY_WIRE_ONLY
|
0x00000100
|
指示
DNS
仅通过网络查询
,
绕过本地
. (Win2000
不支持
)
|
DNS_QUERY_RETURN_MESSAGE
|
0x00000200
|
指示
DNS
返回完整的响应信息
. (Win2000
不支持
)
|
DNS_QUERY_MULTICAST_ONLY
|
0x00000400
|
阻止使用
DNS
查询
,
只允许使用本地连接多播名称解析
(LLMNR). (Win2000
不支持
)
|
DNS_QUERY_NO_MULTICAST
|
0x00000800
|
阻止使用本地连接多播名称解析
(LLMNR).
|
DNS_QUERY_TREAT_AS_FQDN
|
0x00001000
|
在解析过程中
,
阻止
DNS
响应在提交的名字里加上后缀
.
|
DNS_QUERY_ADDRCONFIG
|
0x00002000
| 仅适用Win7:
如果
IPv4
地址无效不要发送
A
记录查询
,
如果
IPv6
地址无效不要发送
AAAA
记录查询
.
|
DNS_QUERY_DUAL_ADDR
|
0x00004000
| 仅适用Win7:
同时查询
AAAA
和
A
记录
,
并且分别返回查询结果
.
结果中
A
记录被映射到
AAAA
记录上
.
|
DNS_QUERY_MULTICAST_WAIT
|
0x00020000
| 等待完整超时 , 以从本地连接收集所有响应 . 如果未设置该标志 , 默认在收到第一个响应时返回
(Vista,2008
或以上版本不支持
.)
|
DNS_QUERY_MULTICAST_VERIFY
|
0x00040000
| 在同一个本地连接中 , 指示一个测试 , 使用本地主机名验证名称的唯一性 . 收集所有响应 , 即使未启用正常 LLMNR 发送者行为 .
(Vista,2008
或以上版本不支持
.)
|
DNS_QUERY_DONT_RESET_TTL_VALUES
|
0x00100000
| If set, and if the response contains multiple records, records are stored with the TTL corresponding to the minimum value TTL from among all records. When this option is set, "Do not change the TTL of individual records" in the returned record set is not modified.
如果设置了该
flag,
并且响应中包含多个记录
,
记录与所有记录中最小的
TTL
一块存储
当这个flag被设置
, “Do not change the TTL of individual records”
在返回的记录设置中没有被修改
.
|
DNS_QUERY_DISABLE_IDN_ENCODING
|
0x00200000
| 在DnsQuery , DnsQueryEx, DnsModifyRecordsInSet , 以及 DnsReplaceRecordSet 中禁用国际域名 (IDN) 编码支持. 所有 punycode编码的名称将被视为 ASCII 编码, 并将在传输时被 ASCII 编码. 所有非 ASCII编码的名称在传输时都被编码为 UTF-8.
(Win8
或以上版本不支持
)
|
DNS_QUERY_APPEND_MULTILABEL
|
0x00800000
|
追加多标记
?
|
DNS_QUERY_RESERVED
|
0xf0000000
|
预留
.
|
DNS_RECORD structure
DNS_RECORD结构存储了一个DNS资源记录(RR)
语法
typedef struct_DnsRecord {
DNS_RECORD *pNext;
PWSTR pName;
WORD wType;
WORD wDataLength;
union {
DWORD DW;
DNS_RECORD_FLAGS S;
} Flags;
DWORD dwTtl;
DWORD dwReserved;
union {
DNS_A_DATA A;
DNS_SOA_DATA SOA, Soa;
DNS_PTR_DATA PTR, Ptr, NS, Ns, CNAME, Cname, DNAME, Dname, MB, Mb, MD, Md, MF, Mf, MG, Mg, MR, Mr;
DNS_MINFO_DATA MINFO, Minfo, RP, Rp;
DNS_MX_DATA MX, Mx, AFSDB, Afsdb, RT, Rt;
DNS_TXT_DATA HINFO, Hinfo, ISDN, Isdn, TXT, Txt, X25;
DNS_NULL_DATA Null;
DNS_WKS_DATA WKS, Wks;
DNS_AAAA_DATA AAAA;
DNS_KEY_DATA KEY, Key;
DNS_SIG_DATA SIG, Sig;
DNS_ATMA_DATA ATMA, Atma;
DNS_NXT_DATA NXT, Nxt;
DNS_SRV_DATA SRV, Srv;
DNS_NAPTR_DATA NAPTR, Naptr;
DNS_OPT_DATA OPT, Opt;
DNS_DS_DATA DS, Ds;
DNS_RRSIG_DATA RRSIG, Rrsig;
DNS_NSEC_DATA NSEC, Nsec;
DNS_DNSKEY_DATA DNSKEY, Dnskey;
DNS_TKEY_DATA TKEY, Tkey;
DNS_TSIG_DATA TSIG, Tsig;
DNS_WINS_DATA WINS, Wins;
DNS_WINSR_DATA WINSR, WinsR, NBSTAT, Nbstat;
DNS_DHCID_DATA DHCID;
} Data;
} DNS_RECORD, *PDNS_RECORD;
成员
pNext
指向下一个DNS_RECORD结构的指针.
pName
指向表示记录中域名的字符串的指针. 这必须是符合函数调用格式的字符串. 例如ANSI, Unicode或者UTF8.
wType
表示RR类型DNS Record Type. wType决定了Data的格式. 例如, 如果wType值为DNS_TYPE_A, Data的数据类型为DNS_A_DATA.
wDataLength
Data的数据长度,单位byte.
对于fixed-length, 该值是对应数据类型的大小, 例如 sizeof(DNS_A_DATA).
对于non-fixed, 使用下列宏之一来确定数据长度:
#include <windows.h> #define DNS_NULL_RECORD_LENGTH(ByteCount) (sizeof(DWORD) + (ByteCount)) #define DNS_WKS_RECORD_LENGTH(ByteCount) (sizeof(DNS_WKS_DATA) + (ByteCount-1)) #define DNS_WINS_RECORD_LENGTH(IpCount) (sizeof(DNS_WINS_DATA) + ((IpCount-1) * sizeof(IP_ADDRESS))) #define DNS_TEXT_RECORD_LENGTH(StringCount) (sizeof(DWORD) + ((StringCount) * sizeof(PCHAR)))
Flags
Flags取值
说明
DW
包含一个DNS_Record_Flags的位图(bitmap).
S
以DNS_RECORD_FLAGS结构形式的一组标志.
dwTtl
DNS RR的生存期, 单位秒.
dwReserved
预留的, 未被使用.
Data
DNS RR数据类型由wType决定, 取值为是下列之一:
RR类型
RR数据类型
wType取值
说明
A
DNS_A_DATA
DNS_TYPE_A
SOA, Soa
DNS_SOA_DATA
DNS_TYPE_SOA
PTR, Ptr, NS, Ns, CNAME, Cname, DNAME, Dname, MB, Mb, MD, Md, MF, Mf, MG, Mg, MR, Mr
DNS_PTR_DATA
DNS_TYPE_PTR
MINFO, Minfo, RP, Rp
DNS_MINFO_DATA
DNS_TYPE_MINFO
MX, Mx, AFSDB, Afsdb, RT, Rt
DNS_MX_DATA
DNS_TYPE_MX
HINFO, Hinfo, ISDN, Isdn, TXT, Txt, X25
DNS_TXT_DATA
DNS_TYPE_TEXT
Null
DNS_NULL_DATA
DNS_TYPE_NULL
WKS, Wks
DNS_WKS_DATA
DNS_TYPE_WKS
AAAA
DNS_AAAA_DATA
DNS_TYPE_AAAA
KEY, Key
DNS_KEY_DATA
DNS_TYPE_KEY
SIG, Sig
DNS_SIG_DATA
DNS_TYPE_SIG
ATMA, Atma
DNS_ATMA_DATA
DNS_TYPE_ATMA
NXT, Nxt
DNS_NXT_DATA
DNS_TYPE_NXT
SRV, Srv
DNS_SRV_DATA
DNS_TYPE_SRV
NAPTR, Naptr
DNS_NAPTR_DATA
DNS_TYPE_NAPTR
OPT, Opt
DNS_OPT_DATA
DNS_TYPE_OPT
Windows 7 or later
DS, Ds
DNS_DS_DATA
DNS_TYPE_DS
Windows 7 or later
RRSIG, Rrsig
DNS_RRSIG_DATA
DNS_TYPE_RRSIG
Windows 7 or later
NSEC, Nsec
DNS_NSEC_DATA
DNS_TYPE_NSEC
Windows 7 or later
DNSKEY, Dnskey
DNS_DNSKEY_DATA
DNS_TYPE_DNSKEY
Windows 7 or later
TKEY, Tkey
DNS_TKEY_DATA
DNS_TYPE_TKEY
TSIG, Tsig
DNS_TSIG_DATA
DNS_TYPE_TSIG
WINS, Wins
DNS_WINS_DATA
DNS_TYPE_WINS
WINSR, WinsR, NBSTAT, Nbstat
DNS_WINSR_DATA
DNS_TYPE_WINSR
DHCID
DNS_DHCID_DATA
DNS_TYPE_DHCID
Windows 7 or later
注意
当建立一个DNS_RECORD列表作为为DNS API中发现的各种DNS更新例程的输入参数时, 在DNS_RECORD结构的所有标志应当被设置为零. (使用前初始化)