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