comparison fuhtark_test/include/winapi/windns.h @ 1500:91c8c3b7cbf0

add: futhark tests for generating vulkan api
author sam <sam@basx.dev>
date Wed, 26 Nov 2025 21:36:48 +0700
parents
children
comparison
equal deleted inserted replaced
1499:1f58458b7ef7 1500:91c8c3b7cbf0
1 /**
2 * This file has no copyright assigned and is placed in the Public Domain.
3 * This file is part of the w64 mingw-runtime package.
4 * No warranty is given; refer to the file DISCLAIMER within this package.
5 */
6 #ifndef _WINDNS_INCLUDED_
7 #define _WINDNS_INCLUDED_
8
9 #ifdef __cplusplus
10 extern "C" {
11 #endif
12
13 __MINGW_EXTENSION typedef unsigned __int64 QWORD,*PQWORD;
14 typedef LONG DNS_STATUS,*PDNS_STATUS;
15 typedef DWORD IP4_ADDRESS,*PIP4_ADDRESS;
16
17 #define SIZEOF_IP4_ADDRESS (4)
18 #define IP4_ADDRESS_STRING_LENGTH (15)
19 #define IP4_ADDRESS_STRING_BUFFER_LENGTH (16)
20
21 typedef struct _IP4_ARRAY {
22 DWORD AddrCount;
23 IP4_ADDRESS AddrArray[1];
24 } IP4_ARRAY,*PIP4_ARRAY;
25
26 typedef union {
27 #ifdef _WIN64
28 QWORD IP6Qword[2];
29 #endif
30 DWORD IP6Dword[4];
31 WORD IP6Word[8];
32 BYTE IP6Byte[16];
33 #ifdef IN6_ADDR
34 IN6_ADDR In6;
35 #endif
36 } IP6_ADDRESS,*PIP6_ADDRESS;
37
38 #undef IP6_ADDRESS_STRING_LENGTH
39 #define IP6_ADDRESS_STRING_LENGTH (47)
40 #define IP6_ADDRESS_STRING_BUFFER_LENGTH (48)
41
42 #define INLINE_WORD_FLIP(out,in) { WORD _in = (in); (out) = (_in << 8) | (_in >> 8); }
43 #define INLINE_HTONS(out,in) INLINE_WORD_FLIP(out,in)
44 #define INLINE_NTOHS(out,in) INLINE_WORD_FLIP(out,in)
45 #define INLINE_DWORD_FLIP(out,in) { DWORD _in = (in); (out) = ((_in << 8) & 0x00ff0000) | (_in << 24) | ((_in >> 8) & 0x0000ff00) | (_in >> 24); }
46 #define INLINE_NTOHL(out,in) INLINE_DWORD_FLIP(out,in)
47 #define INLINE_HTONL(out,in) INLINE_DWORD_FLIP(out,in)
48 #define INLINE_WRITE_FLIPPED_WORD(pout,in) INLINE_WORD_FLIP(*((UNALIGNED WORD *)(pout)),in)
49 #define INLINE_WRITE_FLIPPED_DWORD(pout,in) INLINE_DWORD_FLIP(*((UNALIGNED DWORD *)(pout)),in)
50
51 #define DNS_PORT_HOST_ORDER (0x0035)
52 #define DNS_PORT_NET_ORDER (0x3500)
53 #define DNS_RFC_MAX_UDP_PACKET_LENGTH (512)
54 #define DNS_MAX_NAME_LENGTH (255)
55 #define DNS_MAX_LABEL_LENGTH (63)
56 #define DNS_MAX_NAME_BUFFER_LENGTH (256)
57 #define DNS_MAX_LABEL_BUFFER_LENGTH (64)
58 #define DNS_IP4_REVERSE_DOMAIN_STRING_A ("in-addr.arpa.")
59 #define DNS_IP4_REVERSE_DOMAIN_STRING_W (L"in-addr.arpa.")
60 #define DNS_MAX_IP4_REVERSE_NAME_LENGTH (IP4_ADDRESS_STRING_LENGTH+1+sizeof(DNS_IP4_REVERSE_DOMAIN_STRING_A))
61 #define DNS_MAX_IP4_REVERSE_NAME_BUFFER_LENGTH (DNS_MAX_IP4_REVERSE_NAME_LENGTH + 1)
62 #define DNS_IP6_REVERSE_DOMAIN_STRING_A ("ip6.arpa.")
63 #define DNS_IP6_REVERSE_DOMAIN_STRING_W (L"ip6.arpa.")
64 #define DNS_MAX_IP6_REVERSE_NAME_LENGTH (64+sizeof(DNS_IP6_REVERSE_DOMAIN_STRING_A))
65 #define DNS_MAX_IP6_REVERSE_NAME_BUFFER_LENGTH (DNS_MAX_IP6_REVERSE_NAME_LENGTH + 1)
66 #define DNS_MAX_REVERSE_NAME_LENGTH DNS_MAX_IP6_REVERSE_NAME_LENGTH
67 #define DNS_MAX_REVERSE_NAME_BUFFER_LENGTH DNS_MAX_IP6_REVERSE_NAME_BUFFER_LENGTH
68
69 #ifdef UNICODE
70 #define DNS_IP4_REVERSE_DOMAIN_STRING DNS_IP4_REVERSE_DOMAIN_STRING_W
71 #define DNS_IP6_REVERSE_DOMAIN_STRING DNS_IP6_REVERSE_DOMAIN_STRING_W
72 #else
73 #define DNS_IP4_REVERSE_DOMAIN_STRING DNS_IP4_REVERSE_DOMAIN_STRING_A
74 #define DNS_IP6_REVERSE_DOMAIN_STRING DNS_IP6_REVERSE_DOMAIN_STRING_A
75 #endif
76
77 #define DNS_MAX_TEXT_STRING_LENGTH (255)
78
79 #pragma pack(1)
80
81 typedef struct _DNS_HEADER {
82 WORD Xid;
83 BYTE RecursionDesired : 1;
84 BYTE Truncation : 1;
85 BYTE Authoritative : 1;
86 BYTE Opcode : 4;
87 BYTE IsResponse : 1;
88 BYTE ResponseCode : 4;
89 BYTE Reserved : 3;
90 BYTE RecursionAvailable : 1;
91 WORD QuestionCount;
92 WORD AnswerCount;
93 WORD NameServerCount;
94 WORD AdditionalCount;
95 } DNS_HEADER,*PDNS_HEADER;
96
97 #define DNS_HEADER_FLAGS(pHead) (*((PWORD)(pHead)+1))
98 #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); }
99 #define DNS_OFFSET_TO_QUESTION_NAME sizeof(DNS_HEADER)
100 #define DNS_COMPRESSED_QUESTION_NAME (0xC00C)
101 #define DNS_QUESTION_NAME_FROM_HEADER(_pHeader_) ((PCHAR)((PDNS_HEADER)(_pHeader_) + 1))
102 #define DNS_ANSWER_FROM_QUESTION(_pQuestion_) ((PCHAR)((PDNS_QUESTION)(_pQuestion_) + 1))
103
104 typedef struct _DNS_WIRE_QUESTION {
105 WORD QuestionType;
106 WORD QuestionClass;
107 } DNS_WIRE_QUESTION,*PDNS_WIRE_QUESTION;
108
109 typedef struct _DNS_WIRE_RECORD {
110 WORD RecordType;
111 WORD RecordClass;
112 DWORD TimeToLive;
113 WORD DataLength;
114 } DNS_WIRE_RECORD,*PDNS_WIRE_RECORD;
115
116 #pragma pack()
117
118 #define DNS_OPCODE_QUERY 0
119 #define DNS_OPCODE_IQUERY 1
120 #define DNS_OPCODE_SERVER_STATUS 2
121 #define DNS_OPCODE_UNKNOWN 3
122 #define DNS_OPCODE_NOTIFY 4
123 #define DNS_OPCODE_UPDATE 5
124
125 #define DNS_RCODE_NOERROR 0
126 #define DNS_RCODE_FORMERR 1
127 #define DNS_RCODE_SERVFAIL 2
128 #define DNS_RCODE_NXDOMAIN 3
129 #define DNS_RCODE_NOTIMPL 4
130 #define DNS_RCODE_REFUSED 5
131 #define DNS_RCODE_YXDOMAIN 6
132 #define DNS_RCODE_YXRRSET 7
133 #define DNS_RCODE_NXRRSET 8
134 #define DNS_RCODE_NOTAUTH 9
135 #define DNS_RCODE_NOTZONE 10
136 #define DNS_RCODE_MAX 15
137 #define DNS_RCODE_BADVERS 16
138 #define DNS_RCODE_BADSIG 16
139 #define DNS_RCODE_BADKEY 17
140 #define DNS_RCODE_BADTIME 18
141 #define DNS_RCODE_NO_ERROR DNS_RCODE_NOERROR
142 #define DNS_RCODE_FORMAT_ERROR DNS_RCODE_FORMERR
143 #define DNS_RCODE_SERVER_FAILURE DNS_RCODE_SERVFAIL
144 #define DNS_RCODE_NAME_ERROR DNS_RCODE_NXDOMAIN
145 #define DNS_RCODE_NOT_IMPLEMENTED DNS_RCODE_NOTIMPL
146
147 #define DNS_CLASS_INTERNET 0x0001
148 #define DNS_CLASS_CSNET 0x0002
149 #define DNS_CLASS_CHAOS 0x0003
150 #define DNS_CLASS_HESIOD 0x0004
151 #define DNS_CLASS_NONE 0x00fe
152 #define DNS_CLASS_ALL 0x00ff
153 #define DNS_CLASS_ANY 0x00ff
154
155 #define DNS_RCLASS_INTERNET 0x0100
156 #define DNS_RCLASS_CSNET 0x0200
157 #define DNS_RCLASS_CHAOS 0x0300
158 #define DNS_RCLASS_HESIOD 0x0400
159 #define DNS_RCLASS_NONE 0xfe00
160 #define DNS_RCLASS_ALL 0xff00
161 #define DNS_RCLASS_ANY 0xff00
162
163 #define DNS_TYPE_ZERO 0x0000
164 #define DNS_TYPE_A 0x0001
165 #define DNS_TYPE_NS 0x0002
166 #define DNS_TYPE_MD 0x0003
167 #define DNS_TYPE_MF 0x0004
168 #define DNS_TYPE_CNAME 0x0005
169 #define DNS_TYPE_SOA 0x0006
170 #define DNS_TYPE_MB 0x0007
171 #define DNS_TYPE_MG 0x0008
172 #define DNS_TYPE_MR 0x0009
173 #define DNS_TYPE_NULL 0x000a
174 #define DNS_TYPE_WKS 0x000b
175 #define DNS_TYPE_PTR 0x000c
176 #define DNS_TYPE_HINFO 0x000d
177 #define DNS_TYPE_MINFO 0x000e
178 #define DNS_TYPE_MX 0x000f
179 #define DNS_TYPE_TEXT 0x0010
180 #define DNS_TYPE_RP 0x0011
181 #define DNS_TYPE_AFSDB 0x0012
182 #define DNS_TYPE_X25 0x0013
183 #define DNS_TYPE_ISDN 0x0014
184 #define DNS_TYPE_RT 0x0015
185 #define DNS_TYPE_NSAP 0x0016
186 #define DNS_TYPE_NSAPPTR 0x0017
187 #define DNS_TYPE_SIG 0x0018
188 #define DNS_TYPE_KEY 0x0019
189 #define DNS_TYPE_PX 0x001a
190 #define DNS_TYPE_GPOS 0x001b
191 #define DNS_TYPE_AAAA 0x001c
192 #define DNS_TYPE_LOC 0x001d
193 #define DNS_TYPE_NXT 0x001e
194 #define DNS_TYPE_EID 0x001f
195 #define DNS_TYPE_NIMLOC 0x0020
196 #define DNS_TYPE_SRV 0x0021
197 #define DNS_TYPE_ATMA 0x0022
198 #define DNS_TYPE_NAPTR 0x0023
199 #define DNS_TYPE_KX 0x0024
200 #define DNS_TYPE_CERT 0x0025
201 #define DNS_TYPE_A6 0x0026
202 #define DNS_TYPE_DNAME 0x0027
203 #define DNS_TYPE_SINK 0x0028
204 #define DNS_TYPE_OPT 0x0029
205 #define DNS_TYPE_UINFO 0x0064
206 #define DNS_TYPE_UID 0x0065
207 #define DNS_TYPE_GID 0x0066
208 #define DNS_TYPE_UNSPEC 0x0067
209 #define DNS_TYPE_ADDRS 0x00f8
210 #define DNS_TYPE_TKEY 0x00f9
211 #define DNS_TYPE_TSIG 0x00fa
212 #define DNS_TYPE_IXFR 0x00fb
213 #define DNS_TYPE_AXFR 0x00fc
214 #define DNS_TYPE_MAILB 0x00fd
215 #define DNS_TYPE_MAILA 0x00fe
216 #define DNS_TYPE_ALL 0x00ff
217 #define DNS_TYPE_ANY 0x00ff
218 #define DNS_TYPE_WINS 0xff01
219 #define DNS_TYPE_WINSR 0xff02
220 #define DNS_TYPE_NBSTAT (DNS_TYPE_WINSR)
221
222 #define DNS_RTYPE_A 0x0100
223 #define DNS_RTYPE_NS 0x0200
224 #define DNS_RTYPE_MD 0x0300
225 #define DNS_RTYPE_MF 0x0400
226 #define DNS_RTYPE_CNAME 0x0500
227 #define DNS_RTYPE_SOA 0x0600
228 #define DNS_RTYPE_MB 0x0700
229 #define DNS_RTYPE_MG 0x0800
230 #define DNS_RTYPE_MR 0x0900
231 #define DNS_RTYPE_NULL 0x0a00
232 #define DNS_RTYPE_WKS 0x0b00
233 #define DNS_RTYPE_PTR 0x0c00
234 #define DNS_RTYPE_HINFO 0x0d00
235 #define DNS_RTYPE_MINFO 0x0e00
236 #define DNS_RTYPE_MX 0x0f00
237 #define DNS_RTYPE_TEXT 0x1000
238 #define DNS_RTYPE_RP 0x1100
239 #define DNS_RTYPE_AFSDB 0x1200
240 #define DNS_RTYPE_X25 0x1300
241 #define DNS_RTYPE_ISDN 0x1400
242 #define DNS_RTYPE_RT 0x1500
243 #define DNS_RTYPE_NSAP 0x1600
244 #define DNS_RTYPE_NSAPPTR 0x1700
245 #define DNS_RTYPE_SIG 0x1800
246 #define DNS_RTYPE_KEY 0x1900
247 #define DNS_RTYPE_PX 0x1a00
248 #define DNS_RTYPE_GPOS 0x1b00
249 #define DNS_RTYPE_AAAA 0x1c00
250 #define DNS_RTYPE_LOC 0x1d00
251 #define DNS_RTYPE_NXT 0x1e00
252 #define DNS_RTYPE_EID 0x1f00
253 #define DNS_RTYPE_NIMLOC 0x2000
254 #define DNS_RTYPE_SRV 0x2100
255 #define DNS_RTYPE_ATMA 0x2200
256 #define DNS_RTYPE_NAPTR 0x2300
257 #define DNS_RTYPE_KX 0x2400
258 #define DNS_RTYPE_CERT 0x2500
259 #define DNS_RTYPE_A6 0x2600
260 #define DNS_RTYPE_DNAME 0x2700
261 #define DNS_RTYPE_SINK 0x2800
262 #define DNS_RTYPE_OPT 0x2900
263 #define DNS_RTYPE_UINFO 0x6400
264 #define DNS_RTYPE_UID 0x6500
265 #define DNS_RTYPE_GID 0x6600
266 #define DNS_RTYPE_UNSPEC 0x6700
267 #define DNS_RTYPE_TKEY 0xf900
268 #define DNS_RTYPE_TSIG 0xfa00
269 #define DNS_RTYPE_IXFR 0xfb00
270 #define DNS_RTYPE_AXFR 0xfc00
271 #define DNS_RTYPE_MAILB 0xfd00
272 #define DNS_RTYPE_MAILA 0xfe00
273 #define DNS_RTYPE_ALL 0xff00
274 #define DNS_RTYPE_ANY 0xff00
275 #define DNS_RTYPE_WINS 0x01ff
276 #define DNS_RTYPE_WINSR 0x02ff
277
278 #ifndef ATMA_E164
279 #define DNS_ATMA_FORMAT_E164 1
280 #define DNS_ATMA_FORMAT_AESA 2
281 #define DNS_ATMA_MAX_ADDR_LENGTH (20)
282 #else
283 #define DNS_ATMA_FORMAT_E164 ATM_E164
284 #define DNS_ATMA_FORMAT_AESA ATM_AESA
285 #define DNS_ATMA_MAX_ADDR_LENGTH ATM_ADDR_SIZE
286 #endif
287
288 #define DNS_ATMA_AESA_ADDR_LENGTH (20)
289 #define DNS_ATMA_MAX_RECORD_LENGTH (DNS_ATMA_MAX_ADDR_LENGTH+1)
290
291 #define DNSSEC_ALGORITHM_RSAMD5 1
292 #define DNSSEC_ALGORITHM_NULL 253
293 #define DNSSEC_ALGORITHM_PRIVATE 254
294
295 #define DNSSEC_PROTOCOL_NONE 0
296 #define DNSSEC_PROTOCOL_TLS 1
297 #define DNSSEC_PROTOCOL_EMAIL 2
298 #define DNSSEC_PROTOCOL_DNSSEC 3
299 #define DNSSEC_PROTOCOL_IPSEC 4
300
301 #define DNSSEC_KEY_FLAG_NOAUTH 0x0001
302 #define DNSSEC_KEY_FLAG_NOCONF 0x0002
303 #define DNSSEC_KEY_FLAG_FLAG2 0x0004
304 #define DNSSEC_KEY_FLAG_EXTEND 0x0008
305 #define DNSSEC_KEY_FLAG_
306 #define DNSSEC_KEY_FLAG_FLAG4 0x0010
307 #define DNSSEC_KEY_FLAG_FLAG5 0x0020
308
309 #define DNSSEC_KEY_FLAG_USER 0x0000
310 #define DNSSEC_KEY_FLAG_ZONE 0x0040
311 #define DNSSEC_KEY_FLAG_HOST 0x0080
312 #define DNSSEC_KEY_FLAG_NTPE3 0x00c0
313
314 #define DNSSEC_KEY_FLAG_FLAG8 0x0100
315 #define DNSSEC_KEY_FLAG_FLAG9 0x0200
316 #define DNSSEC_KEY_FLAG_FLAG10 0x0400
317 #define DNSSEC_KEY_FLAG_FLAG11 0x0800
318
319 #define DNSSEC_KEY_FLAG_SIG0 0x0000
320 #define DNSSEC_KEY_FLAG_SIG1 0x1000
321 #define DNSSEC_KEY_FLAG_SIG2 0x2000
322 #define DNSSEC_KEY_FLAG_SIG3 0x3000
323 #define DNSSEC_KEY_FLAG_SIG4 0x4000
324 #define DNSSEC_KEY_FLAG_SIG5 0x5000
325 #define DNSSEC_KEY_FLAG_SIG6 0x6000
326 #define DNSSEC_KEY_FLAG_SIG7 0x7000
327 #define DNSSEC_KEY_FLAG_SIG8 0x8000
328 #define DNSSEC_KEY_FLAG_SIG9 0x9000
329 #define DNSSEC_KEY_FLAG_SIG10 0xa000
330 #define DNSSEC_KEY_FLAG_SIG11 0xb000
331 #define DNSSEC_KEY_FLAG_SIG12 0xc000
332 #define DNSSEC_KEY_FLAG_SIG13 0xd000
333 #define DNSSEC_KEY_FLAG_SIG14 0xe000
334 #define DNSSEC_KEY_FLAG_SIG15 0xf000
335
336 #define DNS_TKEY_MODE_SERVER_ASSIGN 1
337 #define DNS_TKEY_MODE_DIFFIE_HELLMAN 2
338 #define DNS_TKEY_MODE_GSS 3
339 #define DNS_TKEY_MODE_RESOLVER_ASSIGN 4
340
341 #define DNS_WINS_FLAG_SCOPE (0x80000000)
342 #define DNS_WINS_FLAG_LOCAL (0x00010000)
343
344 #define IS_WORD_ALIGNED(p) (!((UINT_PTR)(p) & (UINT_PTR)1))
345 #define IS_DWORD_ALIGNED(p) (!((UINT_PTR)(p) & (UINT_PTR)3))
346 #define IS_QWORD_ALIGNED(p) (!((UINT_PTR)(p) & (UINT_PTR)7))
347
348 typedef enum {
349 DnsConfigPrimaryDomainName_W,DnsConfigPrimaryDomainName_A,DnsConfigPrimaryDomainName_UTF8,DnsConfigAdapterDomainName_W,
350 DnsConfigAdapterDomainName_A,DnsConfigAdapterDomainName_UTF8,DnsConfigDnsServerList,DnsConfigSearchList,
351 DnsConfigAdapterInfo,DnsConfigPrimaryHostNameRegistrationEnabled,DnsConfigAdapterHostNameRegistrationEnabled,DnsConfigAddressRegistrationMaxCount,
352 DnsConfigHostName_W,DnsConfigHostName_A,DnsConfigHostName_UTF8,DnsConfigFullHostName_W,DnsConfigFullHostName_A,DnsConfigFullHostName_UTF8
353 } DNS_CONFIG_TYPE;
354
355 #define DNS_CONFIG_FLAG_ALLOC (0x00000001)
356
357 DNS_STATUS WINAPI DnsQueryConfig(DNS_CONFIG_TYPE Config,DWORD Flag,PWSTR pwsAdapterName,PVOID pReserved,PVOID pBuffer,PDWORD pBufferLength);
358
359 typedef struct {
360 IP4_ADDRESS IpAddress;
361 } DNS_A_DATA,*PDNS_A_DATA;
362
363 typedef struct {
364 PWSTR pNameHost;
365 } DNS_PTR_DATAW,*PDNS_PTR_DATAW;
366
367 typedef struct {
368 PSTR pNameHost;
369 } DNS_PTR_DATAA,*PDNS_PTR_DATAA;
370
371 typedef struct {
372 PWSTR pNamePrimaryServer;
373 PWSTR pNameAdministrator;
374 DWORD dwSerialNo;
375 DWORD dwRefresh;
376 DWORD dwRetry;
377 DWORD dwExpire;
378 DWORD dwDefaultTtl;
379 } DNS_SOA_DATAW,*PDNS_SOA_DATAW;
380
381 typedef struct {
382 PSTR pNamePrimaryServer;
383 PSTR pNameAdministrator;
384 DWORD dwSerialNo;
385 DWORD dwRefresh;
386 DWORD dwRetry;
387 DWORD dwExpire;
388 DWORD dwDefaultTtl;
389 } DNS_SOA_DATAA,*PDNS_SOA_DATAA;
390
391 typedef struct {
392 PWSTR pNameMailbox;
393 PWSTR pNameErrorsMailbox;
394 } DNS_MINFO_DATAW,*PDNS_MINFO_DATAW;
395
396 typedef struct {
397 PSTR pNameMailbox;
398 PSTR pNameErrorsMailbox;
399 } DNS_MINFO_DATAA,*PDNS_MINFO_DATAA;
400
401 typedef struct {
402 PWSTR pNameExchange;
403 WORD wPreference;
404 WORD Pad;
405 } DNS_MX_DATAW,*PDNS_MX_DATAW;
406
407 typedef struct {
408 PSTR pNameExchange;
409 WORD wPreference;
410 WORD Pad;
411 } DNS_MX_DATAA,*PDNS_MX_DATAA;
412
413 typedef struct {
414 DWORD dwStringCount;
415 PWSTR pStringArray[1];
416 } DNS_TXT_DATAW,*PDNS_TXT_DATAW;
417
418 typedef struct {
419 DWORD dwStringCount;
420 PSTR pStringArray[1];
421 } DNS_TXT_DATAA,*PDNS_TXT_DATAA;
422
423 typedef struct {
424 DWORD dwByteCount;
425 BYTE Data[1];
426 } DNS_NULL_DATA,*PDNS_NULL_DATA;
427
428 typedef struct {
429 IP4_ADDRESS IpAddress;
430 UCHAR chProtocol;
431 BYTE BitMask[1];
432 } DNS_WKS_DATA,*PDNS_WKS_DATA;
433
434 typedef struct {
435 IP6_ADDRESS Ip6Address;
436 } DNS_AAAA_DATA,*PDNS_AAAA_DATA;
437
438 typedef struct {
439 PWSTR pNameSigner;
440 WORD wTypeCovered;
441 BYTE chAlgorithm;
442 BYTE chLabelCount;
443 DWORD dwOriginalTtl;
444 DWORD dwExpiration;
445 DWORD dwTimeSigned;
446 WORD wKeyTag;
447 WORD Pad;
448 BYTE Signature[1];
449 } DNS_SIG_DATAW,*PDNS_SIG_DATAW;
450
451 typedef struct {
452 PSTR pNameSigner;
453 WORD wTypeCovered;
454 BYTE chAlgorithm;
455 BYTE chLabelCount;
456 DWORD dwOriginalTtl;
457 DWORD dwExpiration;
458 DWORD dwTimeSigned;
459 WORD wKeyTag;
460 WORD Pad;
461 BYTE Signature[1];
462 } DNS_SIG_DATAA,*PDNS_SIG_DATAA;
463
464 typedef struct {
465 WORD wFlags;
466 BYTE chProtocol;
467 BYTE chAlgorithm;
468 BYTE Key[1];
469 } DNS_KEY_DATA,*PDNS_KEY_DATA;
470
471 typedef struct {
472 WORD wVersion;
473 WORD wSize;
474 WORD wHorPrec;
475 WORD wVerPrec;
476 DWORD dwLatitude;
477 DWORD dwLongitude;
478 DWORD dwAltitude;
479 } DNS_LOC_DATA,*PDNS_LOC_DATA;
480
481 typedef struct {
482 PWSTR pNameNext;
483 WORD wNumTypes;
484 WORD wTypes[1];
485 } DNS_NXT_DATAW,*PDNS_NXT_DATAW;
486
487 typedef struct {
488 PSTR pNameNext;
489 WORD wNumTypes;
490 WORD wTypes[1];
491 } DNS_NXT_DATAA,*PDNS_NXT_DATAA;
492
493 typedef struct {
494 PWSTR pNameTarget;
495 WORD wPriority;
496 WORD wWeight;
497 WORD wPort;
498 WORD Pad;
499 } DNS_SRV_DATAW,*PDNS_SRV_DATAW;
500
501 typedef struct {
502 PSTR pNameTarget;
503 WORD wPriority;
504 WORD wWeight;
505 WORD wPort;
506 WORD Pad;
507 } DNS_SRV_DATAA,*PDNS_SRV_DATAA;
508
509 typedef struct {
510 BYTE AddressType;
511 BYTE Address[DNS_ATMA_MAX_ADDR_LENGTH ];
512 } DNS_ATMA_DATA,*PDNS_ATMA_DATA;
513
514 typedef struct {
515 PWSTR pNameAlgorithm;
516 PBYTE pAlgorithmPacket;
517 PBYTE pKey;
518 PBYTE pOtherData;
519 DWORD dwCreateTime;
520 DWORD dwExpireTime;
521 WORD wMode;
522 WORD wError;
523 WORD wKeyLength;
524 WORD wOtherLength;
525 UCHAR cAlgNameLength;
526 WINBOOL bPacketPointers;
527 } DNS_TKEY_DATAW,*PDNS_TKEY_DATAW;
528
529 typedef struct {
530 PSTR pNameAlgorithm;
531 PBYTE pAlgorithmPacket;
532 PBYTE pKey;
533 PBYTE pOtherData;
534 DWORD dwCreateTime;
535 DWORD dwExpireTime;
536 WORD wMode;
537 WORD wError;
538 WORD wKeyLength;
539 WORD wOtherLength;
540 UCHAR cAlgNameLength;
541 WINBOOL bPacketPointers;
542 } DNS_TKEY_DATAA,*PDNS_TKEY_DATAA;
543
544 typedef struct {
545 PWSTR pNameAlgorithm;
546 PBYTE pAlgorithmPacket;
547 PBYTE pSignature;
548 PBYTE pOtherData;
549 LONGLONG i64CreateTime;
550 WORD wFudgeTime;
551 WORD wOriginalXid;
552 WORD wError;
553 WORD wSigLength;
554 WORD wOtherLength;
555 UCHAR cAlgNameLength;
556 WINBOOL bPacketPointers;
557 } DNS_TSIG_DATAW,*PDNS_TSIG_DATAW;
558
559 typedef struct {
560 PSTR pNameAlgorithm;
561 PBYTE pAlgorithmPacket;
562 PBYTE pSignature;
563 PBYTE pOtherData;
564 LONGLONG i64CreateTime;
565 WORD wFudgeTime;
566 WORD wOriginalXid;
567 WORD wError;
568 WORD wSigLength;
569 WORD wOtherLength;
570 UCHAR cAlgNameLength;
571 WINBOOL bPacketPointers;
572 } DNS_TSIG_DATAA,*PDNS_TSIG_DATAA;
573
574 typedef struct {
575 DWORD dwMappingFlag;
576 DWORD dwLookupTimeout;
577 DWORD dwCacheTimeout;
578 DWORD cWinsServerCount;
579 IP4_ADDRESS WinsServers[1];
580 } DNS_WINS_DATA,*PDNS_WINS_DATA;
581
582 typedef struct {
583 DWORD dwMappingFlag;
584 DWORD dwLookupTimeout;
585 DWORD dwCacheTimeout;
586 PWSTR pNameResultDomain;
587 } DNS_WINSR_DATAW,*PDNS_WINSR_DATAW;
588
589 typedef struct {
590 DWORD dwMappingFlag;
591 DWORD dwLookupTimeout;
592 DWORD dwCacheTimeout;
593 PSTR pNameResultDomain;
594 } DNS_WINSR_DATAA,*PDNS_WINSR_DATAA;
595
596 #ifdef UNICODE
597 typedef DNS_PTR_DATAW DNS_PTR_DATA,*PDNS_PTR_DATA;
598 typedef DNS_SOA_DATAW DNS_SOA_DATA,*PDNS_SOA_DATA;
599 typedef DNS_MINFO_DATAW DNS_MINFO_DATA,*PDNS_MINFO_DATA;
600 typedef DNS_MX_DATAW DNS_MX_DATA,*PDNS_MX_DATA;
601 typedef DNS_TXT_DATAW DNS_TXT_DATA,*PDNS_TXT_DATA;
602 typedef DNS_SIG_DATAW DNS_SIG_DATA,*PDNS_SIG_DATA;
603 typedef DNS_NXT_DATAW DNS_NXT_DATA,*PDNS_NXT_DATA;
604 typedef DNS_SRV_DATAW DNS_SRV_DATA,*PDNS_SRV_DATA;
605 typedef DNS_TKEY_DATAW DNS_TKEY_DATA,*PDNS_TKEY_DATA;
606 typedef DNS_TSIG_DATAW DNS_TSIG_DATA,*PDNS_TSIG_DATA;
607 typedef DNS_WINSR_DATAW DNS_WINSR_DATA,*PDNS_WINSR_DATA;
608 #else
609 typedef DNS_PTR_DATAA DNS_PTR_DATA,*PDNS_PTR_DATA;
610 typedef DNS_SOA_DATAA DNS_SOA_DATA,*PDNS_SOA_DATA;
611 typedef DNS_MINFO_DATAA DNS_MINFO_DATA,*PDNS_MINFO_DATA;
612 typedef DNS_MX_DATAA DNS_MX_DATA,*PDNS_MX_DATA;
613 typedef DNS_TXT_DATAA DNS_TXT_DATA,*PDNS_TXT_DATA;
614 typedef DNS_SIG_DATAA DNS_SIG_DATA,*PDNS_SIG_DATA;
615 typedef DNS_NXT_DATAA DNS_NXT_DATA,*PDNS_NXT_DATA;
616 typedef DNS_SRV_DATAA DNS_SRV_DATA,*PDNS_SRV_DATA;
617 typedef DNS_TKEY_DATAA DNS_TKEY_DATA,*PDNS_TKEY_DATA;
618 typedef DNS_TSIG_DATAA DNS_TSIG_DATA,*PDNS_TSIG_DATA;
619 typedef DNS_WINSR_DATAA DNS_WINSR_DATA,*PDNS_WINSR_DATA;
620 #endif
621
622 #define DNS_TEXT_RECORD_LENGTH(StringCount) (FIELD_OFFSET(DNS_TXT_DATA,pStringArray) + ((StringCount) *sizeof(PCHAR)))
623 #define DNS_NULL_RECORD_LENGTH(ByteCount) (FIELD_OFFSET(DNS_NULL_DATA,Data) + (ByteCount))
624 #define DNS_WKS_RECORD_LENGTH(ByteCount) (FIELD_OFFSET(DNS_WKS_DATA,BitMask) + (ByteCount))
625 #define DNS_WINS_RECORD_LENGTH(IpCount) (FIELD_OFFSET(DNS_WINS_DATA,WinsServers) + ((IpCount) *sizeof(IP4_ADDRESS)))
626
627 typedef struct _DnsRecordFlags {
628 DWORD Section : 2;
629 DWORD Delete : 1;
630 DWORD CharSet : 2;
631 DWORD Unused : 3;
632 DWORD Reserved : 24;
633 } DNS_RECORD_FLAGS;
634
635 typedef enum _DnsSection {
636 DnsSectionQuestion,DnsSectionAnswer,DnsSectionAuthority,DnsSectionAddtional
637 } DNS_SECTION;
638
639 #define DnsSectionZone DnsSectionQuestion
640 #define DnsSectionPrereq DnsSectionAnswer
641 #define DnsSectionUpdate DnsSectionAuthority
642
643 #define DNSREC_SECTION (0x00000003)
644 #define DNSREC_QUESTION (0x00000000)
645 #define DNSREC_ANSWER (0x00000001)
646 #define DNSREC_AUTHORITY (0x00000002)
647 #define DNSREC_ADDITIONAL (0x00000003)
648
649 #define DNSREC_ZONE (0x00000000)
650 #define DNSREC_PREREQ (0x00000001)
651 #define DNSREC_UPDATE (0x00000002)
652
653 #define DNSREC_DELETE (0x00000004)
654 #define DNSREC_NOEXIST (0x00000004)
655
656 typedef struct _DnsRecordW {
657 struct _DnsRecordW *pNext;
658 PWSTR pName;
659 WORD wType;
660 WORD wDataLength;
661 union {
662 DWORD DW;
663 DNS_RECORD_FLAGS S;
664 } Flags;
665 DWORD dwTtl;
666 DWORD dwReserved;
667 union {
668 DNS_A_DATA A;
669 DNS_SOA_DATAW SOA,Soa;
670 DNS_PTR_DATAW PTR,Ptr,NS,Ns,CNAME,Cname,MB,Mb,MD,Md,MF,Mf,MG,Mg,MR,Mr;
671 DNS_MINFO_DATAW MINFO,Minfo,RP,Rp;
672 DNS_MX_DATAW MX,Mx,AFSDB,Afsdb,RT,Rt;
673 DNS_TXT_DATAW HINFO,Hinfo,ISDN,Isdn,TXT,Txt,X25;
674 DNS_NULL_DATA Null;
675 DNS_WKS_DATA WKS,Wks;
676 DNS_AAAA_DATA AAAA;
677 DNS_KEY_DATA KEY,Key;
678 DNS_SIG_DATAW SIG,Sig;
679 DNS_ATMA_DATA ATMA,Atma;
680 DNS_NXT_DATAW NXT,Nxt;
681 DNS_SRV_DATAW SRV,Srv;
682 DNS_TKEY_DATAW TKEY,Tkey;
683 DNS_TSIG_DATAW TSIG,Tsig;
684 DNS_WINS_DATA WINS,Wins;
685 DNS_WINSR_DATAW WINSR,WinsR,NBSTAT,Nbstat;
686 } Data;
687 } DNS_RECORDW,*PDNS_RECORDW;
688
689 typedef struct _DnsRecordA {
690 struct _DnsRecordA *pNext;
691 PSTR pName;
692 WORD wType;
693 WORD wDataLength;
694 union {
695 DWORD DW;
696 DNS_RECORD_FLAGS S;
697 } Flags;
698 DWORD dwTtl;
699 DWORD dwReserved;
700 union {
701 DNS_A_DATA A;
702 DNS_SOA_DATAA SOA,Soa;
703 DNS_PTR_DATAA PTR,Ptr,NS,Ns,CNAME,Cname,MB,Mb,MD,Md,MF,Mf,MG,Mg,MR,Mr;
704 DNS_MINFO_DATAA MINFO,Minfo,RP,Rp;
705 DNS_MX_DATAA MX,Mx,AFSDB,Afsdb,RT,Rt;
706 DNS_TXT_DATAA HINFO,Hinfo,ISDN,Isdn,TXT,Txt,X25;
707 DNS_NULL_DATA Null;
708 DNS_WKS_DATA WKS,Wks;
709 DNS_AAAA_DATA AAAA;
710 DNS_KEY_DATA KEY,Key;
711 DNS_SIG_DATAA SIG,Sig;
712 DNS_ATMA_DATA ATMA,Atma;
713 DNS_NXT_DATAA NXT,Nxt;
714 DNS_SRV_DATAA SRV,Srv;
715 DNS_TKEY_DATAA TKEY,Tkey;
716 DNS_TSIG_DATAA TSIG,Tsig;
717 DNS_WINS_DATA WINS,Wins;
718 DNS_WINSR_DATAA WINSR,WinsR,NBSTAT,Nbstat;
719 } Data;
720 } DNS_RECORDA,*PDNS_RECORDA;
721
722 #ifdef UNICODE
723 typedef DNS_RECORDW DNS_RECORD,*PDNS_RECORD;
724 #else
725 typedef DNS_RECORDA DNS_RECORD,*PDNS_RECORD;
726 #endif
727
728 #define DNS_RECORD_FIXED_SIZE FIELD_OFFSET(DNS_RECORD,Data)
729 #define SIZEOF_DNS_RECORD_HEADER DNS_RECORD_FIXED_SIZE
730
731 typedef struct _DnsRRSet {
732 PDNS_RECORD pFirstRR;
733 PDNS_RECORD pLastRR;
734 } DNS_RRSET,*PDNS_RRSET;
735
736 #define DNS_RRSET_INIT(rrset) { PDNS_RRSET _prrset = &(rrset); _prrset->pFirstRR = NULL; _prrset->pLastRR = (PDNS_RECORD) &_prrset->pFirstRR; }
737 #define DNS_RRSET_ADD(rrset,pnewRR) { PDNS_RRSET _prrset = &(rrset); PDNS_RECORD _prrnew = (pnewRR); _prrset->pLastRR->pNext = _prrnew; _prrset->pLastRR = _prrnew; }
738 #define DNS_RRSET_TERMINATE(rrset) { PDNS_RRSET _prrset = &(rrset); _prrset->pLastRR->pNext = NULL; }
739
740 typedef enum _DNS_CHARSET {
741 DnsCharSetUnknown,DnsCharSetUnicode,DnsCharSetUtf8,DnsCharSetAnsi
742 } DNS_CHARSET;
743
744 PDNS_RECORD WINAPI DnsRecordCopyEx(PDNS_RECORD pRecord,DNS_CHARSET CharSetIn,DNS_CHARSET CharSetOut);
745 PDNS_RECORD WINAPI DnsRecordSetCopyEx(PDNS_RECORD pRecordSet,DNS_CHARSET CharSetIn,DNS_CHARSET CharSetOut);
746
747 #ifdef UNICODE
748 #define DnsRecordCopy(pRR) DnsRecordCopyEx((pRR),DnsCharSetUnicode,DnsCharSetUnicode)
749 #define DnsRecordSetCopy(pRR) DnsRecordSetCopyEx((pRR),DnsCharSetUnicode,DnsCharSetUnicode)
750 #else
751 #define DnsRecordCopy(pRR) DnsRecordCopyEx((pRR),DnsCharSetAnsi,DnsCharSetAnsi)
752 #define DnsRecordSetCopy(pRR) DnsRecordSetCopyEx((pRR),DnsCharSetAnsi,DnsCharSetAnsi)
753 #endif
754
755 WINBOOL WINAPI DnsRecordCompare(PDNS_RECORD pRecord1,PDNS_RECORD pRecord2);
756 WINBOOL WINAPI DnsRecordSetCompare(PDNS_RECORD pRR1,PDNS_RECORD pRR2,PDNS_RECORD *ppDiff1,PDNS_RECORD *ppDiff2);
757 PDNS_RECORD DnsRecordSetDetach(PDNS_RECORD pRecordList);
758
759 typedef enum {
760 DnsFreeFlat = 0,DnsFreeRecordList,DnsFreeParsedMessageFields
761 } DNS_FREE_TYPE;
762
763 VOID WINAPI DnsFree(PVOID pData,DNS_FREE_TYPE FreeType);
764
765 #define DnsFreeRecordListDeep DnsFreeRecordList
766
767 VOID WINAPI DnsRecordListFree(PDNS_RECORD pRecordList,DNS_FREE_TYPE FreeType);
768
769 #define DNS_QUERY_STANDARD 0x00000000
770 #define DNS_QUERY_ACCEPT_TRUNCATED_RESPONSE 0x00000001
771 #define DNS_QUERY_USE_TCP_ONLY 0x00000002
772 #define DNS_QUERY_NO_RECURSION 0x00000004
773 #define DNS_QUERY_BYPASS_CACHE 0x00000008
774 #define DNS_QUERY_NO_WIRE_QUERY 0x00000010
775 #define DNS_QUERY_NO_LOCAL_NAME 0x00000020
776 #define DNS_QUERY_NO_HOSTS_FILE 0x00000040
777 #define DNS_QUERY_NO_NETBT 0x00000080
778 #define DNS_QUERY_WIRE_ONLY 0x00000100
779 #define DNS_QUERY_RETURN_MESSAGE 0x00000200
780 #define DNS_QUERY_TREAT_AS_FQDN 0x00001000
781 #define DNS_QUERY_DONT_RESET_TTL_VALUES 0x00100000
782 #define DNS_QUERY_RESERVED 0xff000000
783 #define DNS_QUERY_CACHE_ONLY DNS_QUERY_NO_WIRE_QUERY
784
785 DNS_STATUS WINAPI DnsQuery_A(PCSTR pszName,WORD wType,DWORD Options,PIP4_ARRAY aipServers,PDNS_RECORD *ppQueryResults,PVOID *pReserved);
786 DNS_STATUS WINAPI DnsQuery_UTF8(PCSTR pszName,WORD wType,DWORD Options,PIP4_ARRAY aipServers,PDNS_RECORD *ppQueryResults,PVOID *pReserved);
787 DNS_STATUS WINAPI DnsQuery_W(PCWSTR pszName,WORD wType,DWORD Options,PIP4_ARRAY aipServers,PDNS_RECORD *ppQueryResults,PVOID *pReserved);
788
789 #ifdef UNICODE
790 #define DnsQuery DnsQuery_W
791 #else
792 #define DnsQuery DnsQuery_A
793 #endif
794
795 #define DNS_UPDATE_SECURITY_USE_DEFAULT 0x00000000
796 #define DNS_UPDATE_SECURITY_OFF 0x00000010
797 #define DNS_UPDATE_SECURITY_ON 0x00000020
798 #define DNS_UPDATE_SECURITY_ONLY 0x00000100
799 #define DNS_UPDATE_CACHE_SECURITY_CONTEXT 0x00000200
800 #define DNS_UPDATE_TEST_USE_LOCAL_SYS_ACCT 0x00000400
801 #define DNS_UPDATE_FORCE_SECURITY_NEGO 0x00000800
802 #define DNS_UPDATE_TRY_ALL_MASTER_SERVERS 0x00001000
803 #define DNS_UPDATE_SKIP_NO_UPDATE_ADAPTERS 0x00002000
804 #define DNS_UPDATE_REMOTE_SERVER 0x00004000
805 #define DNS_UPDATE_RESERVED 0xffff0000
806
807 #ifdef UNICODE
808 #define DnsAcquireContextHandle DnsAcquireContextHandle_W
809 #define DnsModifyRecordsInSet DnsModifyRecordsInSet_W
810 #define DnsReplaceRecordSet DnsReplaceRecordSetW
811 #define DnsValidateName(p,f) DnsValidateName_W((p),(f))
812 #define DnsNameCompare(n1,n2) DnsNameCompare_W((n1),(n2))
813 #else
814 #define DnsAcquireContextHandle DnsAcquireContextHandle_A
815 #define DnsModifyRecordsInSet DnsModifyRecordsInSet_A
816 #define DnsReplaceRecordSet DnsReplaceRecordSetA
817 #define DnsValidateName(p,f) DnsValidateName_A((p),(f))
818 #define DnsNameCompare(n1,n2) DnsNameCompare_A((n1),(n2))
819 #endif
820
821 DNS_STATUS WINAPI DnsAcquireContextHandle_W(DWORD CredentialFlags,PVOID pCredentials,PHANDLE pContextHandle);
822 DNS_STATUS WINAPI DnsAcquireContextHandle_A(DWORD CredentialFlags,PVOID pCredentials,PHANDLE pContextHandle);
823 VOID WINAPI DnsReleaseContextHandle(HANDLE hContext);
824 DNS_STATUS WINAPI DnsModifyRecordsInSet_W(PDNS_RECORD pAddRecords,PDNS_RECORD pDeleteRecords,DWORD Options,HANDLE hContext,PIP4_ARRAY pServerList,PVOID pReserved);
825 DNS_STATUS WINAPI DnsModifyRecordsInSet_A(PDNS_RECORD pAddRecords,PDNS_RECORD pDeleteRecords,DWORD Options,HANDLE hContext,PIP4_ARRAY pServerList,PVOID pReserved);
826 DNS_STATUS WINAPI DnsModifyRecordsInSet_UTF8(PDNS_RECORD pAddRecords,PDNS_RECORD pDeleteRecords,DWORD Options,HANDLE hContext,PIP4_ARRAY pServerList,PVOID pReserved);
827 DNS_STATUS WINAPI DnsReplaceRecordSetW(PDNS_RECORD pNewSet,DWORD Options,HANDLE hContext,PIP4_ARRAY pServerList,PVOID pReserved);
828 DNS_STATUS WINAPI DnsReplaceRecordSetA(PDNS_RECORD pNewSet,DWORD Options,HANDLE hContext,PIP4_ARRAY pServerList,PVOID pReserved);
829 DNS_STATUS WINAPI DnsReplaceRecordSetUTF8(PDNS_RECORD pNewSet,DWORD Options,HANDLE hContext,PIP4_ARRAY pServerList,PVOID pReserved);
830
831 typedef enum _DNS_NAME_FORMAT {
832 DnsNameDomain,DnsNameDomainLabel,DnsNameHostnameFull,DnsNameHostnameLabel,DnsNameWildcard,DnsNameSrvRecord
833 } DNS_NAME_FORMAT;
834
835 DNS_STATUS DnsValidateName_UTF8(LPCSTR pszName,DNS_NAME_FORMAT Format);
836 DNS_STATUS DnsValidateName_W(LPCWSTR pwszName,DNS_NAME_FORMAT Format);
837 DNS_STATUS DnsValidateName_A(LPCSTR pszName,DNS_NAME_FORMAT Format);
838 WINBOOL WINAPI DnsNameCompare_A(LPSTR pName1,LPSTR pName2);
839 WINBOOL WINAPI DnsNameCompare_W(LPWSTR pName1,LPWSTR pName2);
840
841 typedef struct _DNS_MESSAGE_BUFFER {
842 DNS_HEADER MessageHead;
843 CHAR MessageBody[1];
844 } DNS_MESSAGE_BUFFER,*PDNS_MESSAGE_BUFFER;
845
846 WINBOOL WINAPI DnsWriteQuestionToBuffer_W(PDNS_MESSAGE_BUFFER pDnsBuffer,PDWORD pdwBufferSize,LPWSTR pszName,WORD wType,WORD Xid,WINBOOL fRecursionDesired);
847 WINBOOL WINAPI DnsWriteQuestionToBuffer_UTF8(PDNS_MESSAGE_BUFFER pDnsBuffer,LPDWORD pdwBufferSize,LPSTR pszName,WORD wType,WORD Xid,WINBOOL fRecursionDesired);
848 DNS_STATUS WINAPI DnsExtractRecordsFromMessage_W(PDNS_MESSAGE_BUFFER pDnsBuffer,WORD wMessageLength,PDNS_RECORD *ppRecord);
849 DNS_STATUS WINAPI DnsExtractRecordsFromMessage_UTF8(PDNS_MESSAGE_BUFFER pDnsBuffer,WORD wMessageLength,PDNS_RECORD *ppRecord);
850
851 #ifdef __cplusplus
852 }
853 #endif
854 #endif