zig

fork of https://codeberg.org/ziglang/zig
Log | Files | Refs | README | LICENSE

windns.h (44450B) - Raw


      1 /**
      2  * This file has no copyright assigned and is placed in the Public Domain.
      3  * This file is part of the mingw-w64 runtime package.
      4  * No warranty is given; refer to the file DISCLAIMER.PD within this package.
      5  */
      6 #ifndef _WINDNS_INCLUDED_
      7 #define _WINDNS_INCLUDED_
      8 
      9 #include <_mingw_unicode.h>
     10 
     11 #ifdef __cplusplus
     12 extern "C" {
     13 #endif
     14 
     15   __MINGW_EXTENSION typedef unsigned __int64 QWORD,*PQWORD;
     16   typedef LONG DNS_STATUS,*PDNS_STATUS;
     17   typedef DWORD IP4_ADDRESS,*PIP4_ADDRESS;
     18 
     19 #define SIZEOF_IP4_ADDRESS (4)
     20 #define IP4_ADDRESS_STRING_LENGTH (15)
     21 #define IP4_ADDRESS_STRING_BUFFER_LENGTH (16)
     22 
     23   typedef struct _IP4_ARRAY {
     24     DWORD AddrCount;
     25     IP4_ADDRESS AddrArray[1];
     26   } IP4_ARRAY,*PIP4_ARRAY;
     27 
     28   typedef union {
     29 #ifdef _WIN64
     30     QWORD IP6Qword[2];
     31 #endif
     32     DWORD IP6Dword[4];
     33     WORD IP6Word[8];
     34     BYTE IP6Byte[16];
     35 #ifdef IN6_ADDR
     36     IN6_ADDR In6;
     37 #endif
     38   } IP6_ADDRESS,*PIP6_ADDRESS;
     39 
     40 #undef IP6_ADDRESS_STRING_LENGTH
     41 #define IP6_ADDRESS_STRING_LENGTH (47)
     42 #define IP6_ADDRESS_STRING_BUFFER_LENGTH (48)
     43 #define DNS_ADDRESS_STRING_LENGTH (IP6_ADDRESS_STRING_LENGTH)
     44 
     45 #define INLINE_WORD_FLIP(out,in) { WORD _in = (in); (out) = (_in << 8) | (_in >> 8); }
     46 #define INLINE_HTONS(out,in) INLINE_WORD_FLIP(out,in)
     47 #define INLINE_NTOHS(out,in) INLINE_WORD_FLIP(out,in)
     48 #define INLINE_DWORD_FLIP(out,in) { DWORD _in = (in); (out) = ((_in << 8) & 0x00ff0000) | (_in << 24) | ((_in >> 8) & 0x0000ff00) | (_in >> 24); }
     49 #define INLINE_NTOHL(out,in) INLINE_DWORD_FLIP(out,in)
     50 #define INLINE_HTONL(out,in) INLINE_DWORD_FLIP(out,in)
     51 #define INLINE_WRITE_FLIPPED_WORD(pout,in) INLINE_WORD_FLIP(*((UNALIGNED WORD *)(pout)),in)
     52 #define INLINE_WRITE_FLIPPED_DWORD(pout,in) INLINE_DWORD_FLIP(*((UNALIGNED DWORD *)(pout)),in)
     53 
     54 #define DNS_PORT_HOST_ORDER (0x0035)
     55 #define DNS_PORT_NET_ORDER (0x3500)
     56 #define DNS_RFC_MAX_UDP_PACKET_LENGTH (512)
     57 #define DNS_MAX_NAME_LENGTH (255)
     58 #define DNS_MAX_LABEL_LENGTH (63)
     59 #define DNS_MAX_NAME_BUFFER_LENGTH (256)
     60 #define DNS_MAX_LABEL_BUFFER_LENGTH (64)
     61 #define DNS_IP4_REVERSE_DOMAIN_STRING_A ("in-addr.arpa.")
     62 #define DNS_IP4_REVERSE_DOMAIN_STRING_W (L"in-addr.arpa.")
     63 #define DNS_MAX_IP4_REVERSE_NAME_LENGTH (IP4_ADDRESS_STRING_LENGTH+1+sizeof(DNS_IP4_REVERSE_DOMAIN_STRING_A))
     64 #define DNS_MAX_IP4_REVERSE_NAME_BUFFER_LENGTH (DNS_MAX_IP4_REVERSE_NAME_LENGTH + 1)
     65 #define DNS_IP6_REVERSE_DOMAIN_STRING_A ("ip6.arpa.")
     66 #define DNS_IP6_REVERSE_DOMAIN_STRING_W (L"ip6.arpa.")
     67 #define DNS_MAX_IP6_REVERSE_NAME_LENGTH (64+sizeof(DNS_IP6_REVERSE_DOMAIN_STRING_A))
     68 #define DNS_MAX_IP6_REVERSE_NAME_BUFFER_LENGTH (DNS_MAX_IP6_REVERSE_NAME_LENGTH + 1)
     69 #define DNS_MAX_REVERSE_NAME_LENGTH DNS_MAX_IP6_REVERSE_NAME_LENGTH
     70 #define DNS_MAX_REVERSE_NAME_BUFFER_LENGTH DNS_MAX_IP6_REVERSE_NAME_BUFFER_LENGTH
     71 
     72 #define DNS_IP4_REVERSE_DOMAIN_STRING __MINGW_NAME_UAW(DNS_IP4_REVERSE_DOMAIN_STRING)
     73 #define DNS_IP6_REVERSE_DOMAIN_STRING __MINGW_NAME_UAW(DNS_IP6_REVERSE_DOMAIN_STRING)
     74 
     75 #define DNS_MAX_TEXT_STRING_LENGTH (255)
     76 
     77 #pragma pack(1)
     78 
     79   typedef struct _DNS_HEADER {
     80     WORD Xid;
     81     BYTE RecursionDesired : 1;
     82     BYTE Truncation : 1;
     83     BYTE Authoritative : 1;
     84     BYTE Opcode : 4;
     85     BYTE IsResponse : 1;
     86     BYTE ResponseCode : 4;
     87     BYTE CheckingDisabled : 1;
     88     BYTE AuthenticatedData : 1;
     89     BYTE Reserved : 1;
     90     BYTE RecursionAvailable : 1;
     91     WORD QuestionCount;
     92     WORD AnswerCount;
     93     WORD NameServerCount;
     94     WORD AdditionalCount;
     95   } DNS_HEADER, *PDNS_HEADER;
     96 
     97   typedef struct _DNS_HEADER_EXT {
     98     WORD Reserved : 15;
     99     WORD DnssecOk : 1;
    100     BYTE chRcode;
    101     BYTE chVersion;
    102   } DNS_HEADER_EXT, *PDNS_HEADER_EXT;
    103 
    104 #define DNS_HEADER_FLAGS(pHead) (*((PWORD)(pHead)+1))
    105 #define DNS_BYTE_FLIP_HEADER_COUNTS(pHeader) { PDNS_HEADER _head = (pHeader); INLINE_HTONS(_head->Xid,_head->Xid); INLINE_HTONS(_head->QuestionCount,_head->QuestionCount); INLINE_HTONS(_head->AnswerCount,_head->AnswerCount); INLINE_HTONS(_head->NameServerCount,_head->NameServerCount); INLINE_HTONS(_head->AdditionalCount,_head->AdditionalCount); }
    106 #define DNS_OFFSET_TO_QUESTION_NAME sizeof(DNS_HEADER)
    107 #define DNS_COMPRESSED_QUESTION_NAME (0xC00C)
    108 #define DNS_QUESTION_NAME_FROM_HEADER(_pHeader_) ((PCHAR)((PDNS_HEADER)(_pHeader_) + 1))
    109 #define DNS_ANSWER_FROM_QUESTION(_pQuestion_) ((PCHAR)((PDNS_QUESTION)(_pQuestion_) + 1))
    110 
    111   typedef struct _DNS_WIRE_QUESTION {
    112     WORD QuestionType;
    113     WORD QuestionClass;
    114   } DNS_WIRE_QUESTION,*PDNS_WIRE_QUESTION;
    115 
    116   typedef struct _DNS_WIRE_RECORD {
    117     WORD RecordType;
    118     WORD RecordClass;
    119     DWORD TimeToLive;
    120     WORD DataLength;
    121   } DNS_WIRE_RECORD,*PDNS_WIRE_RECORD;
    122 
    123 #pragma pack()
    124 
    125 #define DNS_OPCODE_QUERY 0
    126 #define DNS_OPCODE_IQUERY 1
    127 #define DNS_OPCODE_SERVER_STATUS 2
    128 #define DNS_OPCODE_UNKNOWN 3
    129 #define DNS_OPCODE_NOTIFY 4
    130 #define DNS_OPCODE_UPDATE 5
    131 
    132 #define DNS_RCODE_NOERROR 0
    133 #define DNS_RCODE_FORMERR 1
    134 #define DNS_RCODE_SERVFAIL 2
    135 #define DNS_RCODE_NXDOMAIN 3
    136 #define DNS_RCODE_NOTIMPL 4
    137 #define DNS_RCODE_REFUSED 5
    138 #define DNS_RCODE_YXDOMAIN 6
    139 #define DNS_RCODE_YXRRSET 7
    140 #define DNS_RCODE_NXRRSET 8
    141 #define DNS_RCODE_NOTAUTH 9
    142 #define DNS_RCODE_NOTZONE 10
    143 #define DNS_RCODE_MAX 15
    144 #define DNS_RCODE_BADVERS 16
    145 #define DNS_RCODE_BADSIG 16
    146 #define DNS_RCODE_BADKEY 17
    147 #define DNS_RCODE_BADTIME 18
    148 #define DNS_RCODE_NO_ERROR DNS_RCODE_NOERROR
    149 #define DNS_RCODE_FORMAT_ERROR DNS_RCODE_FORMERR
    150 #define DNS_RCODE_SERVER_FAILURE DNS_RCODE_SERVFAIL
    151 #define DNS_RCODE_NAME_ERROR DNS_RCODE_NXDOMAIN
    152 #define DNS_RCODE_NOT_IMPLEMENTED DNS_RCODE_NOTIMPL
    153 
    154 #define DNS_CLASS_INTERNET 0x0001
    155 #define DNS_CLASS_CSNET 0x0002
    156 #define DNS_CLASS_CHAOS 0x0003
    157 #define DNS_CLASS_HESIOD 0x0004
    158 #define DNS_CLASS_NONE 0x00fe
    159 #define DNS_CLASS_ALL 0x00ff
    160 #define DNS_CLASS_ANY 0x00ff
    161 #define DNS_CLASS_UNICAST_RESPONSE 0x8000
    162 
    163 #define DNS_RCLASS_INTERNET 0x0100
    164 #define DNS_RCLASS_CSNET 0x0200
    165 #define DNS_RCLASS_CHAOS 0x0300
    166 #define DNS_RCLASS_HESIOD 0x0400
    167 #define DNS_RCLASS_NONE 0xfe00
    168 #define DNS_RCLASS_ALL 0xff00
    169 #define DNS_RCLASS_ANY 0xff00
    170 #define DNS_RCLASS_UNICAST_RESPONSE 0x0080
    171 
    172 #define DNS_TYPE_ZERO 0x0000
    173 #define DNS_TYPE_A 0x0001
    174 #define DNS_TYPE_NS 0x0002
    175 #define DNS_TYPE_MD 0x0003
    176 #define DNS_TYPE_MF 0x0004
    177 #define DNS_TYPE_CNAME 0x0005
    178 #define DNS_TYPE_SOA 0x0006
    179 #define DNS_TYPE_MB 0x0007
    180 #define DNS_TYPE_MG 0x0008
    181 #define DNS_TYPE_MR 0x0009
    182 #define DNS_TYPE_NULL 0x000a
    183 #define DNS_TYPE_WKS 0x000b
    184 #define DNS_TYPE_PTR 0x000c
    185 #define DNS_TYPE_HINFO 0x000d
    186 #define DNS_TYPE_MINFO 0x000e
    187 #define DNS_TYPE_MX 0x000f
    188 #define DNS_TYPE_TEXT 0x0010
    189 #define DNS_TYPE_RP 0x0011
    190 #define DNS_TYPE_AFSDB 0x0012
    191 #define DNS_TYPE_X25 0x0013
    192 #define DNS_TYPE_ISDN 0x0014
    193 #define DNS_TYPE_RT 0x0015
    194 #define DNS_TYPE_NSAP 0x0016
    195 #define DNS_TYPE_NSAPPTR 0x0017
    196 #define DNS_TYPE_SIG 0x0018
    197 #define DNS_TYPE_KEY 0x0019
    198 #define DNS_TYPE_PX 0x001a
    199 #define DNS_TYPE_GPOS 0x001b
    200 #define DNS_TYPE_AAAA 0x001c
    201 #define DNS_TYPE_LOC 0x001d
    202 #define DNS_TYPE_NXT 0x001e
    203 #define DNS_TYPE_EID 0x001f
    204 #define DNS_TYPE_NIMLOC 0x0020
    205 #define DNS_TYPE_SRV 0x0021
    206 #define DNS_TYPE_ATMA 0x0022
    207 #define DNS_TYPE_NAPTR 0x0023
    208 #define DNS_TYPE_KX 0x0024
    209 #define DNS_TYPE_CERT 0x0025
    210 #define DNS_TYPE_A6 0x0026
    211 #define DNS_TYPE_DNAME 0x0027
    212 #define DNS_TYPE_SINK 0x0028
    213 #define DNS_TYPE_OPT 0x0029
    214 #define DNS_TYPE_DS 0x002b
    215 #define DNS_TYPE_RRSIG 0x002e
    216 #define DNS_TYPE_NSEC 0x002f
    217 #define DNS_TYPE_DNSKEY 0x0030
    218 #define DNS_TYPE_DHCID 0x0031
    219 #define DNS_TYPE_NSEC3 0x0032
    220 #define DNS_TYPE_NSEC3PARAM 0x0033
    221 #define DNS_TYPE_TLSA 0x0034
    222 #define DNS_TYPE_UINFO 0x0064
    223 #define DNS_TYPE_UID 0x0065
    224 #define DNS_TYPE_GID 0x0066
    225 #define DNS_TYPE_UNSPEC 0x0067
    226 #define DNS_TYPE_ADDRS 0x00f8
    227 #define DNS_TYPE_TKEY 0x00f9
    228 #define DNS_TYPE_TSIG 0x00fa
    229 #define DNS_TYPE_IXFR 0x00fb
    230 #define DNS_TYPE_AXFR 0x00fc
    231 #define DNS_TYPE_MAILB 0x00fd
    232 #define DNS_TYPE_MAILA 0x00fe
    233 #define DNS_TYPE_ALL 0x00ff
    234 #define DNS_TYPE_ANY 0x00ff
    235 #define DNS_TYPE_WINS 0xff01
    236 #define DNS_TYPE_WINSR 0xff02
    237 #define DNS_TYPE_NBSTAT (DNS_TYPE_WINSR)
    238 
    239 #define DNS_RTYPE_A 0x0100
    240 #define DNS_RTYPE_NS 0x0200
    241 #define DNS_RTYPE_MD 0x0300
    242 #define DNS_RTYPE_MF 0x0400
    243 #define DNS_RTYPE_CNAME 0x0500
    244 #define DNS_RTYPE_SOA 0x0600
    245 #define DNS_RTYPE_MB 0x0700
    246 #define DNS_RTYPE_MG 0x0800
    247 #define DNS_RTYPE_MR 0x0900
    248 #define DNS_RTYPE_NULL 0x0a00
    249 #define DNS_RTYPE_WKS 0x0b00
    250 #define DNS_RTYPE_PTR 0x0c00
    251 #define DNS_RTYPE_HINFO 0x0d00
    252 #define DNS_RTYPE_MINFO 0x0e00
    253 #define DNS_RTYPE_MX 0x0f00
    254 #define DNS_RTYPE_TEXT 0x1000
    255 #define DNS_RTYPE_RP 0x1100
    256 #define DNS_RTYPE_AFSDB 0x1200
    257 #define DNS_RTYPE_X25 0x1300
    258 #define DNS_RTYPE_ISDN 0x1400
    259 #define DNS_RTYPE_RT 0x1500
    260 #define DNS_RTYPE_NSAP 0x1600
    261 #define DNS_RTYPE_NSAPPTR 0x1700
    262 #define DNS_RTYPE_SIG 0x1800
    263 #define DNS_RTYPE_KEY 0x1900
    264 #define DNS_RTYPE_PX 0x1a00
    265 #define DNS_RTYPE_GPOS 0x1b00
    266 #define DNS_RTYPE_AAAA 0x1c00
    267 #define DNS_RTYPE_LOC 0x1d00
    268 #define DNS_RTYPE_NXT 0x1e00
    269 #define DNS_RTYPE_EID 0x1f00
    270 #define DNS_RTYPE_NIMLOC 0x2000
    271 #define DNS_RTYPE_SRV 0x2100
    272 #define DNS_RTYPE_ATMA 0x2200
    273 #define DNS_RTYPE_NAPTR 0x2300
    274 #define DNS_RTYPE_KX 0x2400
    275 #define DNS_RTYPE_CERT 0x2500
    276 #define DNS_RTYPE_A6 0x2600
    277 #define DNS_RTYPE_DNAME 0x2700
    278 #define DNS_RTYPE_SINK 0x2800
    279 #define DNS_RTYPE_OPT 0x2900
    280 #define DNS_RTYPE_DS 0x2b00
    281 #define DNS_RTYPE_RRSIG 0x2e00
    282 #define DNS_RTYPE_NSEC 0x2f00
    283 #define DNS_RTYPE_DNSKEY 0x3000
    284 #define DNS_RTYPE_DHCID 0x3100
    285 #define DNS_RTYPE_NSEC3 0x3200
    286 #define DNS_RTYPE_NSEC3PARAM 0x3300
    287 #define DNS_RTYPE_TLSA 0x3400
    288 #define DNS_RTYPE_UINFO 0x6400
    289 #define DNS_RTYPE_UID 0x6500
    290 #define DNS_RTYPE_GID 0x6600
    291 #define DNS_RTYPE_UNSPEC 0x6700
    292 #define DNS_RTYPE_TKEY 0xf900
    293 #define DNS_RTYPE_TSIG 0xfa00
    294 #define DNS_RTYPE_IXFR 0xfb00
    295 #define DNS_RTYPE_AXFR 0xfc00
    296 #define DNS_RTYPE_MAILB 0xfd00
    297 #define DNS_RTYPE_MAILA 0xfe00
    298 #define DNS_RTYPE_ALL 0xff00
    299 #define DNS_RTYPE_ANY 0xff00
    300 #define DNS_RTYPE_WINS 0x01ff
    301 #define DNS_RTYPE_WINSR 0x02ff
    302 
    303 #ifndef ATMA_E164
    304 #define DNS_ATMA_FORMAT_E164 1
    305 #define DNS_ATMA_FORMAT_AESA 2
    306 #define DNS_ATMA_MAX_ADDR_LENGTH (20)
    307 #else
    308 #define DNS_ATMA_FORMAT_E164 ATM_E164
    309 #define DNS_ATMA_FORMAT_AESA ATM_AESA
    310 #define DNS_ATMA_MAX_ADDR_LENGTH ATM_ADDR_SIZE
    311 #endif
    312 
    313 #define DNS_ATMA_AESA_ADDR_LENGTH (20)
    314 #define DNS_ATMA_MAX_RECORD_LENGTH (DNS_ATMA_MAX_ADDR_LENGTH+1)
    315 
    316 #define DNSSEC_ALGORITHM_RSAMD5 1
    317 #define DNSSEC_ALGORITHM_RSASHA1 5
    318 #define DNSSEC_ALGORITHM_RSASHA1_NSEC3 7
    319 #define DNSSEC_ALGORITHM_RSASHA256 8
    320 #define DNSSEC_ALGORITHM_RSASHA512 10
    321 #define DNSSEC_ALGORITHM_ECDSAP256_SHA256 13
    322 #define DNSSEC_ALGORITHM_ECDSAP384_SHA384 14
    323 #define DNSSEC_ALGORITHM_NULL 253
    324 #define DNSSEC_ALGORITHM_PRIVATE 254
    325 
    326 #define DNSSEC_DIGEST_ALGORITHM_SHA1 1
    327 #define DNSSEC_DIGEST_ALGORITHM_SHA256 2
    328 #define DNSSEC_DIGEST_ALGORITHM_SHA384 4
    329 
    330 #define DNSSEC_PROTOCOL_NONE 0
    331 #define DNSSEC_PROTOCOL_TLS 1
    332 #define DNSSEC_PROTOCOL_EMAIL 2
    333 #define DNSSEC_PROTOCOL_DNSSEC 3
    334 #define DNSSEC_PROTOCOL_IPSEC 4
    335 
    336 #define DNSSEC_KEY_FLAG_NOAUTH 0x0001
    337 #define DNSSEC_KEY_FLAG_NOCONF 0x0002
    338 #define DNSSEC_KEY_FLAG_FLAG2 0x0004
    339 #define DNSSEC_KEY_FLAG_EXTEND 0x0008
    340 #define DNSSEC_KEY_FLAG_
    341 #define DNSSEC_KEY_FLAG_FLAG4 0x0010
    342 #define DNSSEC_KEY_FLAG_FLAG5 0x0020
    343 
    344 #define DNSSEC_KEY_FLAG_USER 0x0000
    345 #define DNSSEC_KEY_FLAG_ZONE 0x0040
    346 #define DNSSEC_KEY_FLAG_HOST 0x0080
    347 #define DNSSEC_KEY_FLAG_NTPE3 0x00c0
    348 
    349 #define DNSSEC_KEY_FLAG_FLAG8 0x0100
    350 #define DNSSEC_KEY_FLAG_FLAG9 0x0200
    351 #define DNSSEC_KEY_FLAG_FLAG10 0x0400
    352 #define DNSSEC_KEY_FLAG_FLAG11 0x0800
    353 
    354 #define DNSSEC_KEY_FLAG_SIG0 0x0000
    355 #define DNSSEC_KEY_FLAG_SIG1 0x1000
    356 #define DNSSEC_KEY_FLAG_SIG2 0x2000
    357 #define DNSSEC_KEY_FLAG_SIG3 0x3000
    358 #define DNSSEC_KEY_FLAG_SIG4 0x4000
    359 #define DNSSEC_KEY_FLAG_SIG5 0x5000
    360 #define DNSSEC_KEY_FLAG_SIG6 0x6000
    361 #define DNSSEC_KEY_FLAG_SIG7 0x7000
    362 #define DNSSEC_KEY_FLAG_SIG8 0x8000
    363 #define DNSSEC_KEY_FLAG_SIG9 0x9000
    364 #define DNSSEC_KEY_FLAG_SIG10 0xa000
    365 #define DNSSEC_KEY_FLAG_SIG11 0xb000
    366 #define DNSSEC_KEY_FLAG_SIG12 0xc000
    367 #define DNSSEC_KEY_FLAG_SIG13 0xd000
    368 #define DNSSEC_KEY_FLAG_SIG14 0xe000
    369 #define DNSSEC_KEY_FLAG_SIG15 0xf000
    370 
    371 #define DNS_TKEY_MODE_SERVER_ASSIGN 1
    372 #define DNS_TKEY_MODE_DIFFIE_HELLMAN 2
    373 #define DNS_TKEY_MODE_GSS 3
    374 #define DNS_TKEY_MODE_RESOLVER_ASSIGN 4
    375 
    376 #define DNS_WINS_FLAG_SCOPE (0x80000000)
    377 #define DNS_WINS_FLAG_LOCAL (0x00010000)
    378 
    379 #define IS_WORD_ALIGNED(p) (!((UINT_PTR)(p) & (UINT_PTR)1))
    380 #define IS_DWORD_ALIGNED(p) (!((UINT_PTR)(p) & (UINT_PTR)3))
    381 #define IS_QWORD_ALIGNED(p) (!((UINT_PTR)(p) & (UINT_PTR)7))
    382 
    383   typedef enum {
    384     DnsConfigPrimaryDomainName_W,
    385     DnsConfigPrimaryDomainName_A,
    386     DnsConfigPrimaryDomainName_UTF8,
    387     DnsConfigAdapterDomainName_W,
    388     DnsConfigAdapterDomainName_A,
    389     DnsConfigAdapterDomainName_UTF8,
    390     DnsConfigDnsServerList,
    391     DnsConfigSearchList,
    392     DnsConfigAdapterInfo,
    393     DnsConfigPrimaryHostNameRegistrationEnabled,
    394     DnsConfigAdapterHostNameRegistrationEnabled,
    395     DnsConfigAddressRegistrationMaxCount,
    396     DnsConfigHostName_W,
    397     DnsConfigHostName_A,
    398     DnsConfigHostName_UTF8,
    399     DnsConfigFullHostName_W,
    400     DnsConfigFullHostName_A,
    401     DnsConfigFullHostName_UTF8,
    402     DnsConfigNameServer
    403   } DNS_CONFIG_TYPE;
    404 
    405 #define DNS_CONFIG_FLAG_ALLOC (0x00000001)
    406 
    407   DNS_STATUS WINAPI DnsQueryConfig(DNS_CONFIG_TYPE Config,DWORD Flag,PWSTR pwsAdapterName,PVOID pReserved,PVOID pBuffer,PDWORD pBufferLength);
    408 
    409   typedef struct {
    410     IP4_ADDRESS IpAddress;
    411   } DNS_A_DATA,*PDNS_A_DATA;
    412 
    413   typedef struct {
    414     PWSTR pNameHost;
    415   } DNS_PTR_DATAW,*PDNS_PTR_DATAW;
    416 
    417   typedef struct {
    418     PSTR pNameHost;
    419   } DNS_PTR_DATAA,*PDNS_PTR_DATAA;
    420 
    421   typedef struct {
    422     PWSTR pNamePrimaryServer;
    423     PWSTR pNameAdministrator;
    424     DWORD dwSerialNo;
    425     DWORD dwRefresh;
    426     DWORD dwRetry;
    427     DWORD dwExpire;
    428     DWORD dwDefaultTtl;
    429   } DNS_SOA_DATAW,*PDNS_SOA_DATAW;
    430 
    431   typedef struct {
    432     PSTR pNamePrimaryServer;
    433     PSTR pNameAdministrator;
    434     DWORD dwSerialNo;
    435     DWORD dwRefresh;
    436     DWORD dwRetry;
    437     DWORD dwExpire;
    438     DWORD dwDefaultTtl;
    439   } DNS_SOA_DATAA,*PDNS_SOA_DATAA;
    440 
    441   typedef struct {
    442     PWSTR pNameMailbox;
    443     PWSTR pNameErrorsMailbox;
    444   } DNS_MINFO_DATAW,*PDNS_MINFO_DATAW;
    445 
    446   typedef struct {
    447     PSTR pNameMailbox;
    448     PSTR pNameErrorsMailbox;
    449   } DNS_MINFO_DATAA,*PDNS_MINFO_DATAA;
    450 
    451   typedef struct {
    452     PWSTR pNameExchange;
    453     WORD wPreference;
    454     WORD Pad;
    455   } DNS_MX_DATAW,*PDNS_MX_DATAW;
    456 
    457   typedef struct {
    458     PSTR pNameExchange;
    459     WORD wPreference;
    460     WORD Pad;
    461   } DNS_MX_DATAA,*PDNS_MX_DATAA;
    462 
    463   typedef struct {
    464     DWORD dwStringCount;
    465     PWSTR pStringArray[1];
    466   } DNS_TXT_DATAW,*PDNS_TXT_DATAW;
    467 
    468   typedef struct {
    469     DWORD dwStringCount;
    470     PSTR pStringArray[1];
    471   } DNS_TXT_DATAA,*PDNS_TXT_DATAA;
    472 
    473   typedef struct {
    474     DWORD dwByteCount;
    475     BYTE Data[1];
    476   } DNS_NULL_DATA,*PDNS_NULL_DATA;
    477 
    478   typedef struct {
    479     IP4_ADDRESS IpAddress;
    480     UCHAR chProtocol;
    481     BYTE BitMask[1];
    482   } DNS_WKS_DATA,*PDNS_WKS_DATA;
    483 
    484   typedef struct {
    485     IP6_ADDRESS Ip6Address;
    486   } DNS_AAAA_DATA,*PDNS_AAAA_DATA;
    487 
    488   typedef struct {
    489     WORD wTypeCovered;
    490     BYTE chAlgorithm;
    491     BYTE chLabelCount;
    492     DWORD dwOriginalTtl;
    493     DWORD dwExpiration;
    494     DWORD dwTimeSigned;
    495     WORD wKeyTag;
    496     WORD wSignatureLength;
    497     PWSTR pNameSigner;
    498     BYTE Signature[1];
    499   } DNS_SIG_DATAW, *PDNS_SIG_DATAW, DNS_RRSIG_DATAW, *PDNS_RRSIG_DATAW;
    500 
    501   typedef struct {
    502     WORD wTypeCovered;
    503     BYTE chAlgorithm;
    504     BYTE chLabelCount;
    505     DWORD dwOriginalTtl;
    506     DWORD dwExpiration;
    507     DWORD dwTimeSigned;
    508     WORD wKeyTag;
    509     WORD wSignatureLength;
    510     PSTR pNameSigner;
    511     BYTE Signature[1];
    512   } DNS_SIG_DATAA, *PDNS_SIG_DATAA, DNS_RRSIG_DATAA, *PDNS_RRSIG_DATAA;
    513 
    514   typedef struct {
    515     WORD wFlags;
    516     BYTE chProtocol;
    517     BYTE chAlgorithm;
    518     WORD wKeyLength;
    519     WORD wPad;
    520     BYTE Key[1];
    521   } DNS_KEY_DATA, *PDNS_KEY_DATA, DNS_DNSKEY_DATA, *PDNS_DNSKEY_DATA;
    522 
    523   typedef struct {
    524     DWORD dwByteCount;
    525     BYTE DHCID[1];
    526   } DNS_DHCID_DATA, *PDNS_DHCID_DATA;
    527 
    528   typedef struct {
    529     PWSTR pNextDomainName;
    530     WORD wTypeBitMapsLength;
    531     WORD wPad;
    532     BYTE TypeBitMaps[1];
    533   } DNS_NSEC_DATAW, *PDNS_NSEC_DATAW;
    534 
    535   typedef struct {
    536     PSTR pNextDomainName;
    537     WORD wTypeBitMapsLength;
    538     WORD wPad;
    539     BYTE TypeBitMaps[1];
    540   } DNS_NSEC_DATAA, *PDNS_NSEC_DATAA;
    541 
    542   typedef struct {
    543     BYTE chAlgorithm;
    544     BYTE bFlags;
    545     WORD wIterations;
    546     BYTE bSaltLength;
    547     BYTE bHashLength;
    548     WORD wTypeBitMapsLength;
    549     BYTE chData[1];
    550   } DNS_NSEC3_DATA, *PDNS_NSEC3_DATA;
    551 
    552   typedef struct {
    553     BYTE chAlgorithm;
    554     BYTE bFlags;
    555     WORD wIterations;
    556     BYTE bSaltLength;
    557     BYTE bPad[3];
    558     BYTE pbSalt[1];
    559   } DNS_NSEC3PARAM_DATA, *PDNS_NSEC3PARAM_DATA;
    560 
    561   typedef struct {
    562     BYTE bCertUsage;
    563     BYTE bSelector;
    564     BYTE bMatchingType;
    565     WORD bCertificateAssociationDataLength;
    566     BYTE bPad[3];
    567     BYTE bCertificateAssociationData[1];
    568   } DNS_TLSA_DATA, *PDNS_TLSA_DATA;
    569 
    570   typedef struct {
    571     WORD wKeyTag;
    572     BYTE chAlgorithm;
    573     BYTE chDigestType;
    574     WORD wDigestLength;
    575     WORD wPad;
    576     BYTE Digest[1];
    577   } DNS_DS_DATA, *PDNS_DS_DATA;
    578 
    579   typedef struct {
    580     WORD wDataLength;
    581     WORD wPad;
    582     BYTE Data[1];
    583   } DNS_OPT_DATA, *PDNS_OPT_DATA;
    584 
    585   typedef struct {
    586     WORD wVersion;
    587     WORD wSize;
    588     WORD wHorPrec;
    589     WORD wVerPrec;
    590     DWORD dwLatitude;
    591     DWORD dwLongitude;
    592     DWORD dwAltitude;
    593   } DNS_LOC_DATA,*PDNS_LOC_DATA;
    594 
    595   typedef struct {
    596     PWSTR pNameNext;
    597     WORD wNumTypes;
    598     WORD wTypes[1];
    599   } DNS_NXT_DATAW,*PDNS_NXT_DATAW;
    600 
    601   typedef struct {
    602     PSTR pNameNext;
    603     WORD wNumTypes;
    604     WORD wTypes[1];
    605   } DNS_NXT_DATAA,*PDNS_NXT_DATAA;
    606 
    607   typedef struct {
    608     PWSTR pNameTarget;
    609     WORD wPriority;
    610     WORD wWeight;
    611     WORD wPort;
    612     WORD Pad;
    613   } DNS_SRV_DATAW,*PDNS_SRV_DATAW;
    614 
    615   typedef struct {
    616     PSTR pNameTarget;
    617     WORD wPriority;
    618     WORD wWeight;
    619     WORD wPort;
    620     WORD Pad;
    621   } DNS_SRV_DATAA,*PDNS_SRV_DATAA;
    622 
    623   typedef struct {
    624     WORD wOrder;
    625     WORD wPreference;
    626     PWSTR pFlags;
    627     PWSTR pService;
    628     PWSTR pRegularExpression;
    629     PWSTR pReplacement;
    630   } DNS_NAPTR_DATAW, *PDNS_NAPTR_DATAW;
    631 
    632   typedef struct {
    633     WORD wOrder;
    634     WORD wPreference;
    635     PSTR pFlags;
    636     PSTR pService;
    637     PSTR pRegularExpression;
    638     PSTR pReplacement;
    639   } DNS_NAPTR_DATAA, *PDNS_NAPTR_DATAA;
    640 
    641   typedef struct {
    642     BYTE AddressType;
    643     BYTE Address[DNS_ATMA_MAX_ADDR_LENGTH ];
    644   } DNS_ATMA_DATA,*PDNS_ATMA_DATA;
    645 
    646   typedef struct {
    647     PWSTR pNameAlgorithm;
    648     PBYTE pAlgorithmPacket;
    649     PBYTE pKey;
    650     PBYTE pOtherData;
    651     DWORD dwCreateTime;
    652     DWORD dwExpireTime;
    653     WORD wMode;
    654     WORD wError;
    655     WORD wKeyLength;
    656     WORD wOtherLength;
    657     UCHAR cAlgNameLength;
    658     WINBOOL bPacketPointers;
    659   } DNS_TKEY_DATAW,*PDNS_TKEY_DATAW;
    660 
    661   typedef struct {
    662     PSTR pNameAlgorithm;
    663     PBYTE pAlgorithmPacket;
    664     PBYTE pKey;
    665     PBYTE pOtherData;
    666     DWORD dwCreateTime;
    667     DWORD dwExpireTime;
    668     WORD wMode;
    669     WORD wError;
    670     WORD wKeyLength;
    671     WORD wOtherLength;
    672     UCHAR cAlgNameLength;
    673     WINBOOL bPacketPointers;
    674   } DNS_TKEY_DATAA,*PDNS_TKEY_DATAA;
    675 
    676   typedef struct {
    677     PWSTR pNameAlgorithm;
    678     PBYTE pAlgorithmPacket;
    679     PBYTE pSignature;
    680     PBYTE pOtherData;
    681     LONGLONG i64CreateTime;
    682     WORD wFudgeTime;
    683     WORD wOriginalXid;
    684     WORD wError;
    685     WORD wSigLength;
    686     WORD wOtherLength;
    687     UCHAR cAlgNameLength;
    688     WINBOOL bPacketPointers;
    689   } DNS_TSIG_DATAW,*PDNS_TSIG_DATAW;
    690 
    691   typedef struct {
    692     PSTR pNameAlgorithm;
    693     PBYTE pAlgorithmPacket;
    694     PBYTE pSignature;
    695     PBYTE pOtherData;
    696     LONGLONG i64CreateTime;
    697     WORD wFudgeTime;
    698     WORD wOriginalXid;
    699     WORD wError;
    700     WORD wSigLength;
    701     WORD wOtherLength;
    702     UCHAR cAlgNameLength;
    703     WINBOOL bPacketPointers;
    704   } DNS_TSIG_DATAA,*PDNS_TSIG_DATAA;
    705 
    706   typedef struct {
    707     DWORD dwByteCount;
    708     BYTE bData[1];
    709   } DNS_UNKNOWN_DATA, *PDNS_UNKNOWN_DATA;
    710 
    711   typedef struct {
    712     DWORD dwMappingFlag;
    713     DWORD dwLookupTimeout;
    714     DWORD dwCacheTimeout;
    715     DWORD cWinsServerCount;
    716     IP4_ADDRESS WinsServers[1];
    717   } DNS_WINS_DATA,*PDNS_WINS_DATA;
    718 
    719   typedef struct {
    720     DWORD dwMappingFlag;
    721     DWORD dwLookupTimeout;
    722     DWORD dwCacheTimeout;
    723     PWSTR pNameResultDomain;
    724   } DNS_WINSR_DATAW,*PDNS_WINSR_DATAW;
    725 
    726   typedef struct {
    727     DWORD dwMappingFlag;
    728     DWORD dwLookupTimeout;
    729     DWORD dwCacheTimeout;
    730     PSTR pNameResultDomain;
    731   } DNS_WINSR_DATAA,*PDNS_WINSR_DATAA;
    732 
    733   __MINGW_TYPEDEF_AW(DNS_PTR_DATA)
    734   __MINGW_TYPEDEF_AW(PDNS_PTR_DATA)
    735   __MINGW_TYPEDEF_AW(DNS_SOA_DATA)
    736   __MINGW_TYPEDEF_AW(PDNS_SOA_DATA)
    737   __MINGW_TYPEDEF_AW(DNS_MINFO_DATA)
    738   __MINGW_TYPEDEF_AW(PDNS_MINFO_DATA)
    739   __MINGW_TYPEDEF_AW(DNS_MX_DATA)
    740   __MINGW_TYPEDEF_AW(PDNS_MX_DATA)
    741   __MINGW_TYPEDEF_AW(DNS_TXT_DATA)
    742   __MINGW_TYPEDEF_AW(PDNS_TXT_DATA)
    743   __MINGW_TYPEDEF_AW(DNS_SIG_DATA)
    744   __MINGW_TYPEDEF_AW(PDNS_SIG_DATA)
    745   __MINGW_TYPEDEF_AW(DNS_NXT_DATA)
    746   __MINGW_TYPEDEF_AW(PDNS_NXT_DATA)
    747   __MINGW_TYPEDEF_AW(DNS_SRV_DATA)
    748   __MINGW_TYPEDEF_AW(PDNS_SRV_DATA)
    749   __MINGW_TYPEDEF_AW(DNS_NAPTR_DATA)
    750   __MINGW_TYPEDEF_AW(PDNS_NAPTR_DATA)
    751   __MINGW_TYPEDEF_AW(DNS_RRSIG_DATA)
    752   __MINGW_TYPEDEF_AW(PDNS_RRSIG_DATA)
    753   __MINGW_TYPEDEF_AW(DNS_NSEC_DATA)
    754   __MINGW_TYPEDEF_AW(PDNS_NSEC_DATA)
    755   __MINGW_TYPEDEF_AW(DNS_TKEY_DATA)
    756   __MINGW_TYPEDEF_AW(PDNS_TKEY_DATA)
    757   __MINGW_TYPEDEF_AW(DNS_TSIG_DATA)
    758   __MINGW_TYPEDEF_AW(PDNS_TSIG_DATA)
    759   __MINGW_TYPEDEF_AW(DNS_WINSR_DATA)
    760   __MINGW_TYPEDEF_AW(PDNS_WINSR_DATA)
    761 
    762 #define DNS_TEXT_RECORD_LENGTH(StringCount) (FIELD_OFFSET(DNS_TXT_DATA,pStringArray) + ((StringCount) *sizeof(PCHAR)))
    763 #define DNS_NULL_RECORD_LENGTH(ByteCount) (FIELD_OFFSET(DNS_NULL_DATA,Data) + (ByteCount))
    764 #define DNS_WKS_RECORD_LENGTH(ByteCount) (FIELD_OFFSET(DNS_WKS_DATA,BitMask) + (ByteCount))
    765 #define DNS_WINS_RECORD_LENGTH(IpCount) (FIELD_OFFSET(DNS_WINS_DATA,WinsServers) + ((IpCount) *sizeof(IP4_ADDRESS)))
    766 #define DNS_KEY_RECORD_LENGTH(ByteCount) (FIELD_OFFSET(DNS_KEY_DATA,Key) + (ByteCount))
    767 #define DNS_SIG_RECORD_LENGTH(ByteCount) (FIELD_OFFSET(DNS_SIG_DATA,Signature) + (ByteCount))
    768 #define DNS_NSEC_RECORD_LENGTH(ByteCount) (FIELD_OFFSET(DNS_NSEC_DATA,TypeBitMaps) + (ByteCount))
    769 #define DNS_DS_RECORD_LENGTH(ByteCount) (FIELD_OFFSET(DNS_DS_DATA,Digest) + (ByteCount))
    770 #define DNS_OPT_RECORD_LENGTH(ByteCount) (FIELD_OFFSET(DNS_OPT_DATA,Data) + (ByteCount))
    771 #define DNS_DHCID_RECORD_LENGTH(ByteCount) (FIELD_OFFSET(DNS_DHCID_DATA,DHCID) + (ByteCount))
    772 #define DNS_NSEC3_RECORD_LENGTH(ByteCount) (FIELD_OFFSET(DNS_NSEC3_DATA,chData) + (ByteCount))
    773 #define DNS_NSEC3PARAM_RECORD_LENGTH(ByteCount) (FIELD_OFFSET(DNS_NSEC3PARAM_DATA,pbSalt) + (ByteCount))
    774 #define DNS_TLSA_RECORD_LENGTH(ByteCount) (FIELD_OFFSET(DNS_TLSA_DATA,bCertificateAssociationData) + (ByteCount))
    775 #define DNS_UNKNOWN_RECORD_LENGTH(ByteCount) (FIELD_OFFSET(DNS_UNKNOWN_DATA,bData) + (ByteCount))
    776 
    777   typedef struct _DnsRecordFlags {
    778     DWORD Section : 2;
    779     DWORD Delete : 1;
    780     DWORD CharSet : 2;
    781     DWORD Unused : 3;
    782     DWORD Reserved : 24;
    783   } DNS_RECORD_FLAGS;
    784 
    785   typedef enum _DnsSection {
    786     DnsSectionQuestion,DnsSectionAnswer,DnsSectionAuthority,DnsSectionAddtional
    787   } DNS_SECTION;
    788 
    789 #define DnsSectionZone DnsSectionQuestion
    790 #define DnsSectionPrereq DnsSectionAnswer
    791 #define DnsSectionUpdate DnsSectionAuthority
    792 
    793 #define DNSREC_SECTION (0x00000003)
    794 #define DNSREC_QUESTION (0x00000000)
    795 #define DNSREC_ANSWER (0x00000001)
    796 #define DNSREC_AUTHORITY (0x00000002)
    797 #define DNSREC_ADDITIONAL (0x00000003)
    798 
    799 #define DNSREC_ZONE (0x00000000)
    800 #define DNSREC_PREREQ (0x00000001)
    801 #define DNSREC_UPDATE (0x00000002)
    802 
    803 #define DNSREC_DELETE (0x00000004)
    804 #define DNSREC_NOEXIST (0x00000004)
    805 
    806   typedef struct _DnsRecordW {
    807     struct _DnsRecordW *pNext;
    808     PWSTR pName;
    809     WORD wType;
    810     WORD wDataLength;
    811     union {
    812       DWORD DW;
    813       DNS_RECORD_FLAGS S;
    814     } Flags;
    815     DWORD dwTtl;
    816     DWORD dwReserved;
    817     union {
    818       DNS_A_DATA A;
    819       DNS_SOA_DATAW SOA,Soa;
    820       DNS_PTR_DATAW PTR,Ptr,NS,Ns,CNAME,Cname,DNAME,Dname,MB,Mb,MD,Md,MF,Mf,MG,Mg,MR,Mr;
    821       DNS_MINFO_DATAW MINFO,Minfo,RP,Rp;
    822       DNS_MX_DATAW MX,Mx,AFSDB,Afsdb,RT,Rt;
    823       DNS_TXT_DATAW HINFO,Hinfo,ISDN,Isdn,TXT,Txt,X25;
    824       DNS_NULL_DATA Null;
    825       DNS_WKS_DATA WKS,Wks;
    826       DNS_AAAA_DATA AAAA;
    827       DNS_KEY_DATA KEY,Key;
    828       DNS_SIG_DATAW SIG,Sig;
    829       DNS_ATMA_DATA ATMA,Atma;
    830       DNS_NXT_DATAW NXT,Nxt;
    831       DNS_SRV_DATAW SRV,Srv;
    832       DNS_NAPTR_DATAW NAPTR,Naptr;
    833       DNS_OPT_DATA OPT,Opt;
    834       DNS_DS_DATA DS,Ds;
    835       DNS_RRSIG_DATAW RRSIG,Rrsig;
    836       DNS_NSEC_DATAW NSEC,Nsec;
    837       DNS_DNSKEY_DATA DNSKEY,Dnskey;
    838       DNS_TKEY_DATAW TKEY,Tkey;
    839       DNS_TSIG_DATAW TSIG,Tsig;
    840       DNS_WINS_DATA WINS,Wins;
    841       DNS_WINSR_DATAW WINSR,WinsR,NBSTAT,Nbstat;
    842       DNS_DHCID_DATA DHCID;
    843       DNS_NSEC3_DATA NSEC3,Nsec3;
    844       DNS_NSEC3PARAM_DATA NSEC3PARAM,Nsec3Param;
    845       DNS_TLSA_DATA TLSA,Tlsa;
    846       DNS_UNKNOWN_DATA UNKNOWN,Unknown;
    847       PBYTE pDataPtr;
    848     } Data;
    849   } DNS_RECORDW,*PDNS_RECORDW;
    850 
    851   typedef struct _DnsRecordOptW {
    852     struct _DnsRecordW *pNext;
    853     PWSTR pName;
    854     WORD wType;
    855     WORD wDataLength;
    856     union {
    857       DWORD DW;
    858       DNS_RECORD_FLAGS S;
    859     } Flags;
    860     DNS_HEADER_EXT ExtHeader;
    861     WORD wPayloadSize;
    862     WORD wReserved;
    863     union {
    864       DNS_OPT_DATA OPT,Opt;
    865     } Data;
    866   } DNS_RECORD_OPTW, *PDNS_RECORD_OPTW;
    867 
    868   typedef struct _DnsRecordA {
    869     struct _DnsRecordA *pNext;
    870     PSTR pName;
    871     WORD wType;
    872     WORD wDataLength;
    873     union {
    874       DWORD DW;
    875       DNS_RECORD_FLAGS S;
    876     } Flags;
    877     DWORD dwTtl;
    878     DWORD dwReserved;
    879     union {
    880       DNS_A_DATA A;
    881       DNS_SOA_DATAA SOA,Soa;
    882       DNS_PTR_DATAA PTR,Ptr,NS,Ns,CNAME,Cname,DNAME,Dname,MB,Mb,MD,Md,MF,Mf,MG,Mg,MR,Mr;
    883       DNS_MINFO_DATAA MINFO,Minfo,RP,Rp;
    884       DNS_MX_DATAA MX,Mx,AFSDB,Afsdb,RT,Rt;
    885       DNS_TXT_DATAA HINFO,Hinfo,ISDN,Isdn,TXT,Txt,X25;
    886       DNS_NULL_DATA Null;
    887       DNS_WKS_DATA WKS,Wks;
    888       DNS_AAAA_DATA AAAA;
    889       DNS_KEY_DATA KEY,Key;
    890       DNS_SIG_DATAA SIG,Sig;
    891       DNS_ATMA_DATA ATMA,Atma;
    892       DNS_NXT_DATAA NXT,Nxt;
    893       DNS_SRV_DATAA SRV,Srv;
    894       DNS_NAPTR_DATAA NAPTR,Naptr;
    895       DNS_OPT_DATA OPT,Opt;
    896       DNS_DS_DATA DS,Ds;
    897       DNS_RRSIG_DATAA RRSIG,Rrsig;
    898       DNS_NSEC_DATAA NSEC,Nsec;
    899       DNS_DNSKEY_DATA DNSKEY,Dnskey;
    900       DNS_TKEY_DATAA TKEY,Tkey;
    901       DNS_TSIG_DATAA TSIG,Tsig;
    902       DNS_WINS_DATA WINS,Wins;
    903       DNS_WINSR_DATAA WINSR,WinsR,NBSTAT,Nbstat;
    904       DNS_DHCID_DATA DHCID;
    905       DNS_NSEC3_DATA NSEC3,Nsec3;
    906       DNS_NSEC3PARAM_DATA NSEC3PARAM,Nsec3Param;
    907       DNS_TLSA_DATA TLSA,Tlsa;
    908       DNS_UNKNOWN_DATA UNKNOWN,Unknown;
    909       PBYTE pDataPtr;
    910     } Data;
    911   } DNS_RECORDA,*PDNS_RECORDA;
    912 
    913   typedef struct _DnsRecordOptA {
    914     struct _DnsRecordA *pNext;
    915     PSTR pName;
    916     WORD wType;
    917     WORD wDataLength;
    918     union {
    919       DWORD DW;
    920       DNS_RECORD_FLAGS S;
    921     } Flags;
    922     DNS_HEADER_EXT ExtHeader;
    923     WORD wPayloadSize;
    924     WORD wReserved;
    925     union {
    926       DNS_OPT_DATA OPT, Opt;
    927     } Data;
    928   } DNS_RECORD_OPTA, *PDNS_RECORD_OPTA;
    929 
    930 #ifdef UNICODE
    931   typedef DNS_RECORDW DNS_RECORD, *PDNS_RECORD;
    932   typedef DNS_RECORD_OPTW DNS_RECORD_OPT, *PDNS_RECORD_OPT;
    933 #else
    934   typedef DNS_RECORDA DNS_RECORD, *PDNS_RECORD;
    935   typedef DNS_RECORD_OPTA DNS_RECORD_OPT, *PDNS_RECORD_OPT;
    936 #endif
    937 
    938 #define DNS_RECORD_FIXED_SIZE FIELD_OFFSET(DNS_RECORD,Data)
    939 #define SIZEOF_DNS_RECORD_HEADER DNS_RECORD_FIXED_SIZE
    940 
    941   typedef struct _DnsRRSet {
    942     PDNS_RECORD pFirstRR;
    943     PDNS_RECORD pLastRR;
    944   } DNS_RRSET,*PDNS_RRSET;
    945 
    946 #define DNS_RRSET_INIT(rrset) { PDNS_RRSET _prrset = &(rrset); _prrset->pFirstRR = NULL; _prrset->pLastRR = (PDNS_RECORD) &_prrset->pFirstRR; }
    947 #define DNS_RRSET_ADD(rrset,pnewRR) { PDNS_RRSET _prrset = &(rrset); PDNS_RECORD _prrnew = (pnewRR); _prrset->pLastRR->pNext = _prrnew; _prrset->pLastRR = _prrnew; }
    948 #define DNS_RRSET_TERMINATE(rrset) { PDNS_RRSET _prrset = &(rrset); _prrset->pLastRR->pNext = NULL; }
    949 
    950   typedef VOID (WINAPI *DNS_PROXY_COMPLETION_ROUTINE)(void *completionContext,DNS_STATUS status);
    951 
    952   typedef enum DNS_PROXY_INFORMATION_TYPE {
    953     DNS_PROXY_INFORMATION_DIRECT,
    954     DNS_PROXY_INFORMATION_DEFAULT_SETTINGS,
    955     DNS_PROXY_INFORMATION_PROXY_NAME,
    956     DNS_PROXY_INFORMATION_DOES_NOT_EXIST
    957   } DNS_PROXY_INFORMATION_TYPE;
    958 
    959   typedef struct DNS_PROXY_INFORMATION {
    960     ULONG version;
    961     DNS_PROXY_INFORMATION_TYPE proxyInformationType;
    962     PWSTR proxyName;
    963   } DNS_PROXY_INFORMATION;
    964 
    965   typedef enum _DNS_CHARSET {
    966     DnsCharSetUnknown,DnsCharSetUnicode,DnsCharSetUtf8,DnsCharSetAnsi
    967   } DNS_CHARSET;
    968 
    969   PDNS_RECORD WINAPI DnsRecordCopyEx(PDNS_RECORD pRecord,DNS_CHARSET CharSetIn,DNS_CHARSET CharSetOut);
    970   PDNS_RECORD WINAPI DnsRecordSetCopyEx(PDNS_RECORD pRecordSet,DNS_CHARSET CharSetIn,DNS_CHARSET CharSetOut);
    971 
    972 #if defined(UNICODE)
    973 #define DnsRecordCopy(pRR) DnsRecordCopyEx((pRR),DnsCharSetUnicode,DnsCharSetUnicode)
    974 #define DnsRecordSetCopy(pRR) DnsRecordSetCopyEx((pRR),DnsCharSetUnicode,DnsCharSetUnicode)
    975 #else
    976 #define DnsRecordCopy(pRR) DnsRecordCopyEx((pRR),DnsCharSetAnsi,DnsCharSetAnsi)
    977 #define DnsRecordSetCopy(pRR) DnsRecordSetCopyEx((pRR),DnsCharSetAnsi,DnsCharSetAnsi)
    978 #endif
    979 
    980   WINBOOL WINAPI DnsRecordCompare(PDNS_RECORD pRecord1,PDNS_RECORD pRecord2);
    981   WINBOOL WINAPI DnsRecordSetCompare(PDNS_RECORD pRR1,PDNS_RECORD pRR2,PDNS_RECORD *ppDiff1,PDNS_RECORD *ppDiff2);
    982   PDNS_RECORD DnsRecordSetDetach(PDNS_RECORD pRecordList);
    983 
    984   typedef enum {
    985     DnsFreeFlat = 0,DnsFreeRecordList,DnsFreeParsedMessageFields
    986   } DNS_FREE_TYPE;
    987 
    988   VOID WINAPI DnsFree(PVOID pData,DNS_FREE_TYPE FreeType);
    989 
    990 #define DnsFreeRecordListDeep DnsFreeRecordList
    991 
    992 #if(_WIN32_WINNT >= 0x0501)
    993   #define DnsRecordListFree(p,t)  DnsFree(p,DnsFreeRecordList)
    994 #else
    995   VOID WINAPI DnsRecordListFree(PDNS_RECORD pRecordList,DNS_FREE_TYPE FreeType);
    996 #endif /* _WIN32_WINNT >= 0x0501 */
    997 
    998 #define DNS_QUERY_STANDARD 0x00000000
    999 #define DNS_QUERY_ACCEPT_TRUNCATED_RESPONSE 0x00000001
   1000 #define DNS_QUERY_USE_TCP_ONLY 0x00000002
   1001 #define DNS_QUERY_NO_RECURSION 0x00000004
   1002 #define DNS_QUERY_BYPASS_CACHE 0x00000008
   1003 #define DNS_QUERY_NO_WIRE_QUERY 0x00000010
   1004 #define DNS_QUERY_NO_LOCAL_NAME 0x00000020
   1005 #define DNS_QUERY_NO_HOSTS_FILE 0x00000040
   1006 #define DNS_QUERY_NO_NETBT 0x00000080
   1007 #define DNS_QUERY_WIRE_ONLY 0x00000100
   1008 #define DNS_QUERY_RETURN_MESSAGE 0x00000200
   1009 #define DNS_QUERY_MULTICAST_ONLY 0x00000400
   1010 #define DNS_QUERY_NO_MULTICAST 0x00000800
   1011 #define DNS_QUERY_TREAT_AS_FQDN 0x00001000
   1012 #define DNS_QUERY_APPEND_MULTILABEL 0x00800000
   1013 #define DNS_QUERY_ADDRCONFIG 0x00002000
   1014 #define DNS_QUERY_DUAL_ADDR 0x00004000
   1015 #define DNS_QUERY_DONT_RESET_TTL_VALUES 0x00100000
   1016 #define DNS_QUERY_DISABLE_IDN_ENCODING 0x00200000
   1017 #define DNS_QUERY_APPEND_MULTILABEL 0x00800000
   1018 #define DNS_QUERY_DNSSEC_OK 0x01000000
   1019 #define DNS_QUERY_DNSSEC_CHECKING_DISABLED 0x02000000
   1020 #define DNS_QUERY_RESERVED 0xf0000000
   1021 #define DNS_QUERY_CACHE_ONLY DNS_QUERY_NO_WIRE_QUERY
   1022 
   1023   DNS_STATUS WINAPI DnsQuery_A(PCSTR pszName,WORD wType,DWORD Options,PIP4_ARRAY aipServers,PDNS_RECORD *ppQueryResults,PVOID *pReserved);
   1024   DNS_STATUS WINAPI DnsQuery_UTF8(PCSTR pszName,WORD wType,DWORD Options,PIP4_ARRAY aipServers,PDNS_RECORDA *ppQueryResults,PVOID *pReserved);
   1025   DNS_STATUS WINAPI DnsQuery_W(PCWSTR pszName,WORD wType,DWORD Options,PIP4_ARRAY aipServers,PDNS_RECORD *ppQueryResults,PVOID *pReserved);
   1026 
   1027 #define DnsQuery __MINGW_NAME_UAW(DnsQuery)
   1028 
   1029 #if !defined (USE_PRIVATE_DNS_ADDR) || defined (MIDL_PASS) || defined (__WIDL__)
   1030 #define DNS_QUERY_REQUEST_VERSION1 0x1
   1031 #define DNS_QUERY_REQUEST_VERSION2 0x2
   1032 #endif
   1033 
   1034 #define DNS_QUERY_RESULTS_VERSION1 0x1
   1035 
   1036   typedef struct _DNS_QUERY_RESULT {
   1037     ULONG Version;
   1038     DNS_STATUS QueryStatus;
   1039     ULONG64 QueryOptions;
   1040     PDNS_RECORD pQueryRecords;
   1041     PVOID Reserved;
   1042   } DNS_QUERY_RESULT, *PDNS_QUERY_RESULT;
   1043 
   1044   typedef VOID WINAPI DNS_QUERY_COMPLETION_ROUTINE(PVOID pQueryContext,PDNS_QUERY_RESULT pQueryResults);
   1045   typedef DNS_QUERY_COMPLETION_ROUTINE *PDNS_QUERY_COMPLETION_ROUTINE;
   1046 
   1047 #define DNS_UPDATE_SECURITY_USE_DEFAULT 0x00000000
   1048 #define DNS_UPDATE_SECURITY_OFF 0x00000010
   1049 #define DNS_UPDATE_SECURITY_ON 0x00000020
   1050 #define DNS_UPDATE_SECURITY_ONLY 0x00000100
   1051 #define DNS_UPDATE_CACHE_SECURITY_CONTEXT 0x00000200
   1052 #define DNS_UPDATE_TEST_USE_LOCAL_SYS_ACCT 0x00000400
   1053 #define DNS_UPDATE_FORCE_SECURITY_NEGO 0x00000800
   1054 #define DNS_UPDATE_TRY_ALL_MASTER_SERVERS 0x00001000
   1055 #define DNS_UPDATE_SKIP_NO_UPDATE_ADAPTERS 0x00002000
   1056 #define DNS_UPDATE_REMOTE_SERVER 0x00004000
   1057 #define DNS_UPDATE_RESERVED 0xffff0000
   1058 
   1059 #define DnsAcquireContextHandle __MINGW_NAME_UAW(DnsAcquireContextHandle)
   1060 #define DnsModifyRecordsInSet __MINGW_NAME_UAW(DnsModifyRecordsInSet)
   1061 #define DnsReplaceRecordSet __MINGW_NAME_AW(DnsReplaceRecordSet)
   1062 #define DnsValidateName(p,f) __MINGW_NAME_UAW(DnsValidateName)((p),(f))
   1063 #define DnsNameCompare(n1,n2) __MINGW_NAME_UAW(DnsNameCompare)((n1),(n2))
   1064 
   1065   DNS_STATUS WINAPI DnsAcquireContextHandle_W(DWORD CredentialFlags,PVOID pCredentials,PHANDLE pContextHandle);
   1066   DNS_STATUS WINAPI DnsAcquireContextHandle_A(DWORD CredentialFlags,PVOID pCredentials,PHANDLE pContextHandle);
   1067   VOID WINAPI DnsReleaseContextHandle(HANDLE hContext);
   1068   DNS_STATUS WINAPI DnsModifyRecordsInSet_W(PDNS_RECORD pAddRecords,PDNS_RECORD pDeleteRecords,DWORD Options,HANDLE hContext,PIP4_ARRAY pServerList,PVOID pReserved);
   1069   DNS_STATUS WINAPI DnsModifyRecordsInSet_A(PDNS_RECORD pAddRecords,PDNS_RECORD pDeleteRecords,DWORD Options,HANDLE hContext,PIP4_ARRAY pServerList,PVOID pReserved);
   1070   DNS_STATUS WINAPI DnsModifyRecordsInSet_UTF8(PDNS_RECORDA pAddRecords,PDNS_RECORDA pDeleteRecords,DWORD Options,HANDLE hContext,PIP4_ARRAY pServerList,PVOID pReserved);
   1071   DNS_STATUS WINAPI DnsReplaceRecordSetW(PDNS_RECORD pNewSet,DWORD Options,HANDLE hContext,PIP4_ARRAY pServerList,PVOID pReserved);
   1072   DNS_STATUS WINAPI DnsReplaceRecordSetA(PDNS_RECORD pNewSet,DWORD Options,HANDLE hContext,PIP4_ARRAY pServerList,PVOID pReserved);
   1073   DNS_STATUS WINAPI DnsReplaceRecordSetUTF8(PDNS_RECORDA pNewSet,DWORD Options,HANDLE hContext,PIP4_ARRAY pServerList,PVOID pReserved);
   1074 
   1075   typedef enum _DNS_NAME_FORMAT {
   1076     DnsNameDomain,
   1077     DnsNameDomainLabel,
   1078     DnsNameHostnameFull,
   1079     DnsNameHostnameLabel,
   1080     DnsNameWildcard,
   1081     DnsNameSrvRecord,
   1082     DnsNameValidateTld
   1083   } DNS_NAME_FORMAT;
   1084 
   1085   DNS_STATUS DnsValidateName_UTF8(LPCSTR pszName,DNS_NAME_FORMAT Format);
   1086   DNS_STATUS DnsValidateName_W(LPCWSTR pwszName,DNS_NAME_FORMAT Format);
   1087   DNS_STATUS DnsValidateName_A(LPCSTR pszName,DNS_NAME_FORMAT Format);
   1088 
   1089 #define DNS_VALSVR_ERROR_INVALID_ADDR 0x01
   1090 #define DNS_VALSVR_ERROR_INVALID_NAME 0x02
   1091 #define DNS_VALSVR_ERROR_UNREACHABLE 0x03
   1092 #define DNS_VALSVR_ERROR_NO_RESPONSE 0x04
   1093 #define DNS_VALSVR_ERROR_NO_AUTH 0x05
   1094 #define DNS_VALSVR_ERROR_REFUSED 0x06
   1095 
   1096 #define DNS_VALSVR_ERROR_NO_TCP 0x10
   1097 #define DNS_VALSVR_ERROR_UNKNOWN 0xFF
   1098 
   1099 #ifdef _WS2DEF_
   1100   DNS_STATUS DnsValidateServerStatus(PSOCKADDR server,PCWSTR queryName,PDWORD serverStatus);
   1101 #endif
   1102 
   1103   WINBOOL WINAPI DnsNameCompare_A(LPSTR pName1,LPSTR pName2);
   1104   WINBOOL WINAPI DnsNameCompare_W(LPWSTR pName1,LPWSTR pName2);
   1105 
   1106   typedef struct _DNS_MESSAGE_BUFFER {
   1107     DNS_HEADER MessageHead;
   1108     CHAR MessageBody[1];
   1109   } DNS_MESSAGE_BUFFER,*PDNS_MESSAGE_BUFFER;
   1110 
   1111   WINBOOL WINAPI DnsWriteQuestionToBuffer_W(PDNS_MESSAGE_BUFFER pDnsBuffer,PDWORD pdwBufferSize,LPWSTR pszName,WORD wType,WORD Xid,WINBOOL fRecursionDesired);
   1112   WINBOOL WINAPI DnsWriteQuestionToBuffer_UTF8(PDNS_MESSAGE_BUFFER pDnsBuffer,LPDWORD pdwBufferSize,LPSTR pszName,WORD wType,WORD Xid,WINBOOL fRecursionDesired);
   1113   DNS_STATUS WINAPI DnsExtractRecordsFromMessage_W(PDNS_MESSAGE_BUFFER pDnsBuffer,WORD wMessageLength,PDNS_RECORD *ppRecord);
   1114   DNS_STATUS WINAPI DnsExtractRecordsFromMessage_UTF8(PDNS_MESSAGE_BUFFER pDnsBuffer,WORD wMessageLength,PDNS_RECORDA *ppRecord);
   1115 
   1116   DWORD WINAPI DnsGetProxyInformation(PCWSTR hostName,DNS_PROXY_INFORMATION *proxyInformation,DNS_PROXY_INFORMATION *defaultProxyInformation,DNS_PROXY_COMPLETION_ROUTINE completionRoutine,void *completionContext);
   1117   VOID WINAPI DnsFreeProxyName(PWSTR proxyName);
   1118 
   1119 #define DNS_CONNECTION_NAME_MAX_LENGTH 64
   1120 #define DNS_CONNECTION_PROXY_INFO_CURRENT_VERSION 1
   1121 #define DNS_CONNECTION_PROXY_INFO_SERVER_MAX_LENGTH 256
   1122 #define DNS_CONNECTION_PROXY_INFO_FRIENDLY_NAME_MAX_LENGTH 64
   1123 #define DNS_CONNECTION_PROXY_INFO_USERNAME_MAX_LENGTH 128
   1124 #define DNS_CONNECTION_PROXY_INFO_PASSWORD_MAX_LENGTH 128
   1125 #define DNS_CONNECTION_PROXY_INFO_EXCEPTION_MAX_LENGTH 1024
   1126 #define DNS_CONNECTION_PROXY_INFO_EXTRA_INFO_MAX_LENGTH 1024
   1127 
   1128   typedef enum _DNS_CONNECTION_PROXY_TYPE {
   1129     DNS_CONNECTION_PROXY_TYPE_NULL = 0,
   1130     DNS_CONNECTION_PROXY_TYPE_HTTP = 1,
   1131     DNS_CONNECTION_PROXY_TYPE_WAP = 2,
   1132     DNS_CONNECTION_PROXY_TYPE_SOCKS4 = 4,
   1133     DNS_CONNECTION_PROXY_TYPE_SOCKS5 = 5
   1134   } DNS_CONNECTION_PROXY_TYPE;
   1135 
   1136   typedef enum _DNS_CONNECTION_PROXY_INFO_SWITCH {
   1137     DNS_CONNECTION_PROXY_INFO_SWITCH_CONFIG = 0,
   1138     DNS_CONNECTION_PROXY_INFO_SWITCH_SCRIPT,
   1139     DNS_CONNECTION_PROXY_INFO_SWITCH_WPAD
   1140   } DNS_CONNECTION_PROXY_INFO_SWITCH;
   1141 
   1142 #define DNS_CONNECTION_PROXY_INFO_FLAG_DISABLED 0x1
   1143 #define DNS_CONNECTION_PROXY_INFO_FLAG_BYPASSLOCAL 0x2
   1144 
   1145   struct _DNS_CONNECTION_PROXY_INFO_CONFIG {
   1146     WCHAR *pwszServer;
   1147     WCHAR *pwszUsername;
   1148     WCHAR *pwszPassword;
   1149     WCHAR *pwszException;
   1150     WCHAR *pwszExtraInfo;
   1151     WORD Port;
   1152   };
   1153 
   1154   struct _DNS_CONNECTION_PROXY_INFO_SCRIPT {
   1155     WCHAR *pwszScript;
   1156     WCHAR *pwszUsername;
   1157     WCHAR *pwszPassword;
   1158   };
   1159 
   1160   typedef struct _DNS_CONNECTION_PROXY_INFO {
   1161     DWORD Version;
   1162     WCHAR *pwszFriendlyName;
   1163     DWORD Flags;
   1164     DNS_CONNECTION_PROXY_INFO_SWITCH Switch;
   1165     __C89_NAMELESS union {
   1166       struct _DNS_CONNECTION_PROXY_INFO_CONFIG Config;
   1167       struct _DNS_CONNECTION_PROXY_INFO_SCRIPT Script;
   1168     };
   1169   } DNS_CONNECTION_PROXY_INFO, *PDNS_CONNECTION_PROXY_INFO;
   1170 
   1171   typedef struct _DNS_CONNECTION_PROXY_INFO_EX {
   1172     DNS_CONNECTION_PROXY_INFO ProxyInfo;
   1173     DWORD dwInterfaceIndex;
   1174     WCHAR *pwszConnectionName;
   1175     WINBOOL fDirectConfiguration;
   1176     HANDLE hConnection;
   1177   } DNS_CONNECTION_PROXY_INFO_EX, *PDNS_CONNECTION_PROXY_INFO_EX;
   1178 
   1179   typedef struct _DNS_CONNECTION_PROXY_ELEMENT {
   1180     DNS_CONNECTION_PROXY_TYPE Type;
   1181     DNS_CONNECTION_PROXY_INFO Info;
   1182   } DNS_CONNECTION_PROXY_ELEMENT;
   1183 
   1184   typedef struct _DNS_CONNECTION_PROXY_LIST {
   1185     DWORD cProxies;
   1186     DNS_CONNECTION_PROXY_ELEMENT *pProxies;
   1187   } DNS_CONNECTION_PROXY_LIST;
   1188 
   1189   typedef struct _DNS_CONNECTION_NAME {
   1190     WCHAR wszName[DNS_CONNECTION_NAME_MAX_LENGTH + 1];
   1191   } DNS_CONNECTION_NAME;
   1192 
   1193   typedef struct _DNS_CONNECTION_NAME_LIST {
   1194     DWORD cNames;
   1195     DNS_CONNECTION_NAME *pNames;
   1196   } DNS_CONNECTION_NAME_LIST;
   1197 
   1198   DWORD DnsConnectionGetProxyInfoForHostUrl(PCWSTR pwszHostUrl,BYTE *pSelectionContext,DWORD dwSelectionContextLength,DWORD dwExplicitInterfaceIndex,DNS_CONNECTION_PROXY_INFO_EX *pProxyInfoEx);
   1199   VOID DnsConnectionFreeProxyInfoEx(DNS_CONNECTION_PROXY_INFO_EX *pProxyInfoEx);
   1200   DWORD DnsConnectionGetProxyInfo(PCWSTR pwszConnectionName,DNS_CONNECTION_PROXY_TYPE Type,DNS_CONNECTION_PROXY_INFO *pProxyInfo);
   1201   VOID DnsConnectionFreeProxyInfo(DNS_CONNECTION_PROXY_INFO *pProxyInfo);
   1202   DWORD DnsConnectionSetProxyInfo(PCWSTR pwszConnectionName,DNS_CONNECTION_PROXY_TYPE Type,const DNS_CONNECTION_PROXY_INFO *pProxyInfo);
   1203   DWORD DnsConnectionDeleteProxyInfo(PCWSTR pwszConnectionName,DNS_CONNECTION_PROXY_TYPE Type);
   1204   DWORD DnsConnectionGetProxyList(PCWSTR pwszConnectionName,DNS_CONNECTION_PROXY_LIST *pProxyList);
   1205   VOID DnsConnectionFreeProxyList(DNS_CONNECTION_PROXY_LIST *pProxyList);
   1206   DWORD DnsConnectionGetNameList(DNS_CONNECTION_NAME_LIST *pNameList);
   1207   VOID DnsConnectionFreeNameList(DNS_CONNECTION_NAME_LIST *pNameList);
   1208 
   1209   typedef struct _DNS_CONNECTION_IFINDEX_ENTRY {
   1210     PCWSTR pwszConnectionName;
   1211     DWORD dwIfIndex;
   1212   } DNS_CONNECTION_IFINDEX_ENTRY;
   1213 
   1214   typedef struct _DNS_CONNECTION_IFINDEX_LIST {
   1215     DNS_CONNECTION_IFINDEX_ENTRY *pConnectionIfIndexEntries;
   1216     DWORD nEntries;
   1217   } DNS_CONNECTION_IFINDEX_LIST;
   1218 
   1219   DWORD DnsConnectionUpdateIfIndexTable(DNS_CONNECTION_IFINDEX_LIST *pConnectionIfIndexEntries);
   1220 
   1221 #define DNS_CONNECTION_POLICY_ENTRY_ONDEMAND 0x00000001
   1222 
   1223   typedef struct _DNS_CONNECTION_POLICY_ENTRY {
   1224     PCWSTR pwszHost;
   1225     PCWSTR pwszAppId;
   1226     DWORD cbAppSid;
   1227     PBYTE pbAppSid;
   1228     DWORD nConnections;
   1229     PCWSTR *ppwszConnections;
   1230     DWORD dwPolicyEntryFlags;
   1231   } DNS_CONNECTION_POLICY_ENTRY, *PDNS_CONNECTION_POLICY_ENTRY;
   1232 
   1233   typedef struct _DNS_CONNECTION_POLICY_ENTRY_LIST {
   1234     DNS_CONNECTION_POLICY_ENTRY *pPolicyEntries;
   1235     DWORD nEntries;
   1236   } DNS_CONNECTION_POLICY_ENTRY_LIST;
   1237 
   1238   typedef enum {
   1239     TAG_DNS_CONNECTION_POLICY_TAG_DEFAULT = 0,
   1240     TAG_DNS_CONNECTION_POLICY_TAG_CONNECTION_MANAGER,
   1241     TAG_DNS_CONNECTION_POLICY_TAG_WWWPT
   1242   } DNS_CONNECTION_POLICY_TAG;
   1243 
   1244   DWORD DnsConnectionSetPolicyEntries(DNS_CONNECTION_POLICY_TAG PolicyEntryTag,DNS_CONNECTION_POLICY_ENTRY_LIST *pPolicyEntryList);
   1245   DWORD DnsConnectionDeletePolicyEntries(DNS_CONNECTION_POLICY_TAG PolicyEntryTag);
   1246 
   1247   typedef struct _DNS_SERVICE_INSTANCE {
   1248     LPWSTR pszInstanceName;
   1249     LPWSTR pszHostName;
   1250     IP4_ADDRESS *ip4Address;
   1251     IP6_ADDRESS *ip6Address;
   1252     WORD wPort;
   1253     WORD wPriority;
   1254     WORD wWeight;
   1255     DWORD dwPropertyCount;
   1256     PWSTR *keys;
   1257     PWSTR *values;
   1258     DWORD dwInterfaceIndex;
   1259   } DNS_SERVICE_INSTANCE, *PDNS_SERVICE_INSTANCE;
   1260 
   1261   PDNS_SERVICE_INSTANCE WINAPI DnsServiceConstructInstance(PCWSTR pServiceName,PCWSTR pHostName,PIP4_ADDRESS pIp4,PIP6_ADDRESS pIp6,WORD wPort,WORD wPriority,WORD wWeight,DWORD dwPropertiesCount,PCWSTR *keys,PCWSTR *values);
   1262   PDNS_SERVICE_INSTANCE WINAPI DnsServiceCopyInstance(PDNS_SERVICE_INSTANCE pOrig);
   1263   VOID WINAPI DnsServiceFreeInstance(PDNS_SERVICE_INSTANCE pInstance);
   1264 
   1265   typedef struct _DNS_SERVICE_CANCEL {
   1266     PVOID reserved;
   1267   } DNS_SERVICE_CANCEL, *PDNS_SERVICE_CANCEL;
   1268 
   1269   typedef VOID WINAPI DNS_SERVICE_BROWSE_CALLBACK(DWORD Status,PVOID pQueryContext,PDNS_RECORD pDnsRecord);
   1270   typedef DNS_SERVICE_BROWSE_CALLBACK *PDNS_SERVICE_BROWSE_CALLBACK;
   1271 
   1272   typedef struct _DNS_SERVICE_BROWSE_REQUEST {
   1273     ULONG Version;
   1274     ULONG InterfaceIndex;
   1275     PCWSTR QueryName;
   1276     __C89_NAMELESS union {
   1277       PDNS_SERVICE_BROWSE_CALLBACK pBrowseCallback;
   1278       DNS_QUERY_COMPLETION_ROUTINE *pBrowseCallbackV2;
   1279     };
   1280     PVOID pQueryContext;
   1281   } DNS_SERVICE_BROWSE_REQUEST, *PDNS_SERVICE_BROWSE_REQUEST;
   1282 
   1283   DNS_STATUS WINAPI DnsServiceBrowse(PDNS_SERVICE_BROWSE_REQUEST pRequest,PDNS_SERVICE_CANCEL pCancel);
   1284   DNS_STATUS WINAPI DnsServiceBrowseCancel(PDNS_SERVICE_CANCEL pCancelHandle);
   1285 
   1286   typedef VOID WINAPI DNS_SERVICE_RESOLVE_COMPLETE(DWORD Status,PVOID pQueryContext,PDNS_SERVICE_INSTANCE pInstance);
   1287   typedef DNS_SERVICE_RESOLVE_COMPLETE *PDNS_SERVICE_RESOLVE_COMPLETE;
   1288 
   1289   typedef struct _DNS_SERVICE_RESOLVE_REQUEST{
   1290     ULONG Version;
   1291     ULONG InterfaceIndex;
   1292     PWSTR QueryName;
   1293     PDNS_SERVICE_RESOLVE_COMPLETE pResolveCompletionCallback;
   1294     PVOID pQueryContext;
   1295   } DNS_SERVICE_RESOLVE_REQUEST, *PDNS_SERVICE_RESOLVE_REQUEST;
   1296 
   1297   DNS_STATUS WINAPI DnsServiceResolve(PDNS_SERVICE_RESOLVE_REQUEST pRequest,PDNS_SERVICE_CANCEL pCancel);
   1298   DNS_STATUS WINAPI DnsServiceResolveCancel(PDNS_SERVICE_CANCEL pCancelHandle);
   1299 
   1300   typedef VOID WINAPI DNS_SERVICE_REGISTER_COMPLETE(DWORD Status,PVOID pQueryContext,PDNS_SERVICE_INSTANCE pInstance);
   1301   typedef DNS_SERVICE_REGISTER_COMPLETE *PDNS_SERVICE_REGISTER_COMPLETE;
   1302 
   1303   typedef struct _DNS_SERVICE_REGISTER_REQUEST{
   1304     ULONG Version;
   1305     ULONG   InterfaceIndex;
   1306     PDNS_SERVICE_INSTANCE pServiceInstance;
   1307     PDNS_SERVICE_REGISTER_COMPLETE pRegisterCompletionCallback;
   1308     PVOID pQueryContext;
   1309     HANDLE hCredentials;
   1310     WINBOOL unicastEnabled;
   1311   } DNS_SERVICE_REGISTER_REQUEST, *PDNS_SERVICE_REGISTER_REQUEST;
   1312 
   1313   DWORD WINAPI DnsServiceRegister(PDNS_SERVICE_REGISTER_REQUEST pRequest,PDNS_SERVICE_CANCEL pCancel);
   1314   DWORD WINAPI DnsServiceDeRegister(PDNS_SERVICE_REGISTER_REQUEST pRequest,PDNS_SERVICE_CANCEL pCancel);
   1315   DWORD WINAPI DnsServiceRegisterCancel(PDNS_SERVICE_CANCEL pCancelHandle);
   1316 
   1317   typedef struct _MDNS_QUERY_HANDLE {
   1318     WCHAR nameBuf[DNS_MAX_NAME_BUFFER_LENGTH];
   1319     WORD wType;
   1320     PVOID pSubscription;
   1321     PVOID pWnfCallbackParams;
   1322     ULONG stateNameData[2];
   1323   } MDNS_QUERY_HANDLE, *PMDNS_QUERY_HANDLE;
   1324 
   1325   typedef VOID WINAPI MDNS_QUERY_CALLBACK(PVOID pQueryContext,PMDNS_QUERY_HANDLE pQueryHandle,PDNS_QUERY_RESULT pQueryResults);
   1326   typedef MDNS_QUERY_CALLBACK *PMDNS_QUERY_CALLBACK;
   1327 
   1328   typedef struct _MDNS_QUERY_REQUEST {
   1329     ULONG Version;
   1330     ULONG ulRefCount;
   1331     PCWSTR Query;
   1332     WORD QueryType;
   1333     ULONG64 QueryOptions;
   1334     ULONG InterfaceIndex;
   1335     PMDNS_QUERY_CALLBACK pQueryCallback;
   1336     PVOID pQueryContext;
   1337     WINBOOL fAnswerReceived;
   1338     ULONG ulResendCount;
   1339   } MDNS_QUERY_REQUEST, *PMDNS_QUERY_REQUEST;
   1340 
   1341   DNS_STATUS WINAPI DnsStartMulticastQuery(PMDNS_QUERY_REQUEST pQueryRequest,PMDNS_QUERY_HANDLE pHandle);
   1342   DNS_STATUS WINAPI DnsStopMulticastQuery(PMDNS_QUERY_HANDLE pHandle);
   1343 
   1344 #ifdef __cplusplus
   1345 }
   1346 #endif
   1347 #endif