DnsApi简单探索(4) DNS_QUERY_CANCEL struct 及其他

来源:互联网 发布:隐形眼镜 品牌 知乎 编辑:程序博客网 时间:2024/05/02 03:08

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, 用于异步请求取消. 应用程序不能修改这个值.

注意

这个结构从一个已被调用的DnsQueryExpCancelHandle 参数返回.



DNS Query Options
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结构的所有标志应当被设置为零. (使用前初始化)


0 0