master
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
12extern "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