OSDN Git Service

Redo the filters based on assumptions discussed in mingw-dvlpr list.
[mingw/mingw-org-wsl.git] / include / windns.h
1 /**
2  * @file windns.h
3  * @copy 2012 MinGW.org project
4  *
5  * Permission is hereby granted, free of charge, to any person obtaining a
6  * copy of this software and associated documentation files (the "Software"),
7  * to deal in the Software without restriction, including without limitation
8  * the rights to use, copy, modify, merge, publish, distribute, sublicense,
9  * and/or sell copies of the Software, and to permit persons to whom the
10  * Software is furnished to do so, subject to the following conditions:
11  * 
12  * The above copyright notice and this permission notice (including the next
13  * paragraph) shall be included in all copies or substantial portions of the
14  * Software.
15  * 
16  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
19  * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20  * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
21  * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
22  * DEALINGS IN THE SOFTWARE.
23  */
24 #ifndef _WINDNS_H
25 #define _WINDNS_H
26 #pragma GCC system_header
27
28 #ifdef __cplusplus
29 extern "C" {
30 #endif
31
32 #define DNS_QUERY_STANDARD 0x0
33 #define DNS_QUERY_ACCEPT_TRUNCATED_RESPONSE 0x1
34 #define DNS_QUERY_USE_TCP_ONLY 0x2
35 #define DNS_QUERY_NO_RECURSION 0x4
36 #define DNS_QUERY_BYPASS_CACHE 0x8
37 #define DNS_QUERY_NO_WIRE_QUERY 0x10
38 #define DNS_QUERY_NO_LOCAL_NAME 0x20
39 #define DNS_QUERY_NO_HOSTS_FILE 0x40
40 #define DNS_QUERY_NO_NETBT 0x80
41 #define DNS_QUERY_TREAT_AS_FQDN 0x1000
42 #define DNS_QUERY_WIRE_ONLY 0x100
43 #define DNS_QUERY_RETURN_MESSAGE 0x200
44 #define DNS_QUERY_DONT_RESET_TTL_VALUES 0x100000
45 #define DNS_QUERY_RESERVED 0xff000000
46
47 #define DNS_UPDATE_SECURITY_USE_DEFAULT 0x0
48 #define DNS_UPDATE_SECURITY_OFF 0x10
49 #define DNS_UPDATE_SECURITY_ON 0x20
50 #define DNS_UPDATE_SECURITY_ONLY 0x100
51 #define DNS_UPDATE_CACHE_SECURITY_CONTEXT 0x200
52 #define DNS_UPDATE_TEST_USE_LOCAL_SYS_ACCT 0x400
53 #define DNS_UPDATE_FORCE_SECURITY_NEGO 0x800
54 #define DNS_UPDATE_RESERVED 0xffff0000
55
56 #ifndef RC_INVOKE
57 typedef DWORD IP4_ADDRESS;
58 typedef DWORD DNS_STATUS;
59 enum {
60         DNS_TYPE_A=1,
61         DNS_TYPE_NS,
62         DNS_TYPE_MD,
63         DNS_TYPE_MF,
64         DNS_TYPE_CNAME,
65         DNS_TYPE_SOA,
66         DNS_TYPE_MB,
67         DNS_TYPE_MG,
68         DNS_TYPE_MR,
69         DNS_TYPE_NULL,
70         DNS_TYPE_WKS,
71         DNS_TYPE_PTR,
72         DNS_TYPE_HINFO,
73         DNS_TYPE_MINFO,
74         DNS_TYPE_MX,
75         DNS_TYPE_TEXT,
76         DNS_TYPE_RP,
77         DNS_TYPE_AFSDB,
78         DNS_TYPE_X25,
79         DNS_TYPE_ISDN,
80         DNS_TYPE_RT,
81         DNS_TYPE_NSAP,
82         DNS_TYPE_NSAPPTR,
83         DNS_TYPE_SIG,
84         DNS_TYPE_KEY,
85         DNS_TYPE_PX,
86         DNS_TYPE_GPOS,
87         DNS_TYPE_AAAA,
88         DNS_TYPE_LOC,
89         DNS_TYPE_NXT,
90         DNS_TYPE_EID,
91         DNS_TYPE_NIMLOC,
92         DNS_TYPE_SRV,
93         DNS_TYPE_ATMA,
94         DNS_TYPE_NAPTR,
95         DNS_TYPE_KX,
96         DNS_TYPE_CERT,
97         DNS_TYPE_A6,
98         DNS_TYPE_DNAME,
99         DNS_TYPE_SINK,
100         DNS_TYPE_OPT,
101         DNS_TYPE_UINFO=100,
102         DNS_TYPE_UID,
103         DNS_TYPE_GID,
104         DNS_TYPE_UNSPEC,
105         DNS_TYPE_ADDRS=248,
106         DNS_TYPE_TKEY,
107         DNS_TYPE_TSIG,
108         DNS_TYPE_IXFR,
109         DNS_TYPE_AXFR,
110         DNS_TYPE_MAILB,
111         DNS_TYPE_MAILA,
112         DNS_TYPE_ALL,
113         DNS_TYPE_ANY=DNS_TYPE_ALL
114 };
115 typedef enum _DNS_CHARSET
116 {
117         DnsCharSetUnknown, 
118         DnsCharSetUnicode, 
119         DnsCharSetUtf8, 
120         DnsCharSetAnsi
121 } DNS_CHARSET;
122 typedef enum 
123 {
124         DnsConfigPrimaryDomainName_W, 
125         DnsConfigPrimaryDomainName_A, 
126         DnsConfigPrimaryDomainName_UTF8, 
127         DnsConfigAdapterDomainName_W, 
128         DnsConfigAdapterDomainName_A, 
129         DnsConfigAdapterDomainName_UTF8, 
130         DnsConfigDnsServerList, 
131         DnsConfigSearchList, 
132         DnsConfigAdapterInfo, 
133         DnsConfigPrimaryHostNameRegistrationEnabled, 
134         DnsConfigAdapterHostNameRegistrationEnabled, 
135         DnsConfigAddressRegistrationMaxCount, 
136         DnsConfigHostName_W, 
137         DnsConfigHostName_A, 
138         DnsConfigHostName_UTF8, 
139         DnsConfigFullHostName_W, 
140         DnsConfigFullHostName_A, 
141         DnsConfigFullHostName_UTF8
142 } DNS_CONFIG_TYPE;
143 typedef enum 
144 {
145         DnsFreeFlat = 0, 
146         DnsFreeRecordList, 
147         DnsFreeParsedMessageFields
148 } DNS_FREE_TYPE;
149 typedef enum _DNS_NAME_FORMAT
150 {
151         DnsNameDomain, 
152         DnsNameDomainLabel, 
153         DnsNameHostnameFull, 
154         DnsNameHostnameLabel, 
155         DnsNameWildcard, 
156         DnsNameSrvRecord
157 } DNS_NAME_FORMAT;
158 typedef enum 
159 {
160         DnsSectionQuestion, 
161         DnsSectionAnswer, 
162         DnsSectionAuthority, 
163         DnsSectionAdditional
164 } DNS_SECTION;
165 typedef struct _IP4_ARRAY {
166         DWORD AddrCount;
167         IP4_ADDRESS AddrArray[1];
168 } IP4_ARRAY, *PIP4_ARRAY;
169 typedef struct {
170         DWORD IP6Dword[4];
171 } IP6_ADDRESS, *PIP6_ADDRESS, DNS_IP6_ADDRESS, *PDNS_IP6_ADDRESS;
172 typedef struct _DNS_HEADER {
173         WORD Xid;
174         BYTE RecursionDesired;
175         BYTE Truncation;
176         BYTE Authoritative;
177         BYTE Opcode;
178         BYTE IsResponse;
179         BYTE ResponseCode;
180         BYTE Reserved;
181         BYTE RecursionAvailable;
182         WORD QuestionCount;
183         WORD AnswerCount;
184         WORD NameServerCount;
185         WORD AdditionalCount;
186 } DNS_HEADER, *PDNS_HEADER;
187 typedef struct _DNS_MESSAGE_BUFFER {
188         DNS_HEADER MessageHead;
189         CHAR MessageBody[1];
190 } DNS_MESSAGE_BUFFER, *PDNS_MESSAGE_BUFFER;
191 typedef struct _DnsRecordFlags {
192         DWORD Section   :2;
193         DWORD Delete    :1;
194         DWORD CharSet   :2;
195         DWORD Unused    :3;
196         DWORD Reserved  :24;
197 } DNS_RECORD_FLAGS;
198 #define DNSREC_QUESTION 0
199 #define DNSREC_ANSWER 1
200 #define DNSREC_AUTHORITY 2
201 #define DNSREC_ADDITIONAL 3
202 typedef struct {
203         IP4_ADDRESS IpAddress;
204 } DNS_A_DATA, *PDNS_A_DATA;
205 typedef struct {
206         DNS_IP6_ADDRESS Ip6Address;
207 } DNS_AAAA_DATA, *PDNS_AAAA_DATA;
208 #define DNS_ATMA_MAX_ADDR_LENGTH 20
209 typedef struct {
210         BYTE AddressType;
211         BYTE Address[DNS_ATMA_MAX_ADDR_LENGTH];
212 } DNS_ATMA_DATA, *PDNS_ATMA_DATA;
213 typedef struct {
214         WORD wFlags;
215         BYTE chProtocol;
216         BYTE chAlgorithm;
217         BYTE Key[1];
218 } DNS_KEY_DATA, *PDNS_KEY_DATA;
219 typedef struct {
220         WORD wVersion;
221         WORD wSize;
222         WORD wHorPrec;
223         WORD wVerPrec;
224         DWORD dwLatitude;
225         DWORD dwLongitude;
226         DWORD dwAltitude;
227 } DNS_LOC_DATA, *PDNS_LOC_DATA;
228 typedef struct {
229         LPTSTR pNameMailbox;
230         LPTSTR pNameErrorsMailbox;
231 } DNS_MINFO_DATA, *PDNS_MINFO_DATA;
232 typedef struct {
233         LPTSTR pNameExchange;
234         WORD wPreference;
235         WORD Pad;
236 } DNS_MX_DATA, *PDNS_MX_DATA;
237 typedef struct {
238         DWORD dwByteCount;
239         BYTE Data[1];
240 } DNS_NULL_DATA, *PDNS_NULL_DATA;
241 typedef struct {
242         LPTSTR pNameNext;
243         WORD wNumTypes;
244         WORD wTypes[1];
245 } DNS_NXT_DATA, *PDNS_NXT_DATA;
246 typedef struct {
247         LPTSTR pNameHost;
248 } DNS_PTR_DATA, *PDNS_PTR_DATA;
249 typedef struct {
250         LPTSTR pNameSigner;
251         WORD wTypeCovered;
252         BYTE chAlgorithm;
253         BYTE chLabelCount;
254         DWORD dwOriginalTtl;
255         DWORD dwExpiration;
256         DWORD dwTimeSigned;
257         WORD wKeyTag;
258         WORD Pad;
259         BYTE Signature[1];
260 } DNS_SIG_DATA, *PDNS_SIG_DATA;
261 typedef struct {
262         LPTSTR pNamePrimaryServer;
263         LPTSTR pNameAdministrator;
264         DWORD dwSerialNo;
265         DWORD dwRefresh;
266         DWORD dwRetry;
267         DWORD dwExpire;
268         DWORD dwDefaultTtl;
269 } DNS_SOA_DATA, *PDNS_SOA_DATA;
270 typedef struct {
271         LPTSTR pNameTarget;
272         WORD wPriority;
273         WORD wWeight;
274         WORD wPort;
275         WORD Pad;
276 } DNS_SRV_DATA, *PDNS_SRV_DATA;
277 typedef struct {
278         DWORD dwStringCount;
279         LPTSTR pStringArray[1];
280 } DNS_TXT_DATA, *PDNS_TXT_DATA;
281 typedef struct {
282         LPTSTR pNameAlgorithm;
283         PBYTE pAlgorithmPacket;
284         PBYTE pKey;
285         PBYTE pOtherData;
286         DWORD dwCreateTime;
287         DWORD dwExpireTime;
288         WORD wMode;
289         WORD wError;
290         WORD wKeyLength;
291         WORD wOtherLength;
292         UCHAR cAlgNameLength;
293         BOOL bPacketPointers;
294 } DNS_TKEY_DATA, *PDNS_TKEY_DATA;
295 typedef struct {
296         LPTSTR pNameAlgorithm;
297         PBYTE pAlgorithmPacket;
298         PBYTE pSignature;
299         PBYTE pOtherData;
300         LONGLONG i64CreateTime;
301         WORD wFudgeTime;
302         WORD wOriginalXid;
303         WORD wError;
304         WORD wSigLength;
305         WORD wOtherLength;
306         UCHAR cAlgNameLength;
307         BOOL bPacketPointers;
308 } DNS_TSIG_DATA, *PDNS_TSIG_DATA;
309 typedef struct {
310         DWORD dwMappingFlag;
311         DWORD dwLookupTimeout;
312         DWORD dwCacheTimeout;
313         DWORD cWinsServerCount;
314         IP4_ADDRESS WinsServers[1];
315 } DNS_WINS_DATA, *PDNS_WINS_DATA;
316 typedef struct {
317         DWORD dwMappingFlag;
318         DWORD dwLookupTimeout;
319         DWORD dwCacheTimeout;
320         LPTSTR pNameResultDomain;
321 } DNS_WINSR_DATA, *PDNS_WINSR_DATA;
322 typedef struct _DNS_WIRE_QUESTION {
323         WORD QuestionType;
324         WORD QuestionClass;
325 } DNS_WIRE_QUESTION, *PDNS_WIRE_QUESTION;
326 typedef struct _DNS_WIRE_RECORD {
327         WORD RecordType;
328         WORD RecordClass;
329         DWORD TimeToLive;
330         WORD DataLength;
331 } DNS_WIRE_RECORD, *PDNS_WIRE_RECORD;
332 typedef struct {
333         IP4_ADDRESS IpAddress;
334         UCHAR chProtocol;
335         BYTE BitMask[1];
336 } DNS_WKS_DATA, *PDNS_WKS_DATA;
337 typedef struct _DnsRecord {
338         struct _DnsRecord* pNext;
339         LPTSTR pName;
340         WORD wType;
341         WORD wDataLength;
342         union {
343                 DWORD DW;
344                 DNS_RECORD_FLAGS S;
345         } Flags;
346         DWORD dwTtl;
347         DWORD dwReserved;
348         union {
349                 DNS_A_DATA A;
350                 DNS_SOA_DATA SOA, Soa;
351                 DNS_PTR_DATA PTR, Ptr, NS, Ns, CNAME, Cname, MB, Mb,
352                              MD, Md, MF, Mf, MG, Mg, MR, Mr;
353                 DNS_MINFO_DATA MINFO, Minfo, RP, Rp;
354                 DNS_MX_DATA MX, Mx, AFSDB, Afsdb, RT, Rt;
355                 DNS_TXT_DATA HINFO, Hinfo, ISDN, Isdn, TXT, Txt, X25;
356                 DNS_NULL_DATA Null;
357                 DNS_WKS_DATA WKS, Wks;
358                 DNS_AAAA_DATA AAAA;
359                 DNS_KEY_DATA KEY, Key;
360                 DNS_SIG_DATA SIG, Sig;
361                 DNS_ATMA_DATA ATMA, Atma;
362                 DNS_NXT_DATA NXT, Nxt;
363                 DNS_SRV_DATA SRV, Srv;
364                 DNS_TKEY_DATA TKEY, Tkey;
365                 DNS_TSIG_DATA TSIG, Tsig;
366                 DNS_WINS_DATA WINS, Wins;
367                 DNS_WINSR_DATA WINSR, WinsR, NBSTAT, Nbstat;
368         } Data;
369 } DNS_RECORD, *PDNS_RECORD;
370 typedef struct _DnsRRSet {
371         PDNS_RECORD pFirstRR;
372         PDNS_RECORD pLastRR;
373 } DNS_RRSET, *PDNS_RRSET;
374
375 DNS_STATUS WINAPI DnsAcquireContextHandle_A(DWORD,PVOID,HANDLE*);
376 DNS_STATUS WINAPI DnsAcquireContextHandle_W(DWORD,PVOID,HANDLE*);
377 DNS_STATUS WINAPI DnsExtractRecordsFromMessage_W(PDNS_MESSAGE_BUFFER,WORD,PDNS_RECORD*);
378 DNS_STATUS WINAPI DnsExtractRecordsFromMessage_UTF8(PDNS_MESSAGE_BUFFER,WORD,PDNS_RECORD*);
379 DNS_STATUS WINAPI DnsModifyRecordsInSet_A(PDNS_RECORD,PDNS_RECORD,DWORD,HANDLE,PIP4_ARRAY,PVOID);
380 DNS_STATUS WINAPI DnsModifyRecordsInSet_W(PDNS_RECORD,PDNS_RECORD,DWORD,HANDLE,PIP4_ARRAY,PVOID);
381 DNS_STATUS WINAPI DnsModifyRecordsInSet_UTF8(PDNS_RECORD,PDNS_RECORD,DWORD,HANDLE,PIP4_ARRAY,PVOID);
382 BOOL WINAPI DnsNameCompare_A(LPSTR,LPSTR);
383 BOOL WINAPI DnsNameCompare_W(LPWSTR,LPWSTR);
384 DNS_STATUS WINAPI DnsQuery_A(PCSTR,WORD,DWORD,PIP4_ARRAY,PDNS_RECORD*,PVOID*);
385 DNS_STATUS WINAPI DnsQuery_W(PCWSTR,WORD,DWORD,PIP4_ARRAY,PDNS_RECORD*,PVOID*);
386 DNS_STATUS WINAPI DnsQuery_UTF8(PCSTR,WORD,DWORD,PIP4_ARRAY,PDNS_RECORD*,PVOID*);
387 DNS_STATUS WINAPI DnsQueryConfig(DNS_CONFIG_TYPE,DWORD,PWSTR,PVOID,PVOID,PDWORD);
388 BOOL WINAPI DnsRecordCompare(PDNS_RECORD,PDNS_RECORD);
389 PDNS_RECORD WINAPI DnsRecordCopyEx(PDNS_RECORD,DNS_CHARSET,DNS_CHARSET);
390 void WINAPI DnsRecordListFree(PDNS_RECORD,DNS_FREE_TYPE);
391 BOOL WINAPI DnsRecordSetCompare(PDNS_RECORD,PDNS_RECORD,PDNS_RECORD*,PDNS_RECORD*);
392 PDNS_RECORD WINAPI DnsRecordSetCopyEx(PDNS_RECORD,DNS_CHARSET,DNS_CHARSET);
393 PDNS_RECORD WINAPI DnsRecordSetDetach(PDNS_RECORD);
394 void WINAPI DnsReleaseContextHandle(HANDLE);
395 DNS_STATUS WINAPI DnsReplaceRecordSetA(PDNS_RECORD,DWORD,HANDLE,PIP4_ARRAY,PVOID);
396 DNS_STATUS WINAPI DnsReplaceRecordSetW(PDNS_RECORD,DWORD,HANDLE,PIP4_ARRAY,PVOID);
397 DNS_STATUS WINAPI DnsReplaceRecordSetUTF8(PDNS_RECORD,DWORD,HANDLE,PIP4_ARRAY,PVOID);
398 DNS_STATUS WINAPI DnsValidateName_A(LPCSTR,DNS_NAME_FORMAT);
399 DNS_STATUS WINAPI DnsValidateName_W(LPCWSTR, DNS_NAME_FORMAT);
400 DNS_STATUS WINAPI DnsValidateName_UTF8(LPCSTR,DNS_NAME_FORMAT);
401 BOOL WINAPI DnsWriteQuestionToBuffer_W(PDNS_MESSAGE_BUFFER,LPDWORD,LPWSTR,WORD,WORD,BOOL);
402 BOOL WINAPI DnsWriteQuestionToBuffer_UTF8(PDNS_MESSAGE_BUFFER,LPDWORD,LPSTR,WORD,WORD,BOOL);
403
404 #ifdef UNICODE
405 #define DnsAcquireContextHandle DnsAcquireContextHandle_W
406 #define DnsModifyRecordsInSet DnsModifyRecordsInSet_W
407 #define DnsNameCompare DnsNameCompare_W
408 #define DnsQuery DnsQuery_W
409 #define DnsReplaceRecordSet DnsReplaceRecordSetW
410 #define DnsValidateName DnsValidateName_W
411 #else
412 #define DnsAcquireContextHandle DnsAcquireContextHandle_A
413 #define DnsModifyRecordsInSet DnsModifyRecordsInSet_A
414 #define DnsNameCompare DnsNameCompare_A
415 #define DnsQuery DnsQuery_A
416 #define DnsReplaceRecordSet DnsReplaceRecordSetA
417 #define DnsValidateName DnsValidateName_A
418 #endif
419
420 #endif /* RC_INVOKED */
421
422 #ifdef __cplusplus
423 }
424 #endif
425
426 #endif /* _WINDNS_H */