4 * Copyright (C) 2006 Matthew Kehrer
6 * This library is free software; you can redistribute it and/or
7 * modify it under the terms of the GNU Lesser General Public
8 * License as published by the Free Software Foundation; either
9 * version 2.1 of the License, or (at your option) any later version.
11 * This library is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 * Lesser General Public License for more details.
16 * You should have received a copy of the GNU Lesser General Public
17 * License along with this library; if not, write to the Free Software
18 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
21 #ifndef __WINE_WINDNS_H
22 #define __WINE_WINDNS_H
28 #define DNS_TYPE_ZERO 0x0000
29 #define DNS_TYPE_A 0x0001
30 #define DNS_TYPE_NS 0x0002
31 #define DNS_TYPE_MD 0x0003
32 #define DNS_TYPE_MF 0x0004
33 #define DNS_TYPE_CNAME 0x0005
34 #define DNS_TYPE_SOA 0x0006
35 #define DNS_TYPE_MB 0x0007
36 #define DNS_TYPE_MG 0x0008
37 #define DNS_TYPE_MR 0x0009
38 #define DNS_TYPE_NULL 0x000a
39 #define DNS_TYPE_WKS 0x000b
40 #define DNS_TYPE_PTR 0x000c
41 #define DNS_TYPE_HINFO 0x000d
42 #define DNS_TYPE_MINFO 0x000e
43 #define DNS_TYPE_MX 0x000f
44 #define DNS_TYPE_TEXT 0x0010
45 #define DNS_TYPE_RP 0x0011
46 #define DNS_TYPE_AFSDB 0x0012
47 #define DNS_TYPE_X25 0x0013
48 #define DNS_TYPE_ISDN 0x0014
49 #define DNS_TYPE_RT 0x0015
50 #define DNS_TYPE_NSAP 0x0016
51 #define DNS_TYPE_NSAPPTR 0x0017
52 #define DNS_TYPE_SIG 0x0018
53 #define DNS_TYPE_KEY 0x0019
54 #define DNS_TYPE_PX 0x001a
55 #define DNS_TYPE_GPOS 0x001b
56 #define DNS_TYPE_AAAA 0x001c
57 #define DNS_TYPE_LOC 0x001d
58 #define DNS_TYPE_NXT 0x001e
59 #define DNS_TYPE_EID 0x001f
60 #define DNS_TYPE_NIMLOC 0x0020
61 #define DNS_TYPE_SRV 0x0021
62 #define DNS_TYPE_ATMA 0x0022
63 #define DNS_TYPE_NAPTR 0x0023
64 #define DNS_TYPE_KX 0x0024
65 #define DNS_TYPE_CERT 0x0025
66 #define DNS_TYPE_A6 0x0026
67 #define DNS_TYPE_DNAME 0x0027
68 #define DNS_TYPE_SINK 0x0028
69 #define DNS_TYPE_OPT 0x0029
70 #define DNS_TYPE_UINFO 0x0064
71 #define DNS_TYPE_UID 0x0065
72 #define DNS_TYPE_GID 0x0066
73 #define DNS_TYPE_UNSPEC 0x0067
74 #define DNS_TYPE_ADDRS 0x00f8
75 #define DNS_TYPE_TKEY 0x00f9
76 #define DNS_TYPE_TSIG 0x00fa
77 #define DNS_TYPE_IXFR 0x00fb
78 #define DNS_TYPE_AXFR 0x00fc
79 #define DNS_TYPE_MAILB 0x00fd
80 #define DNS_TYPE_MAILA 0x00fe
81 #define DNS_TYPE_ALL 0x00ff
82 #define DNS_TYPE_ANY 0x00ff
84 #define DNS_TYPE_WINS 0xff01
85 #define DNS_TYPE_WINSR 0xff02
86 #define DNS_TYPE_NBSTAT (DNS_TYPE_WINSR)
88 #define DNS_QUERY_STANDARD 0x00000000
89 #define DNS_QUERY_ACCEPT_TRUNCATED_RESPONSE 0x00000001
90 #define DNS_QUERY_USE_TCP_ONLY 0x00000002
91 #define DNS_QUERY_NO_RECURSION 0x00000004
92 #define DNS_QUERY_BYPASS_CACHE 0x00000008
93 #define DNS_QUERY_NO_WIRE_QUERY 0x00000010
94 #define DNS_QUERY_NO_LOCAL_NAME 0x00000020
95 #define DNS_QUERY_NO_HOSTS_FILE 0x00000040
96 #define DNS_QUERY_NO_NETBT 0x00000080
97 #define DNS_QUERY_WIRE_ONLY 0x00000100
98 #define DNS_QUERY_RETURN_MESSAGE 0x00000200
99 #define DNS_QUERY_TREAT_AS_FQDN 0x00001000
100 #define DNS_QUERY_DONT_RESET_TTL_VALUES 0x00100000
101 #define DNS_QUERY_RESERVED 0xff000000
103 typedef enum _DNS_NAME_FORMAT
108 DnsNameHostnameLabel,
113 typedef enum _DNS_FREE_TYPE
117 DnsFreeParsedMessageFields
120 typedef enum _DNS_CHARSET
128 typedef enum _DNS_CONFIG_TYPE
130 DnsConfigPrimaryDomainName_W,
131 DnsConfigPrimaryDomainName_A,
132 DnsConfigPrimaryDomainName_UTF8,
133 DnsConfigAdapterDomainName_W,
134 DnsConfigAdapterDomainName_A,
135 DnsConfigAdapterDomainName_UTF8,
136 DnsConfigDnsServerList,
138 DnsConfigAdapterInfo,
139 DnsConfigPrimaryHostNameRegistrationEnabled,
140 DnsConfigAdapterHostNameRegistrationEnabled,
141 DnsConfigAddressRegistrationMaxCount,
144 DnsConfigHostName_UTF8,
145 DnsConfigFullHostName_W,
146 DnsConfigFullHostName_A,
147 DnsConfigFullHostName_UTF8
150 typedef enum _DnsSection
158 typedef long DNS_STATUS;
159 typedef DWORD IP4_ADDRESS;
164 } IP6_ADDRESS, *PIP6_ADDRESS, DNS_IP6_ADDRESS, *PDNS_IP6_ADDRESS;
166 typedef struct _IP4_ARRAY
169 IP4_ADDRESS AddrArray[1];
170 } IP4_ARRAY, *PIP4_ARRAY;
172 typedef struct _DNS_HEADER
175 BYTE RecursionDesired;
182 BYTE RecursionAvailable;
185 WORD NameServerCount;
186 WORD AdditionalCount;
187 } DNS_HEADER, *PDNS_HEADER;
189 typedef struct _DNS_MESSAGE_BUFFER
191 DNS_HEADER MessageHead;
193 } DNS_MESSAGE_BUFFER, *PDNS_MESSAGE_BUFFER;
197 IP4_ADDRESS IpAddress;
198 } DNS_A_DATA, *PDNS_A_DATA;
200 typedef struct _DnsRecordFlags
211 LPSTR pNamePrimaryServer;
212 LPSTR pNameAdministrator;
218 } DNS_SOA_DATAA, *PDNS_SOA_DATAA;
222 LPWSTR pNamePrimaryServer;
223 LPWSTR pNameAdministrator;
229 } DNS_SOA_DATAW, *PDNS_SOA_DATAW;
231 DECL_WINELIB_TYPE_AW(DNS_SOA_DATA)
232 DECL_WINELIB_TYPE_AW(PDNS_SOA_DATA)
237 } DNS_PTR_DATAA, *PDNS_PTR_DATAA;
242 } DNS_PTR_DATAW, *PDNS_PTR_DATAW;
244 DECL_WINELIB_TYPE_AW(DNS_PTR_DATA)
245 DECL_WINELIB_TYPE_AW(PDNS_PTR_DATA)
250 LPSTR pNameErrorsMailbox;
251 } DNS_MINFO_DATAA, *PDNS_MINFO_DATAA;
256 LPWSTR pNameErrorsMailbox;
257 } DNS_MINFO_DATAW, *PDNS_MINFO_DATAW;
259 DECL_WINELIB_TYPE_AW(DNS_MINFO_DATA)
260 DECL_WINELIB_TYPE_AW(PDNS_MINFO_DATA)
267 } DNS_MX_DATAA, *PDNS_MX_DATAA;
271 LPWSTR pNameExchange;
274 } DNS_MX_DATAW, *PDNS_MX_DATAW;
276 DECL_WINELIB_TYPE_AW(DNS_MX_DATA)
277 DECL_WINELIB_TYPE_AW(PDNS_MX_DATA)
282 LPSTR pStringArray[1];
283 } DNS_TXT_DATAA, *PDNS_TXT_DATAA;
288 LPWSTR pStringArray[1];
289 } DNS_TXT_DATAW, *PDNS_TXT_DATAW;
291 DECL_WINELIB_TYPE_AW(DNS_TXT_DATA)
292 DECL_WINELIB_TYPE_AW(PDNS_TXT_DATA)
298 } DNS_NULL_DATA, *PDNS_NULL_DATA;
302 IP4_ADDRESS IpAddress;
305 } DNS_WKS_DATA, *PDNS_WKS_DATA;
309 DNS_IP6_ADDRESS Ip6Address;
310 } DNS_AAAA_DATA, *PDNS_AAAA_DATA;
318 } DNS_KEY_DATA, *PDNS_KEY_DATA;
329 } DNS_LOC_DATA, *PDNS_LOC_DATA;
343 } DNS_SIG_DATAA, *PDNS_SIG_DATAA;
357 } DNS_SIG_DATAW, *PDNS_SIG_DATAW;
359 DECL_WINELIB_TYPE_AW(DNS_SIG_DATA)
360 DECL_WINELIB_TYPE_AW(PDNS_SIG_DATA)
362 #define DNS_ATMA_MAX_ADDR_LENGTH 20
367 BYTE Address[DNS_ATMA_MAX_ADDR_LENGTH];
368 } DNS_ATMA_DATA, *PDNS_ATMA_DATA;
375 } DNS_NXT_DATAA, *PDNS_NXT_DATAA;
382 } DNS_NXT_DATAW, *PDNS_NXT_DATAW;
384 DECL_WINELIB_TYPE_AW(DNS_NXT_DATA)
385 DECL_WINELIB_TYPE_AW(PDNS_NXT_DATA)
394 } DNS_SRV_DATAA, *PDNS_SRV_DATAA;
403 } DNS_SRV_DATAW, *PDNS_SRV_DATAW;
405 DECL_WINELIB_TYPE_AW(DNS_SRV_DATA)
406 DECL_WINELIB_TYPE_AW(PDNS_SRV_DATA)
410 LPSTR pNameAlgorithm;
411 PBYTE pAlgorithmPacket;
420 UCHAR cAlgNameLength;
421 BOOL bPacketPointers;
422 } DNS_TKEY_DATAA, *PDNS_TKEY_DATAA;
426 LPWSTR pNameAlgorithm;
427 PBYTE pAlgorithmPacket;
436 UCHAR cAlgNameLength;
437 BOOL bPacketPointers;
438 } DNS_TKEY_DATAW, *PDNS_TKEY_DATAW;
440 DECL_WINELIB_TYPE_AW(DNS_TKEY_DATA)
441 DECL_WINELIB_TYPE_AW(PDNS_TKEY_DATA)
445 LPSTR pNameAlgorithm;
446 PBYTE pAlgorithmPacket;
449 LONGLONG i64CreateTime;
455 UCHAR cAlgNameLength;
456 BOOL bPacketPointers;
457 } DNS_TSIG_DATAA, *PDNS_TSIG_DATAA;
461 LPWSTR pNameAlgorithm;
462 PBYTE pAlgorithmPacket;
465 LONGLONG i64CreateTime;
471 UCHAR cAlgNameLength;
472 BOOL bPacketPointers;
473 } DNS_TSIG_DATAW, *PDNS_TSIG_DATAW;
478 DWORD dwLookupTimeout;
479 DWORD dwCacheTimeout;
480 DWORD cWinsServerCount;
481 IP4_ADDRESS WinsServers[1];
482 } DNS_WINS_DATA, *PDNS_WINS_DATA;
487 DWORD dwLookupTimeout;
488 DWORD dwCacheTimeout;
489 LPSTR pNameResultDomain;
490 } DNS_WINSR_DATAA, *PDNS_WINSR_DATAA;
495 DWORD dwLookupTimeout;
496 DWORD dwCacheTimeout;
497 LPWSTR pNameResultDomain;
498 } DNS_WINSR_DATAW, *PDNS_WINSR_DATAW;
500 DECL_WINELIB_TYPE_AW(DNS_WINSR_DATA)
501 DECL_WINELIB_TYPE_AW(PDNS_WINSR_DATA)
503 typedef struct _DnsRecordA
505 struct _DnsRecordA *pNext;
519 DNS_SOA_DATAA SOA, Soa;
520 DNS_PTR_DATAA PTR, Ptr, NS, Ns, CNAME, Cname, MB, Mb, MD, Md, MF, Mf, MG, Mg, MR, Mr;
521 DNS_MINFO_DATAA MINFO, Minfo, RP, Rp;
522 DNS_MX_DATAA MX, Mx, AFSDB, Afsdb, RT, Rt;
523 DNS_TXT_DATAA HINFO, Hinfo, ISDN, Isdn, TXT, Txt, X25;
525 DNS_WKS_DATA WKS, Wks;
527 DNS_KEY_DATA KEY, Key;
528 DNS_SIG_DATAA SIG, Sig;
529 DNS_ATMA_DATA ATMA, Atma;
530 DNS_NXT_DATAA NXT, Nxt;
531 DNS_SRV_DATAA SRV, Srv;
532 DNS_TKEY_DATAA TKEY, Tkey;
533 DNS_TSIG_DATAA TSIG, Tsig;
534 DNS_WINS_DATA WINS, Wins;
535 DNS_WINSR_DATAA WINSR, WinsR, NBSTAT, Nbstat;
537 } DNS_RECORDA, *PDNS_RECORDA;
539 typedef struct _DnsRecordW
541 struct _DnsRecordW *pNext;
555 DNS_SOA_DATAW SOA, Soa;
556 DNS_PTR_DATAW PTR, Ptr, NS, Ns, CNAME, Cname, MB, Mb, MD, Md, MF, Mf, MG, Mg, MR, Mr;
557 DNS_MINFO_DATAW MINFO, Minfo, RP, Rp;
558 DNS_MX_DATAW MX, Mx, AFSDB, Afsdb, RT, Rt;
559 DNS_TXT_DATAW HINFO, Hinfo, ISDN, Isdn, TXT, Txt, X25;
561 DNS_WKS_DATA WKS, Wks;
563 DNS_KEY_DATA KEY, Key;
564 DNS_SIG_DATAW SIG, Sig;
565 DNS_ATMA_DATA ATMA, Atma;
566 DNS_NXT_DATAW NXT, Nxt;
567 DNS_SRV_DATAW SRV, Srv;
568 DNS_TKEY_DATAW TKEY, Tkey;
569 DNS_TSIG_DATAW TSIG, Tsig;
570 DNS_WINS_DATA WINS, Wins;
571 DNS_WINSR_DATAW WINSR, WinsR, NBSTAT, Nbstat;
573 } DNS_RECORDW, *PDNS_RECORDW;
575 #if defined(__WINESRC__) || defined(UNICODE)
576 typedef DNS_RECORDW DNS_RECORD;
577 typedef PDNS_RECORDW PDNS_RECORD;
579 typedef DNS_RECORDA DNS_RECORD;
580 typedef PDNS_RECORDA PDNS_RECORD;
583 typedef struct _DnsRRSet
585 PDNS_RECORD pFirstRR;
587 } DNS_RRSET, *PDNS_RRSET;
589 #define DNS_RRSET_INIT( rrset ) \
591 PDNS_RRSET _prrset = &(rrset); \
592 _prrset->pFirstRR = NULL; \
593 _prrset->pLastRR = (PDNS_RECORD) &_prrset->pFirstRR; \
596 #define DNS_RRSET_ADD( rrset, pnewRR ) \
598 PDNS_RRSET _prrset = &(rrset); \
599 PDNS_RECORD _prrnew = (pnewRR); \
600 _prrset->pLastRR->pNext = _prrnew; \
601 _prrset->pLastRR = _prrnew; \
604 #define DNS_RRSET_TERMINATE( rrset ) \
606 PDNS_RRSET _prrset = &(rrset); \
607 _prrset->pLastRR->pNext = NULL; \
610 DNS_STATUS WINAPI DnsAcquireContextHandle_A(DWORD,PVOID,HANDLE*);
611 DNS_STATUS WINAPI DnsAcquireContextHandle_W(DWORD,PVOID,HANDLE*);
612 DNS_STATUS WINAPI DnsExtractRecordsFromMessage_W(PDNS_MESSAGE_BUFFER,WORD,PDNS_RECORDW*);
613 DNS_STATUS WINAPI DnsExtractRecordsFromMessage_UTF8(PDNS_MESSAGE_BUFFER,WORD,PDNS_RECORDA*);
614 DNS_STATUS WINAPI DnsModifyRecordsInSet_A(PDNS_RECORDA,PDNS_RECORDA,DWORD,HANDLE,PIP4_ARRAY,PVOID);
615 DNS_STATUS WINAPI DnsModifyRecordsInSet_W(PDNS_RECORDW,PDNS_RECORDW,DWORD,HANDLE,PIP4_ARRAY,PVOID);
616 DNS_STATUS WINAPI DnsModifyRecordsInSet_UTF8(PDNS_RECORDA,PDNS_RECORDA,DWORD,HANDLE,PIP4_ARRAY,PVOID);
617 BOOL WINAPI DnsNameCompare_A(LPSTR,LPSTR);
618 BOOL WINAPI DnsNameCompare_W(LPWSTR,LPWSTR);
619 DNS_STATUS WINAPI DnsQuery_A(PCSTR,WORD,DWORD,PIP4_ARRAY,PDNS_RECORDA*,PVOID*);
620 DNS_STATUS WINAPI DnsQuery_W(PCWSTR,WORD,DWORD,PIP4_ARRAY,PDNS_RECORDW*,PVOID*);
621 DNS_STATUS WINAPI DnsQuery_UTF8(PCSTR,WORD,DWORD,PIP4_ARRAY,PDNS_RECORDA*,PVOID*);
622 DNS_STATUS WINAPI DnsQueryConfig(DNS_CONFIG_TYPE,DWORD,PWSTR,PVOID,PVOID,PDWORD);
623 BOOL WINAPI DnsRecordCompare(PDNS_RECORD,PDNS_RECORD);
624 PDNS_RECORD WINAPI DnsRecordCopyEx(PDNS_RECORD,DNS_CHARSET,DNS_CHARSET);
625 void WINAPI DnsRecordListFree(PDNS_RECORD,DNS_FREE_TYPE);
626 BOOL WINAPI DnsRecordSetCompare(PDNS_RECORD,PDNS_RECORD,PDNS_RECORD*,PDNS_RECORD*);
627 PDNS_RECORD WINAPI DnsRecordSetCopyEx(PDNS_RECORD,DNS_CHARSET,DNS_CHARSET);
628 PDNS_RECORD WINAPI DnsRecordSetDetach(PDNS_RECORD);
629 void WINAPI DnsReleaseContextHandle(HANDLE);
630 DNS_STATUS WINAPI DnsReplaceRecordSetA(PDNS_RECORDA,DWORD,HANDLE,PIP4_ARRAY,PVOID);
631 DNS_STATUS WINAPI DnsReplaceRecordSetW(PDNS_RECORDW,DWORD,HANDLE,PIP4_ARRAY,PVOID);
632 DNS_STATUS WINAPI DnsReplaceRecordSetUTF8(PDNS_RECORDA,DWORD,HANDLE,PIP4_ARRAY,PVOID);
633 DNS_STATUS WINAPI DnsValidateName_A(LPCSTR,DNS_NAME_FORMAT);
634 DNS_STATUS WINAPI DnsValidateName_W(LPCWSTR, DNS_NAME_FORMAT);
635 DNS_STATUS WINAPI DnsValidateName_UTF8(LPCSTR,DNS_NAME_FORMAT);
636 BOOL WINAPI DnsWriteQuestionToBuffer_W(PDNS_MESSAGE_BUFFER,LPDWORD,LPWSTR,WORD,WORD,BOOL);
637 BOOL WINAPI DnsWriteQuestionToBuffer_UTF8(PDNS_MESSAGE_BUFFER,LPDWORD,LPSTR,WORD,WORD,BOOL);