8 #define DNS_QUERY_STANDARD 0x0
9 #define DNS_QUERY_ACCEPT_TRUNCATED_RESPONSE 0x1
10 #define DNS_QUERY_USE_TCP_ONLY 0x2
11 #define DNS_QUERY_NO_RECURSION 0x4
12 #define DNS_QUERY_BYPASS_CACHE 0x8
13 #define DNS_QUERY_NO_WIRE_QUERY 0x10
14 #define DNS_QUERY_NO_LOCAL_NAME 0x20
15 #define DNS_QUERY_NO_HOSTS_FILE 0x40
16 #define DNS_QUERY_NO_NETBT 0x80
17 #define DNS_QUERY_TREAT_AS_FQDN 0x1000
18 #define DNS_QUERY_WIRE_ONLY 0x100
19 #define DNS_QUERY_RETURN_MESSAGE 0x200
20 #define DNS_QUERY_DONT_RESET_TTL_VALUES 0x100000
21 #define DNS_QUERY_RESERVED 0xff000000
23 #define DNS_UPDATE_SECURITY_USE_DEFAULT 0x0
24 #define DNS_UPDATE_SECURITY_OFF 0x10
25 #define DNS_UPDATE_SECURITY_ON 0x20
26 #define DNS_UPDATE_SECURITY_ONLY 0x100
27 #define DNS_UPDATE_CACHE_SECURITY_CONTEXT 0x200
28 #define DNS_UPDATE_TEST_USE_LOCAL_SYS_ACCT 0x400
29 #define DNS_UPDATE_FORCE_SECURITY_NEGO 0x800
30 #define DNS_UPDATE_RESERVED 0xffff0000
32 #define DNS_CONFIG_FLAG_ALLOC TRUE
35 typedef DWORD IP4_ADDRESS
;
36 typedef DWORD DNS_STATUS
;
37 #define DNS_TYPE_ZERO 0x0000
39 #define DNS_TYPE_A 0x0001
40 #define DNS_TYPE_NS 0x0002
41 #define DNS_TYPE_MD 0x0003
42 #define DNS_TYPE_MF 0x0004
43 #define DNS_TYPE_CNAME 0x0005
44 #define DNS_TYPE_SOA 0x0006
45 #define DNS_TYPE_MB 0x0007
46 #define DNS_TYPE_MG 0x0008
47 #define DNS_TYPE_MR 0x0009
48 #define DNS_TYPE_NULL 0x000a
49 #define DNS_TYPE_WKS 0x000b
50 #define DNS_TYPE_PTR 0x000c
51 #define DNS_TYPE_HINFO 0x000d
52 #define DNS_TYPE_MINFO 0x000e
53 #define DNS_TYPE_MX 0x000f
54 #define DNS_TYPE_TEXT 0x0010
55 #define DNS_TYPE_RP 0x0011
56 #define DNS_TYPE_AFSDB 0x0012
57 #define DNS_TYPE_X25 0x0013
58 #define DNS_TYPE_ISDN 0x0014
59 #define DNS_TYPE_RT 0x0015
60 #define DNS_TYPE_NSAP 0x0016
61 #define DNS_TYPE_NSAPPTR 0x0017
62 #define DNS_TYPE_SIG 0x0018
63 #define DNS_TYPE_KEY 0x0019
64 #define DNS_TYPE_PX 0x001a
65 #define DNS_TYPE_GPOS 0x001b
66 #define DNS_TYPE_AAAA 0x001c
67 #define DNS_TYPE_LOC 0x001d
68 #define DNS_TYPE_NXT 0x001e
69 #define DNS_TYPE_EID 0x001f
70 #define DNS_TYPE_NIMLOC 0x0020
71 #define DNS_TYPE_SRV 0x0021
72 #define DNS_TYPE_ATMA 0x0022
73 #define DNS_TYPE_NAPTR 0x0023
74 #define DNS_TYPE_KX 0x0024
75 #define DNS_TYPE_CERT 0x0025
76 #define DNS_TYPE_A6 0x0026
77 #define DNS_TYPE_DNAME 0x0027
78 #define DNS_TYPE_SINK 0x0028
79 #define DNS_TYPE_OPT 0x0029
80 #define DNS_TYPE_UINFO 0x0064
81 #define DNS_TYPE_UID 0x0065
82 #define DNS_TYPE_GID 0x0066
83 #define DNS_TYPE_UNSPEC 0x0067
84 #define DNS_TYPE_ADDRS 0x00f8
85 #define DNS_TYPE_TKEY 0x00f9
86 #define DNS_TYPE_TSIG 0x00fa
87 #define DNS_TYPE_IXFR 0x00fb
88 #define DNS_TYPE_AXFR 0x00fc
89 #define DNS_TYPE_MAILB 0x00fd
90 #define DNS_TYPE_MAILA 0x00fe
91 #define DNS_TYPE_ALL 0x00ff
92 #define DNS_TYPE_ANY 0x00ff
94 #define DNS_TYPE_WINS 0xff01
95 #define DNS_TYPE_WINSR 0xff02
96 #define DNS_TYPE_NBSTAT (DNS_TYPE_WINSR)
98 typedef enum _DNS_CHARSET
107 DnsConfigPrimaryDomainName_W
,
108 DnsConfigPrimaryDomainName_A
,
109 DnsConfigPrimaryDomainName_UTF8
,
110 DnsConfigAdapterDomainName_W
,
111 DnsConfigAdapterDomainName_A
,
112 DnsConfigAdapterDomainName_UTF8
,
113 DnsConfigDnsServerList
,
115 DnsConfigAdapterInfo
,
116 DnsConfigPrimaryHostNameRegistrationEnabled
,
117 DnsConfigAdapterHostNameRegistrationEnabled
,
118 DnsConfigAddressRegistrationMaxCount
,
121 DnsConfigHostName_UTF8
,
122 DnsConfigFullHostName_W
,
123 DnsConfigFullHostName_A
,
124 DnsConfigFullHostName_UTF8
130 DnsFreeParsedMessageFields
132 typedef enum _DNS_NAME_FORMAT
137 DnsNameHostnameLabel
,
148 typedef struct _IP4_ARRAY
{
150 IP4_ADDRESS AddrArray
[1];
151 } IP4_ARRAY
, *PIP4_ARRAY
;
154 } IP6_ADDRESS
, *PIP6_ADDRESS
, DNS_IP6_ADDRESS
, *PDNS_IP6_ADDRESS
;
155 typedef struct _DNS_HEADER
{
157 BYTE RecursionDesired
;
164 BYTE RecursionAvailable
;
167 WORD NameServerCount
;
168 WORD AdditionalCount
;
169 } DNS_HEADER
, *PDNS_HEADER
;
170 typedef struct _DNS_MESSAGE_BUFFER
{
171 DNS_HEADER MessageHead
;
173 } DNS_MESSAGE_BUFFER
, *PDNS_MESSAGE_BUFFER
;
174 typedef struct _DnsRecordFlags
{
181 #define DNSREC_QUESTION 0
182 #define DNSREC_ANSWER 1
183 #define DNSREC_AUTHORITY 2
184 #define DNSREC_ADDITIONAL 3
186 IP4_ADDRESS IpAddress
;
187 } DNS_A_DATA
, *PDNS_A_DATA
;
189 DNS_IP6_ADDRESS Ip6Address
;
190 } DNS_AAAA_DATA
, *PDNS_AAAA_DATA
;
191 #define DNS_ATMA_MAX_ADDR_LENGTH 20
194 BYTE Address
[DNS_ATMA_MAX_ADDR_LENGTH
];
195 } DNS_ATMA_DATA
, *PDNS_ATMA_DATA
;
201 } DNS_KEY_DATA
, *PDNS_KEY_DATA
;
210 } DNS_LOC_DATA
, *PDNS_LOC_DATA
;
213 LPSTR pNameErrorsMailbox
;
214 } DNS_MINFO_DATAA
, *PDNS_MINFO_DATAA
;
217 LPWSTR pNameErrorsMailbox
;
218 } DNS_MINFO_DATAW
, *PDNS_MINFO_DATAW
;
223 } DNS_MX_DATAA
, *PDNS_MX_DATAA
;
225 LPWSTR pNameExchange
;
228 } DNS_MX_DATAW
, *PDNS_MX_DATAW
;
232 } DNS_NULL_DATA
, *PDNS_NULL_DATA
;
237 } DNS_NXT_DATAA
, *PDNS_NXT_DATAA
;
242 } DNS_NXT_DATAW
, *PDNS_NXT_DATAW
;
245 } DNS_PTR_DATAA
, *PDNS_PTR_DATAA
;
248 } DNS_PTR_DATAW
, *PDNS_PTR_DATAW
;
260 } DNS_SIG_DATAA
, *PDNS_SIG_DATAA
;
272 } DNS_SIG_DATAW
, *PDNS_SIG_DATAW
;
274 LPSTR pNamePrimaryServer
;
275 LPSTR pNameAdministrator
;
281 } DNS_SOA_DATAA
, *PDNS_SOA_DATAA
;
283 LPWSTR pNamePrimaryServer
;
284 LPWSTR pNameAdministrator
;
290 } DNS_SOA_DATAW
, *PDNS_SOA_DATAW
;
297 } DNS_SRV_DATAA
, *PDNS_SRV_DATAA
;
304 } DNS_SRV_DATAW
, *PDNS_SRV_DATAW
;
307 LPSTR pStringArray
[1];
308 } DNS_TXT_DATAA
, *PDNS_TXT_DATAA
;
311 LPWSTR pStringArray
[1];
312 } DNS_TXT_DATAW
, *PDNS_TXT_DATAW
;
314 LPSTR pNameAlgorithm
;
315 PBYTE pAlgorithmPacket
;
324 UCHAR cAlgNameLength
;
325 BOOL bPacketPointers
;
326 } DNS_TKEY_DATAA
, *PDNS_TKEY_DATAA
;
328 LPWSTR pNameAlgorithm
;
329 PBYTE pAlgorithmPacket
;
338 UCHAR cAlgNameLength
;
339 BOOL bPacketPointers
;
340 } DNS_TKEY_DATAW
, *PDNS_TKEY_DATAW
;
342 LPSTR pNameAlgorithm
;
343 PBYTE pAlgorithmPacket
;
346 LONGLONG i64CreateTime
;
352 UCHAR cAlgNameLength
;
353 BOOL bPacketPointers
;
354 } DNS_TSIG_DATAA
, *PDNS_TSIG_DATAA
;
356 LPWSTR pNameAlgorithm
;
357 PBYTE pAlgorithmPacket
;
360 LONGLONG i64CreateTime
;
366 UCHAR cAlgNameLength
;
367 BOOL bPacketPointers
;
368 } DNS_TSIG_DATAW
, *PDNS_TSIG_DATAW
;
371 DWORD dwLookupTimeout
;
372 DWORD dwCacheTimeout
;
373 DWORD cWinsServerCount
;
374 IP4_ADDRESS WinsServers
[1];
375 } DNS_WINS_DATA
, *PDNS_WINS_DATA
;
378 DWORD dwLookupTimeout
;
379 DWORD dwCacheTimeout
;
380 LPSTR pNameResultDomain
;
381 } DNS_WINSR_DATAA
, *PDNS_WINSR_DATAA
;
384 DWORD dwLookupTimeout
;
385 DWORD dwCacheTimeout
;
386 LPWSTR pNameResultDomain
;
387 } DNS_WINSR_DATAW
, *PDNS_WINSR_DATAW
;
388 typedef struct _DNS_WIRE_QUESTION
{
391 } DNS_WIRE_QUESTION
, *PDNS_WIRE_QUESTION
;
392 typedef struct _DNS_WIRE_RECORD
{
397 } DNS_WIRE_RECORD
, *PDNS_WIRE_RECORD
;
399 IP4_ADDRESS IpAddress
;
402 } DNS_WKS_DATA
, *PDNS_WKS_DATA
;
403 typedef struct _DnsRecordA
{
404 struct _DnsRecordA
* pNext
;
416 DNS_SOA_DATAA SOA
, Soa
;
417 DNS_PTR_DATAA PTR
, Ptr
, NS
, Ns
, CNAME
, Cname
, MB
, Mb
,
418 MD
, Md
, MF
, Mf
, MG
, Mg
, MR
, Mr
;
419 DNS_MINFO_DATAA MINFO
, Minfo
, RP
, Rp
;
420 DNS_MX_DATAA MX
, Mx
, AFSDB
, Afsdb
, RT
, Rt
;
421 DNS_TXT_DATAA HINFO
, Hinfo
, ISDN
, Isdn
, TXT
, Txt
, X25
;
423 DNS_WKS_DATA WKS
, Wks
;
425 DNS_KEY_DATA KEY
, Key
;
426 DNS_SIG_DATAA SIG
, Sig
;
427 DNS_ATMA_DATA ATMA
, Atma
;
428 DNS_NXT_DATAA NXT
, Nxt
;
429 DNS_SRV_DATAA SRV
, Srv
;
430 DNS_TKEY_DATAA TKEY
, Tkey
;
431 DNS_TSIG_DATAA TSIG
, Tsig
;
432 DNS_WINS_DATA WINS
, Wins
;
433 DNS_WINSR_DATAA WINSR
, WinsR
, NBSTAT
, Nbstat
;
435 } DNS_RECORDA
, *PDNS_RECORDA
;
436 typedef struct _DnsRecordW
{
437 struct _DnsRecordW
* pNext
;
449 DNS_SOA_DATAW SOA
, Soa
;
450 DNS_PTR_DATAW PTR
, Ptr
, NS
, Ns
, CNAME
, Cname
, MB
, Mb
,
451 MD
, Md
, MF
, Mf
, MG
, Mg
, MR
, Mr
;
452 DNS_MINFO_DATAW MINFO
, Minfo
, RP
, Rp
;
453 DNS_MX_DATAW MX
, Mx
, AFSDB
, Afsdb
, RT
, Rt
;
454 DNS_TXT_DATAW HINFO
, Hinfo
, ISDN
, Isdn
, TXT
, Txt
, X25
;
456 DNS_WKS_DATA WKS
, Wks
;
458 DNS_KEY_DATA KEY
, Key
;
459 DNS_SIG_DATAW SIG
, Sig
;
460 DNS_ATMA_DATA ATMA
, Atma
;
461 DNS_NXT_DATAW NXT
, Nxt
;
462 DNS_SRV_DATAW SRV
, Srv
;
463 DNS_TKEY_DATAW TKEY
, Tkey
;
464 DNS_TSIG_DATAW TSIG
, Tsig
;
465 DNS_WINS_DATA WINS
, Wins
;
466 DNS_WINSR_DATAW WINSR
, WinsR
, NBSTAT
, Nbstat
;
468 } DNS_RECORDW
, *PDNS_RECORDW
;
471 #define DNS_RECORD DNS_RECORDW
472 #define PDNS_RECORD PDNS_RECORDW
474 #define DNS_RECORD DNS_RECORDA
475 #define PDNS_RECORD PDNS_RECORDA
478 typedef struct _DnsRRSet
{
479 PDNS_RECORD pFirstRR
;
481 } DNS_RRSET
, *PDNS_RRSET
;
483 #define DNS_RRSET_INIT( rrset ) \
485 PDNS_RRSET _prrset = &(rrset); \
486 _prrset->pFirstRR = NULL; \
487 _prrset->pLastRR = (PDNS_RECORD) &_prrset->pFirstRR; \
490 #define DNS_RRSET_ADD( rrset, pnewRR ) \
492 PDNS_RRSET _prrset = &(rrset); \
493 PDNS_RECORD _prrnew = (pnewRR); \
494 _prrset->pLastRR->pNext = _prrnew; \
495 _prrset->pLastRR = _prrnew; \
498 #define DNS_RRSET_TERMINATE( rrset ) \
500 PDNS_RRSET _prrset = &(rrset); \
501 _prrset->pLastRR->pNext = NULL; \
504 DNS_STATUS WINAPI
DnsAcquireContextHandle_A(DWORD
,PVOID
,HANDLE
*);
505 DNS_STATUS WINAPI
DnsAcquireContextHandle_W(DWORD
,PVOID
,HANDLE
*);
506 DNS_STATUS WINAPI
DnsExtractRecordsFromMessage_W(PDNS_MESSAGE_BUFFER
,WORD
,PDNS_RECORD
*);
507 DNS_STATUS WINAPI
DnsExtractRecordsFromMessage_UTF8(PDNS_MESSAGE_BUFFER
,WORD
,PDNS_RECORD
*);
508 DNS_STATUS WINAPI
DnsModifyRecordsInSet_A(PDNS_RECORD
,PDNS_RECORD
,DWORD
,HANDLE
,PIP4_ARRAY
,PVOID
);
509 DNS_STATUS WINAPI
DnsModifyRecordsInSet_W(PDNS_RECORD
,PDNS_RECORD
,DWORD
,HANDLE
,PIP4_ARRAY
,PVOID
);
510 DNS_STATUS WINAPI
DnsModifyRecordsInSet_UTF8(PDNS_RECORD
,PDNS_RECORD
,DWORD
,HANDLE
,PIP4_ARRAY
,PVOID
);
511 BOOL WINAPI
DnsNameCompare_A(PCSTR
,PCSTR
);
512 BOOL WINAPI
DnsNameCompare_W(PCWSTR
,PCWSTR
);
513 DNS_STATUS WINAPI
DnsQuery_A(PCSTR
,WORD
,DWORD
,PIP4_ARRAY
,PDNS_RECORD
*,PVOID
*);
514 DNS_STATUS WINAPI
DnsQuery_W(PCWSTR
,WORD
,DWORD
,PIP4_ARRAY
,PDNS_RECORD
*,PVOID
*);
515 DNS_STATUS WINAPI
DnsQuery_UTF8(PCSTR
,WORD
,DWORD
,PIP4_ARRAY
,PDNS_RECORD
*,PVOID
*);
516 DNS_STATUS WINAPI
DnsQueryConfig(DNS_CONFIG_TYPE
,DWORD
,PWSTR
,PVOID
,PVOID
,PDWORD
);
517 BOOL WINAPI
DnsRecordCompare(PDNS_RECORD
,PDNS_RECORD
);
518 PDNS_RECORD WINAPI
DnsRecordCopyEx(PDNS_RECORD
,DNS_CHARSET
,DNS_CHARSET
);
519 void WINAPI
DnsRecordListFree(PDNS_RECORD
,DNS_FREE_TYPE
);
520 BOOL WINAPI
DnsRecordSetCompare(PDNS_RECORD
,PDNS_RECORD
,PDNS_RECORD
*,PDNS_RECORD
*);
521 PDNS_RECORD WINAPI
DnsRecordSetCopyEx(PDNS_RECORD
,DNS_CHARSET
,DNS_CHARSET
);
522 PDNS_RECORD WINAPI
DnsRecordSetDetach(PDNS_RECORD
);
523 void WINAPI
DnsReleaseContextHandle(HANDLE
);
524 DNS_STATUS WINAPI
DnsReplaceRecordSetA(PDNS_RECORD
,DWORD
,HANDLE
,PIP4_ARRAY
,PVOID
);
525 DNS_STATUS WINAPI
DnsReplaceRecordSetW(PDNS_RECORD
,DWORD
,HANDLE
,PIP4_ARRAY
,PVOID
);
526 DNS_STATUS WINAPI
DnsReplaceRecordSetUTF8(PDNS_RECORD
,DWORD
,HANDLE
,PIP4_ARRAY
,PVOID
);
527 DNS_STATUS WINAPI
DnsValidateName_A(LPCSTR
,DNS_NAME_FORMAT
);
528 DNS_STATUS WINAPI
DnsValidateName_W(LPCWSTR
, DNS_NAME_FORMAT
);
529 DNS_STATUS WINAPI
DnsValidateName_UTF8(LPCSTR
,DNS_NAME_FORMAT
);
530 BOOL WINAPI
DnsWriteQuestionToBuffer_W(PDNS_MESSAGE_BUFFER
,LPDWORD
,LPWSTR
,WORD
,WORD
,BOOL
);
531 BOOL WINAPI
DnsWriteQuestionToBuffer_UTF8(PDNS_MESSAGE_BUFFER
,LPDWORD
,LPSTR
,WORD
,WORD
,BOOL
);
534 #define DNS_MINFO_DATA DNS_MINFO_DATAW
535 #define PDNS_MINFO_DATA PDNS_MINFO_DATAW
536 #define DNS_MX_DATA DNS_MX_DATAW
537 #define PDNS_MX_DATA PDNS_MX_DATAW
538 #define DNS_NXT_DATA DNS_NXT_DATAW
539 #define PDNS_NXT_DATA PDNS_NXT_DATAW
540 #define DNS_PTR_DATA DNS_PTR_DATAW
541 #define PDNS_PTR_DATA PDNS_PTR_DATAW
542 #define DNS_SIG_DATA DNS_SIG_DATAW
543 #define PDNS_SIG_DATA PDNS_SIG_DATAW
544 #define DNS_SOA_DATA DNS_SOA_DATAW
545 #define PDNS_SOA_DATA PDNS_SOA_DATAW
546 #define DNS_TXT_DATA DNS_TXT_DATAW
547 #define PDNS_TXT_DATA PDNS_TXT_DATAW
548 #define DNS_TKEY_DATA DNS_TKEY_DATAW
549 #define PDNS_TKEY_DATA PDNS_TKEY_DATAW
550 #define DNS_WINSR_DATA DNS_WINSR_DATAW
551 #define PDNS_WINSR_DATA PDNS_WINSR_DATAW
552 #define DnsAcquireContextHandle DnsAcquireContextHandle_W
553 #define DnsModifyRecordsInSet DnsModifyRecordsInSet_W
554 #define DnsNameCompare DnsNameCompare_W
555 #define DnsQuery DnsQuery_W
556 #define DnsReplaceRecordSet DnsReplaceRecordSetW
557 #define DnsValidateName DnsValidateName_W
559 #define DNS_MINFO_DATA DNS_MINFO_DATAA
560 #define PDNS_MINFO_DATA PDNS_MINFO_DATAA
561 #define DNS_MX_DATA DNS_MX_DATAA
562 #define PDNS_MX_DATA PDNS_MX_DATAA
563 #define DNS_NXT_DATA DNS_NXT_DATAA
564 #define PDNS_NXT_DATA PDNS_NXT_DATAA
565 #define DNS_PTR_DATA DNS_PTR_DATAA
566 #define PDNS_PTR_DATA PDNS_PTR_DATAA
567 #define DNS_SIG_DATA DNS_SIG_DATAA
568 #define PDNS_SIG_DATA PDNS_SIG_DATAA
569 #define DNS_SOA_DATA DNS_SOA_DATAA
570 #define PDNS_SOA_DATA PDNS_SOA_DATAA
571 #define DNS_TXT_DATA DNS_TXT_DATAA
572 #define PDNS_TXT_DATA PDNS_TXT_DATAA
573 #define DNS_TKEY_DATA DNS_TKEY_DATAA
574 #define PDNS_TKEY_DATA PDNS_TKEY_DATAA
575 #define DNS_WINSR_DATA DNS_WINSR_DATAA
576 #define PDNS_WINSR_DATA PDNS_WINSR_DATAA
577 #define DnsAcquireContextHandle DnsAcquireContextHandle_A
578 #define DnsModifyRecordsInSet DnsModifyRecordsInSet_A
579 #define DnsNameCompare DnsNameCompare_A
580 #define DnsQuery DnsQuery_A
581 #define DnsReplaceRecordSet DnsReplaceRecordSetA
582 #define DnsValidateName DnsValidateName_A
585 #endif /* RC_INVOKED */
591 #endif /* _WINDNS_H */