windns.h (44450B) - Raw
1 /** 2 * This file has no copyright assigned and is placed in the Public Domain. 3 * This file is part of the mingw-w64 runtime package. 4 * No warranty is given; refer to the file DISCLAIMER.PD within this package. 5 */ 6 #ifndef _WINDNS_INCLUDED_ 7 #define _WINDNS_INCLUDED_ 8 9 #include <_mingw_unicode.h> 10 11 #ifdef __cplusplus 12 extern "C" { 13 #endif 14 15 __MINGW_EXTENSION typedef unsigned __int64 QWORD,*PQWORD; 16 typedef LONG DNS_STATUS,*PDNS_STATUS; 17 typedef DWORD IP4_ADDRESS,*PIP4_ADDRESS; 18 19 #define SIZEOF_IP4_ADDRESS (4) 20 #define IP4_ADDRESS_STRING_LENGTH (15) 21 #define IP4_ADDRESS_STRING_BUFFER_LENGTH (16) 22 23 typedef struct _IP4_ARRAY { 24 DWORD AddrCount; 25 IP4_ADDRESS AddrArray[1]; 26 } IP4_ARRAY,*PIP4_ARRAY; 27 28 typedef union { 29 #ifdef _WIN64 30 QWORD IP6Qword[2]; 31 #endif 32 DWORD IP6Dword[4]; 33 WORD IP6Word[8]; 34 BYTE IP6Byte[16]; 35 #ifdef IN6_ADDR 36 IN6_ADDR In6; 37 #endif 38 } IP6_ADDRESS,*PIP6_ADDRESS; 39 40 #undef IP6_ADDRESS_STRING_LENGTH 41 #define IP6_ADDRESS_STRING_LENGTH (47) 42 #define IP6_ADDRESS_STRING_BUFFER_LENGTH (48) 43 #define DNS_ADDRESS_STRING_LENGTH (IP6_ADDRESS_STRING_LENGTH) 44 45 #define INLINE_WORD_FLIP(out,in) { WORD _in = (in); (out) = (_in << 8) | (_in >> 8); } 46 #define INLINE_HTONS(out,in) INLINE_WORD_FLIP(out,in) 47 #define INLINE_NTOHS(out,in) INLINE_WORD_FLIP(out,in) 48 #define INLINE_DWORD_FLIP(out,in) { DWORD _in = (in); (out) = ((_in << 8) & 0x00ff0000) | (_in << 24) | ((_in >> 8) & 0x0000ff00) | (_in >> 24); } 49 #define INLINE_NTOHL(out,in) INLINE_DWORD_FLIP(out,in) 50 #define INLINE_HTONL(out,in) INLINE_DWORD_FLIP(out,in) 51 #define INLINE_WRITE_FLIPPED_WORD(pout,in) INLINE_WORD_FLIP(*((UNALIGNED WORD *)(pout)),in) 52 #define INLINE_WRITE_FLIPPED_DWORD(pout,in) INLINE_DWORD_FLIP(*((UNALIGNED DWORD *)(pout)),in) 53 54 #define DNS_PORT_HOST_ORDER (0x0035) 55 #define DNS_PORT_NET_ORDER (0x3500) 56 #define DNS_RFC_MAX_UDP_PACKET_LENGTH (512) 57 #define DNS_MAX_NAME_LENGTH (255) 58 #define DNS_MAX_LABEL_LENGTH (63) 59 #define DNS_MAX_NAME_BUFFER_LENGTH (256) 60 #define DNS_MAX_LABEL_BUFFER_LENGTH (64) 61 #define DNS_IP4_REVERSE_DOMAIN_STRING_A ("in-addr.arpa.") 62 #define DNS_IP4_REVERSE_DOMAIN_STRING_W (L"in-addr.arpa.") 63 #define DNS_MAX_IP4_REVERSE_NAME_LENGTH (IP4_ADDRESS_STRING_LENGTH+1+sizeof(DNS_IP4_REVERSE_DOMAIN_STRING_A)) 64 #define DNS_MAX_IP4_REVERSE_NAME_BUFFER_LENGTH (DNS_MAX_IP4_REVERSE_NAME_LENGTH + 1) 65 #define DNS_IP6_REVERSE_DOMAIN_STRING_A ("ip6.arpa.") 66 #define DNS_IP6_REVERSE_DOMAIN_STRING_W (L"ip6.arpa.") 67 #define DNS_MAX_IP6_REVERSE_NAME_LENGTH (64+sizeof(DNS_IP6_REVERSE_DOMAIN_STRING_A)) 68 #define DNS_MAX_IP6_REVERSE_NAME_BUFFER_LENGTH (DNS_MAX_IP6_REVERSE_NAME_LENGTH + 1) 69 #define DNS_MAX_REVERSE_NAME_LENGTH DNS_MAX_IP6_REVERSE_NAME_LENGTH 70 #define DNS_MAX_REVERSE_NAME_BUFFER_LENGTH DNS_MAX_IP6_REVERSE_NAME_BUFFER_LENGTH 71 72 #define DNS_IP4_REVERSE_DOMAIN_STRING __MINGW_NAME_UAW(DNS_IP4_REVERSE_DOMAIN_STRING) 73 #define DNS_IP6_REVERSE_DOMAIN_STRING __MINGW_NAME_UAW(DNS_IP6_REVERSE_DOMAIN_STRING) 74 75 #define DNS_MAX_TEXT_STRING_LENGTH (255) 76 77 #pragma pack(1) 78 79 typedef struct _DNS_HEADER { 80 WORD Xid; 81 BYTE RecursionDesired : 1; 82 BYTE Truncation : 1; 83 BYTE Authoritative : 1; 84 BYTE Opcode : 4; 85 BYTE IsResponse : 1; 86 BYTE ResponseCode : 4; 87 BYTE CheckingDisabled : 1; 88 BYTE AuthenticatedData : 1; 89 BYTE Reserved : 1; 90 BYTE RecursionAvailable : 1; 91 WORD QuestionCount; 92 WORD AnswerCount; 93 WORD NameServerCount; 94 WORD AdditionalCount; 95 } DNS_HEADER, *PDNS_HEADER; 96 97 typedef struct _DNS_HEADER_EXT { 98 WORD Reserved : 15; 99 WORD DnssecOk : 1; 100 BYTE chRcode; 101 BYTE chVersion; 102 } DNS_HEADER_EXT, *PDNS_HEADER_EXT; 103 104 #define DNS_HEADER_FLAGS(pHead) (*((PWORD)(pHead)+1)) 105 #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); } 106 #define DNS_OFFSET_TO_QUESTION_NAME sizeof(DNS_HEADER) 107 #define DNS_COMPRESSED_QUESTION_NAME (0xC00C) 108 #define DNS_QUESTION_NAME_FROM_HEADER(_pHeader_) ((PCHAR)((PDNS_HEADER)(_pHeader_) + 1)) 109 #define DNS_ANSWER_FROM_QUESTION(_pQuestion_) ((PCHAR)((PDNS_QUESTION)(_pQuestion_) + 1)) 110 111 typedef struct _DNS_WIRE_QUESTION { 112 WORD QuestionType; 113 WORD QuestionClass; 114 } DNS_WIRE_QUESTION,*PDNS_WIRE_QUESTION; 115 116 typedef struct _DNS_WIRE_RECORD { 117 WORD RecordType; 118 WORD RecordClass; 119 DWORD TimeToLive; 120 WORD DataLength; 121 } DNS_WIRE_RECORD,*PDNS_WIRE_RECORD; 122 123 #pragma pack() 124 125 #define DNS_OPCODE_QUERY 0 126 #define DNS_OPCODE_IQUERY 1 127 #define DNS_OPCODE_SERVER_STATUS 2 128 #define DNS_OPCODE_UNKNOWN 3 129 #define DNS_OPCODE_NOTIFY 4 130 #define DNS_OPCODE_UPDATE 5 131 132 #define DNS_RCODE_NOERROR 0 133 #define DNS_RCODE_FORMERR 1 134 #define DNS_RCODE_SERVFAIL 2 135 #define DNS_RCODE_NXDOMAIN 3 136 #define DNS_RCODE_NOTIMPL 4 137 #define DNS_RCODE_REFUSED 5 138 #define DNS_RCODE_YXDOMAIN 6 139 #define DNS_RCODE_YXRRSET 7 140 #define DNS_RCODE_NXRRSET 8 141 #define DNS_RCODE_NOTAUTH 9 142 #define DNS_RCODE_NOTZONE 10 143 #define DNS_RCODE_MAX 15 144 #define DNS_RCODE_BADVERS 16 145 #define DNS_RCODE_BADSIG 16 146 #define DNS_RCODE_BADKEY 17 147 #define DNS_RCODE_BADTIME 18 148 #define DNS_RCODE_NO_ERROR DNS_RCODE_NOERROR 149 #define DNS_RCODE_FORMAT_ERROR DNS_RCODE_FORMERR 150 #define DNS_RCODE_SERVER_FAILURE DNS_RCODE_SERVFAIL 151 #define DNS_RCODE_NAME_ERROR DNS_RCODE_NXDOMAIN 152 #define DNS_RCODE_NOT_IMPLEMENTED DNS_RCODE_NOTIMPL 153 154 #define DNS_CLASS_INTERNET 0x0001 155 #define DNS_CLASS_CSNET 0x0002 156 #define DNS_CLASS_CHAOS 0x0003 157 #define DNS_CLASS_HESIOD 0x0004 158 #define DNS_CLASS_NONE 0x00fe 159 #define DNS_CLASS_ALL 0x00ff 160 #define DNS_CLASS_ANY 0x00ff 161 #define DNS_CLASS_UNICAST_RESPONSE 0x8000 162 163 #define DNS_RCLASS_INTERNET 0x0100 164 #define DNS_RCLASS_CSNET 0x0200 165 #define DNS_RCLASS_CHAOS 0x0300 166 #define DNS_RCLASS_HESIOD 0x0400 167 #define DNS_RCLASS_NONE 0xfe00 168 #define DNS_RCLASS_ALL 0xff00 169 #define DNS_RCLASS_ANY 0xff00 170 #define DNS_RCLASS_UNICAST_RESPONSE 0x0080 171 172 #define DNS_TYPE_ZERO 0x0000 173 #define DNS_TYPE_A 0x0001 174 #define DNS_TYPE_NS 0x0002 175 #define DNS_TYPE_MD 0x0003 176 #define DNS_TYPE_MF 0x0004 177 #define DNS_TYPE_CNAME 0x0005 178 #define DNS_TYPE_SOA 0x0006 179 #define DNS_TYPE_MB 0x0007 180 #define DNS_TYPE_MG 0x0008 181 #define DNS_TYPE_MR 0x0009 182 #define DNS_TYPE_NULL 0x000a 183 #define DNS_TYPE_WKS 0x000b 184 #define DNS_TYPE_PTR 0x000c 185 #define DNS_TYPE_HINFO 0x000d 186 #define DNS_TYPE_MINFO 0x000e 187 #define DNS_TYPE_MX 0x000f 188 #define DNS_TYPE_TEXT 0x0010 189 #define DNS_TYPE_RP 0x0011 190 #define DNS_TYPE_AFSDB 0x0012 191 #define DNS_TYPE_X25 0x0013 192 #define DNS_TYPE_ISDN 0x0014 193 #define DNS_TYPE_RT 0x0015 194 #define DNS_TYPE_NSAP 0x0016 195 #define DNS_TYPE_NSAPPTR 0x0017 196 #define DNS_TYPE_SIG 0x0018 197 #define DNS_TYPE_KEY 0x0019 198 #define DNS_TYPE_PX 0x001a 199 #define DNS_TYPE_GPOS 0x001b 200 #define DNS_TYPE_AAAA 0x001c 201 #define DNS_TYPE_LOC 0x001d 202 #define DNS_TYPE_NXT 0x001e 203 #define DNS_TYPE_EID 0x001f 204 #define DNS_TYPE_NIMLOC 0x0020 205 #define DNS_TYPE_SRV 0x0021 206 #define DNS_TYPE_ATMA 0x0022 207 #define DNS_TYPE_NAPTR 0x0023 208 #define DNS_TYPE_KX 0x0024 209 #define DNS_TYPE_CERT 0x0025 210 #define DNS_TYPE_A6 0x0026 211 #define DNS_TYPE_DNAME 0x0027 212 #define DNS_TYPE_SINK 0x0028 213 #define DNS_TYPE_OPT 0x0029 214 #define DNS_TYPE_DS 0x002b 215 #define DNS_TYPE_RRSIG 0x002e 216 #define DNS_TYPE_NSEC 0x002f 217 #define DNS_TYPE_DNSKEY 0x0030 218 #define DNS_TYPE_DHCID 0x0031 219 #define DNS_TYPE_NSEC3 0x0032 220 #define DNS_TYPE_NSEC3PARAM 0x0033 221 #define DNS_TYPE_TLSA 0x0034 222 #define DNS_TYPE_UINFO 0x0064 223 #define DNS_TYPE_UID 0x0065 224 #define DNS_TYPE_GID 0x0066 225 #define DNS_TYPE_UNSPEC 0x0067 226 #define DNS_TYPE_ADDRS 0x00f8 227 #define DNS_TYPE_TKEY 0x00f9 228 #define DNS_TYPE_TSIG 0x00fa 229 #define DNS_TYPE_IXFR 0x00fb 230 #define DNS_TYPE_AXFR 0x00fc 231 #define DNS_TYPE_MAILB 0x00fd 232 #define DNS_TYPE_MAILA 0x00fe 233 #define DNS_TYPE_ALL 0x00ff 234 #define DNS_TYPE_ANY 0x00ff 235 #define DNS_TYPE_WINS 0xff01 236 #define DNS_TYPE_WINSR 0xff02 237 #define DNS_TYPE_NBSTAT (DNS_TYPE_WINSR) 238 239 #define DNS_RTYPE_A 0x0100 240 #define DNS_RTYPE_NS 0x0200 241 #define DNS_RTYPE_MD 0x0300 242 #define DNS_RTYPE_MF 0x0400 243 #define DNS_RTYPE_CNAME 0x0500 244 #define DNS_RTYPE_SOA 0x0600 245 #define DNS_RTYPE_MB 0x0700 246 #define DNS_RTYPE_MG 0x0800 247 #define DNS_RTYPE_MR 0x0900 248 #define DNS_RTYPE_NULL 0x0a00 249 #define DNS_RTYPE_WKS 0x0b00 250 #define DNS_RTYPE_PTR 0x0c00 251 #define DNS_RTYPE_HINFO 0x0d00 252 #define DNS_RTYPE_MINFO 0x0e00 253 #define DNS_RTYPE_MX 0x0f00 254 #define DNS_RTYPE_TEXT 0x1000 255 #define DNS_RTYPE_RP 0x1100 256 #define DNS_RTYPE_AFSDB 0x1200 257 #define DNS_RTYPE_X25 0x1300 258 #define DNS_RTYPE_ISDN 0x1400 259 #define DNS_RTYPE_RT 0x1500 260 #define DNS_RTYPE_NSAP 0x1600 261 #define DNS_RTYPE_NSAPPTR 0x1700 262 #define DNS_RTYPE_SIG 0x1800 263 #define DNS_RTYPE_KEY 0x1900 264 #define DNS_RTYPE_PX 0x1a00 265 #define DNS_RTYPE_GPOS 0x1b00 266 #define DNS_RTYPE_AAAA 0x1c00 267 #define DNS_RTYPE_LOC 0x1d00 268 #define DNS_RTYPE_NXT 0x1e00 269 #define DNS_RTYPE_EID 0x1f00 270 #define DNS_RTYPE_NIMLOC 0x2000 271 #define DNS_RTYPE_SRV 0x2100 272 #define DNS_RTYPE_ATMA 0x2200 273 #define DNS_RTYPE_NAPTR 0x2300 274 #define DNS_RTYPE_KX 0x2400 275 #define DNS_RTYPE_CERT 0x2500 276 #define DNS_RTYPE_A6 0x2600 277 #define DNS_RTYPE_DNAME 0x2700 278 #define DNS_RTYPE_SINK 0x2800 279 #define DNS_RTYPE_OPT 0x2900 280 #define DNS_RTYPE_DS 0x2b00 281 #define DNS_RTYPE_RRSIG 0x2e00 282 #define DNS_RTYPE_NSEC 0x2f00 283 #define DNS_RTYPE_DNSKEY 0x3000 284 #define DNS_RTYPE_DHCID 0x3100 285 #define DNS_RTYPE_NSEC3 0x3200 286 #define DNS_RTYPE_NSEC3PARAM 0x3300 287 #define DNS_RTYPE_TLSA 0x3400 288 #define DNS_RTYPE_UINFO 0x6400 289 #define DNS_RTYPE_UID 0x6500 290 #define DNS_RTYPE_GID 0x6600 291 #define DNS_RTYPE_UNSPEC 0x6700 292 #define DNS_RTYPE_TKEY 0xf900 293 #define DNS_RTYPE_TSIG 0xfa00 294 #define DNS_RTYPE_IXFR 0xfb00 295 #define DNS_RTYPE_AXFR 0xfc00 296 #define DNS_RTYPE_MAILB 0xfd00 297 #define DNS_RTYPE_MAILA 0xfe00 298 #define DNS_RTYPE_ALL 0xff00 299 #define DNS_RTYPE_ANY 0xff00 300 #define DNS_RTYPE_WINS 0x01ff 301 #define DNS_RTYPE_WINSR 0x02ff 302 303 #ifndef ATMA_E164 304 #define DNS_ATMA_FORMAT_E164 1 305 #define DNS_ATMA_FORMAT_AESA 2 306 #define DNS_ATMA_MAX_ADDR_LENGTH (20) 307 #else 308 #define DNS_ATMA_FORMAT_E164 ATM_E164 309 #define DNS_ATMA_FORMAT_AESA ATM_AESA 310 #define DNS_ATMA_MAX_ADDR_LENGTH ATM_ADDR_SIZE 311 #endif 312 313 #define DNS_ATMA_AESA_ADDR_LENGTH (20) 314 #define DNS_ATMA_MAX_RECORD_LENGTH (DNS_ATMA_MAX_ADDR_LENGTH+1) 315 316 #define DNSSEC_ALGORITHM_RSAMD5 1 317 #define DNSSEC_ALGORITHM_RSASHA1 5 318 #define DNSSEC_ALGORITHM_RSASHA1_NSEC3 7 319 #define DNSSEC_ALGORITHM_RSASHA256 8 320 #define DNSSEC_ALGORITHM_RSASHA512 10 321 #define DNSSEC_ALGORITHM_ECDSAP256_SHA256 13 322 #define DNSSEC_ALGORITHM_ECDSAP384_SHA384 14 323 #define DNSSEC_ALGORITHM_NULL 253 324 #define DNSSEC_ALGORITHM_PRIVATE 254 325 326 #define DNSSEC_DIGEST_ALGORITHM_SHA1 1 327 #define DNSSEC_DIGEST_ALGORITHM_SHA256 2 328 #define DNSSEC_DIGEST_ALGORITHM_SHA384 4 329 330 #define DNSSEC_PROTOCOL_NONE 0 331 #define DNSSEC_PROTOCOL_TLS 1 332 #define DNSSEC_PROTOCOL_EMAIL 2 333 #define DNSSEC_PROTOCOL_DNSSEC 3 334 #define DNSSEC_PROTOCOL_IPSEC 4 335 336 #define DNSSEC_KEY_FLAG_NOAUTH 0x0001 337 #define DNSSEC_KEY_FLAG_NOCONF 0x0002 338 #define DNSSEC_KEY_FLAG_FLAG2 0x0004 339 #define DNSSEC_KEY_FLAG_EXTEND 0x0008 340 #define DNSSEC_KEY_FLAG_ 341 #define DNSSEC_KEY_FLAG_FLAG4 0x0010 342 #define DNSSEC_KEY_FLAG_FLAG5 0x0020 343 344 #define DNSSEC_KEY_FLAG_USER 0x0000 345 #define DNSSEC_KEY_FLAG_ZONE 0x0040 346 #define DNSSEC_KEY_FLAG_HOST 0x0080 347 #define DNSSEC_KEY_FLAG_NTPE3 0x00c0 348 349 #define DNSSEC_KEY_FLAG_FLAG8 0x0100 350 #define DNSSEC_KEY_FLAG_FLAG9 0x0200 351 #define DNSSEC_KEY_FLAG_FLAG10 0x0400 352 #define DNSSEC_KEY_FLAG_FLAG11 0x0800 353 354 #define DNSSEC_KEY_FLAG_SIG0 0x0000 355 #define DNSSEC_KEY_FLAG_SIG1 0x1000 356 #define DNSSEC_KEY_FLAG_SIG2 0x2000 357 #define DNSSEC_KEY_FLAG_SIG3 0x3000 358 #define DNSSEC_KEY_FLAG_SIG4 0x4000 359 #define DNSSEC_KEY_FLAG_SIG5 0x5000 360 #define DNSSEC_KEY_FLAG_SIG6 0x6000 361 #define DNSSEC_KEY_FLAG_SIG7 0x7000 362 #define DNSSEC_KEY_FLAG_SIG8 0x8000 363 #define DNSSEC_KEY_FLAG_SIG9 0x9000 364 #define DNSSEC_KEY_FLAG_SIG10 0xa000 365 #define DNSSEC_KEY_FLAG_SIG11 0xb000 366 #define DNSSEC_KEY_FLAG_SIG12 0xc000 367 #define DNSSEC_KEY_FLAG_SIG13 0xd000 368 #define DNSSEC_KEY_FLAG_SIG14 0xe000 369 #define DNSSEC_KEY_FLAG_SIG15 0xf000 370 371 #define DNS_TKEY_MODE_SERVER_ASSIGN 1 372 #define DNS_TKEY_MODE_DIFFIE_HELLMAN 2 373 #define DNS_TKEY_MODE_GSS 3 374 #define DNS_TKEY_MODE_RESOLVER_ASSIGN 4 375 376 #define DNS_WINS_FLAG_SCOPE (0x80000000) 377 #define DNS_WINS_FLAG_LOCAL (0x00010000) 378 379 #define IS_WORD_ALIGNED(p) (!((UINT_PTR)(p) & (UINT_PTR)1)) 380 #define IS_DWORD_ALIGNED(p) (!((UINT_PTR)(p) & (UINT_PTR)3)) 381 #define IS_QWORD_ALIGNED(p) (!((UINT_PTR)(p) & (UINT_PTR)7)) 382 383 typedef enum { 384 DnsConfigPrimaryDomainName_W, 385 DnsConfigPrimaryDomainName_A, 386 DnsConfigPrimaryDomainName_UTF8, 387 DnsConfigAdapterDomainName_W, 388 DnsConfigAdapterDomainName_A, 389 DnsConfigAdapterDomainName_UTF8, 390 DnsConfigDnsServerList, 391 DnsConfigSearchList, 392 DnsConfigAdapterInfo, 393 DnsConfigPrimaryHostNameRegistrationEnabled, 394 DnsConfigAdapterHostNameRegistrationEnabled, 395 DnsConfigAddressRegistrationMaxCount, 396 DnsConfigHostName_W, 397 DnsConfigHostName_A, 398 DnsConfigHostName_UTF8, 399 DnsConfigFullHostName_W, 400 DnsConfigFullHostName_A, 401 DnsConfigFullHostName_UTF8, 402 DnsConfigNameServer 403 } DNS_CONFIG_TYPE; 404 405 #define DNS_CONFIG_FLAG_ALLOC (0x00000001) 406 407 DNS_STATUS WINAPI DnsQueryConfig(DNS_CONFIG_TYPE Config,DWORD Flag,PWSTR pwsAdapterName,PVOID pReserved,PVOID pBuffer,PDWORD pBufferLength); 408 409 typedef struct { 410 IP4_ADDRESS IpAddress; 411 } DNS_A_DATA,*PDNS_A_DATA; 412 413 typedef struct { 414 PWSTR pNameHost; 415 } DNS_PTR_DATAW,*PDNS_PTR_DATAW; 416 417 typedef struct { 418 PSTR pNameHost; 419 } DNS_PTR_DATAA,*PDNS_PTR_DATAA; 420 421 typedef struct { 422 PWSTR pNamePrimaryServer; 423 PWSTR pNameAdministrator; 424 DWORD dwSerialNo; 425 DWORD dwRefresh; 426 DWORD dwRetry; 427 DWORD dwExpire; 428 DWORD dwDefaultTtl; 429 } DNS_SOA_DATAW,*PDNS_SOA_DATAW; 430 431 typedef struct { 432 PSTR pNamePrimaryServer; 433 PSTR pNameAdministrator; 434 DWORD dwSerialNo; 435 DWORD dwRefresh; 436 DWORD dwRetry; 437 DWORD dwExpire; 438 DWORD dwDefaultTtl; 439 } DNS_SOA_DATAA,*PDNS_SOA_DATAA; 440 441 typedef struct { 442 PWSTR pNameMailbox; 443 PWSTR pNameErrorsMailbox; 444 } DNS_MINFO_DATAW,*PDNS_MINFO_DATAW; 445 446 typedef struct { 447 PSTR pNameMailbox; 448 PSTR pNameErrorsMailbox; 449 } DNS_MINFO_DATAA,*PDNS_MINFO_DATAA; 450 451 typedef struct { 452 PWSTR pNameExchange; 453 WORD wPreference; 454 WORD Pad; 455 } DNS_MX_DATAW,*PDNS_MX_DATAW; 456 457 typedef struct { 458 PSTR pNameExchange; 459 WORD wPreference; 460 WORD Pad; 461 } DNS_MX_DATAA,*PDNS_MX_DATAA; 462 463 typedef struct { 464 DWORD dwStringCount; 465 PWSTR pStringArray[1]; 466 } DNS_TXT_DATAW,*PDNS_TXT_DATAW; 467 468 typedef struct { 469 DWORD dwStringCount; 470 PSTR pStringArray[1]; 471 } DNS_TXT_DATAA,*PDNS_TXT_DATAA; 472 473 typedef struct { 474 DWORD dwByteCount; 475 BYTE Data[1]; 476 } DNS_NULL_DATA,*PDNS_NULL_DATA; 477 478 typedef struct { 479 IP4_ADDRESS IpAddress; 480 UCHAR chProtocol; 481 BYTE BitMask[1]; 482 } DNS_WKS_DATA,*PDNS_WKS_DATA; 483 484 typedef struct { 485 IP6_ADDRESS Ip6Address; 486 } DNS_AAAA_DATA,*PDNS_AAAA_DATA; 487 488 typedef struct { 489 WORD wTypeCovered; 490 BYTE chAlgorithm; 491 BYTE chLabelCount; 492 DWORD dwOriginalTtl; 493 DWORD dwExpiration; 494 DWORD dwTimeSigned; 495 WORD wKeyTag; 496 WORD wSignatureLength; 497 PWSTR pNameSigner; 498 BYTE Signature[1]; 499 } DNS_SIG_DATAW, *PDNS_SIG_DATAW, DNS_RRSIG_DATAW, *PDNS_RRSIG_DATAW; 500 501 typedef struct { 502 WORD wTypeCovered; 503 BYTE chAlgorithm; 504 BYTE chLabelCount; 505 DWORD dwOriginalTtl; 506 DWORD dwExpiration; 507 DWORD dwTimeSigned; 508 WORD wKeyTag; 509 WORD wSignatureLength; 510 PSTR pNameSigner; 511 BYTE Signature[1]; 512 } DNS_SIG_DATAA, *PDNS_SIG_DATAA, DNS_RRSIG_DATAA, *PDNS_RRSIG_DATAA; 513 514 typedef struct { 515 WORD wFlags; 516 BYTE chProtocol; 517 BYTE chAlgorithm; 518 WORD wKeyLength; 519 WORD wPad; 520 BYTE Key[1]; 521 } DNS_KEY_DATA, *PDNS_KEY_DATA, DNS_DNSKEY_DATA, *PDNS_DNSKEY_DATA; 522 523 typedef struct { 524 DWORD dwByteCount; 525 BYTE DHCID[1]; 526 } DNS_DHCID_DATA, *PDNS_DHCID_DATA; 527 528 typedef struct { 529 PWSTR pNextDomainName; 530 WORD wTypeBitMapsLength; 531 WORD wPad; 532 BYTE TypeBitMaps[1]; 533 } DNS_NSEC_DATAW, *PDNS_NSEC_DATAW; 534 535 typedef struct { 536 PSTR pNextDomainName; 537 WORD wTypeBitMapsLength; 538 WORD wPad; 539 BYTE TypeBitMaps[1]; 540 } DNS_NSEC_DATAA, *PDNS_NSEC_DATAA; 541 542 typedef struct { 543 BYTE chAlgorithm; 544 BYTE bFlags; 545 WORD wIterations; 546 BYTE bSaltLength; 547 BYTE bHashLength; 548 WORD wTypeBitMapsLength; 549 BYTE chData[1]; 550 } DNS_NSEC3_DATA, *PDNS_NSEC3_DATA; 551 552 typedef struct { 553 BYTE chAlgorithm; 554 BYTE bFlags; 555 WORD wIterations; 556 BYTE bSaltLength; 557 BYTE bPad[3]; 558 BYTE pbSalt[1]; 559 } DNS_NSEC3PARAM_DATA, *PDNS_NSEC3PARAM_DATA; 560 561 typedef struct { 562 BYTE bCertUsage; 563 BYTE bSelector; 564 BYTE bMatchingType; 565 WORD bCertificateAssociationDataLength; 566 BYTE bPad[3]; 567 BYTE bCertificateAssociationData[1]; 568 } DNS_TLSA_DATA, *PDNS_TLSA_DATA; 569 570 typedef struct { 571 WORD wKeyTag; 572 BYTE chAlgorithm; 573 BYTE chDigestType; 574 WORD wDigestLength; 575 WORD wPad; 576 BYTE Digest[1]; 577 } DNS_DS_DATA, *PDNS_DS_DATA; 578 579 typedef struct { 580 WORD wDataLength; 581 WORD wPad; 582 BYTE Data[1]; 583 } DNS_OPT_DATA, *PDNS_OPT_DATA; 584 585 typedef struct { 586 WORD wVersion; 587 WORD wSize; 588 WORD wHorPrec; 589 WORD wVerPrec; 590 DWORD dwLatitude; 591 DWORD dwLongitude; 592 DWORD dwAltitude; 593 } DNS_LOC_DATA,*PDNS_LOC_DATA; 594 595 typedef struct { 596 PWSTR pNameNext; 597 WORD wNumTypes; 598 WORD wTypes[1]; 599 } DNS_NXT_DATAW,*PDNS_NXT_DATAW; 600 601 typedef struct { 602 PSTR pNameNext; 603 WORD wNumTypes; 604 WORD wTypes[1]; 605 } DNS_NXT_DATAA,*PDNS_NXT_DATAA; 606 607 typedef struct { 608 PWSTR pNameTarget; 609 WORD wPriority; 610 WORD wWeight; 611 WORD wPort; 612 WORD Pad; 613 } DNS_SRV_DATAW,*PDNS_SRV_DATAW; 614 615 typedef struct { 616 PSTR pNameTarget; 617 WORD wPriority; 618 WORD wWeight; 619 WORD wPort; 620 WORD Pad; 621 } DNS_SRV_DATAA,*PDNS_SRV_DATAA; 622 623 typedef struct { 624 WORD wOrder; 625 WORD wPreference; 626 PWSTR pFlags; 627 PWSTR pService; 628 PWSTR pRegularExpression; 629 PWSTR pReplacement; 630 } DNS_NAPTR_DATAW, *PDNS_NAPTR_DATAW; 631 632 typedef struct { 633 WORD wOrder; 634 WORD wPreference; 635 PSTR pFlags; 636 PSTR pService; 637 PSTR pRegularExpression; 638 PSTR pReplacement; 639 } DNS_NAPTR_DATAA, *PDNS_NAPTR_DATAA; 640 641 typedef struct { 642 BYTE AddressType; 643 BYTE Address[DNS_ATMA_MAX_ADDR_LENGTH ]; 644 } DNS_ATMA_DATA,*PDNS_ATMA_DATA; 645 646 typedef struct { 647 PWSTR pNameAlgorithm; 648 PBYTE pAlgorithmPacket; 649 PBYTE pKey; 650 PBYTE pOtherData; 651 DWORD dwCreateTime; 652 DWORD dwExpireTime; 653 WORD wMode; 654 WORD wError; 655 WORD wKeyLength; 656 WORD wOtherLength; 657 UCHAR cAlgNameLength; 658 WINBOOL bPacketPointers; 659 } DNS_TKEY_DATAW,*PDNS_TKEY_DATAW; 660 661 typedef struct { 662 PSTR pNameAlgorithm; 663 PBYTE pAlgorithmPacket; 664 PBYTE pKey; 665 PBYTE pOtherData; 666 DWORD dwCreateTime; 667 DWORD dwExpireTime; 668 WORD wMode; 669 WORD wError; 670 WORD wKeyLength; 671 WORD wOtherLength; 672 UCHAR cAlgNameLength; 673 WINBOOL bPacketPointers; 674 } DNS_TKEY_DATAA,*PDNS_TKEY_DATAA; 675 676 typedef struct { 677 PWSTR pNameAlgorithm; 678 PBYTE pAlgorithmPacket; 679 PBYTE pSignature; 680 PBYTE pOtherData; 681 LONGLONG i64CreateTime; 682 WORD wFudgeTime; 683 WORD wOriginalXid; 684 WORD wError; 685 WORD wSigLength; 686 WORD wOtherLength; 687 UCHAR cAlgNameLength; 688 WINBOOL bPacketPointers; 689 } DNS_TSIG_DATAW,*PDNS_TSIG_DATAW; 690 691 typedef struct { 692 PSTR pNameAlgorithm; 693 PBYTE pAlgorithmPacket; 694 PBYTE pSignature; 695 PBYTE pOtherData; 696 LONGLONG i64CreateTime; 697 WORD wFudgeTime; 698 WORD wOriginalXid; 699 WORD wError; 700 WORD wSigLength; 701 WORD wOtherLength; 702 UCHAR cAlgNameLength; 703 WINBOOL bPacketPointers; 704 } DNS_TSIG_DATAA,*PDNS_TSIG_DATAA; 705 706 typedef struct { 707 DWORD dwByteCount; 708 BYTE bData[1]; 709 } DNS_UNKNOWN_DATA, *PDNS_UNKNOWN_DATA; 710 711 typedef struct { 712 DWORD dwMappingFlag; 713 DWORD dwLookupTimeout; 714 DWORD dwCacheTimeout; 715 DWORD cWinsServerCount; 716 IP4_ADDRESS WinsServers[1]; 717 } DNS_WINS_DATA,*PDNS_WINS_DATA; 718 719 typedef struct { 720 DWORD dwMappingFlag; 721 DWORD dwLookupTimeout; 722 DWORD dwCacheTimeout; 723 PWSTR pNameResultDomain; 724 } DNS_WINSR_DATAW,*PDNS_WINSR_DATAW; 725 726 typedef struct { 727 DWORD dwMappingFlag; 728 DWORD dwLookupTimeout; 729 DWORD dwCacheTimeout; 730 PSTR pNameResultDomain; 731 } DNS_WINSR_DATAA,*PDNS_WINSR_DATAA; 732 733 __MINGW_TYPEDEF_AW(DNS_PTR_DATA) 734 __MINGW_TYPEDEF_AW(PDNS_PTR_DATA) 735 __MINGW_TYPEDEF_AW(DNS_SOA_DATA) 736 __MINGW_TYPEDEF_AW(PDNS_SOA_DATA) 737 __MINGW_TYPEDEF_AW(DNS_MINFO_DATA) 738 __MINGW_TYPEDEF_AW(PDNS_MINFO_DATA) 739 __MINGW_TYPEDEF_AW(DNS_MX_DATA) 740 __MINGW_TYPEDEF_AW(PDNS_MX_DATA) 741 __MINGW_TYPEDEF_AW(DNS_TXT_DATA) 742 __MINGW_TYPEDEF_AW(PDNS_TXT_DATA) 743 __MINGW_TYPEDEF_AW(DNS_SIG_DATA) 744 __MINGW_TYPEDEF_AW(PDNS_SIG_DATA) 745 __MINGW_TYPEDEF_AW(DNS_NXT_DATA) 746 __MINGW_TYPEDEF_AW(PDNS_NXT_DATA) 747 __MINGW_TYPEDEF_AW(DNS_SRV_DATA) 748 __MINGW_TYPEDEF_AW(PDNS_SRV_DATA) 749 __MINGW_TYPEDEF_AW(DNS_NAPTR_DATA) 750 __MINGW_TYPEDEF_AW(PDNS_NAPTR_DATA) 751 __MINGW_TYPEDEF_AW(DNS_RRSIG_DATA) 752 __MINGW_TYPEDEF_AW(PDNS_RRSIG_DATA) 753 __MINGW_TYPEDEF_AW(DNS_NSEC_DATA) 754 __MINGW_TYPEDEF_AW(PDNS_NSEC_DATA) 755 __MINGW_TYPEDEF_AW(DNS_TKEY_DATA) 756 __MINGW_TYPEDEF_AW(PDNS_TKEY_DATA) 757 __MINGW_TYPEDEF_AW(DNS_TSIG_DATA) 758 __MINGW_TYPEDEF_AW(PDNS_TSIG_DATA) 759 __MINGW_TYPEDEF_AW(DNS_WINSR_DATA) 760 __MINGW_TYPEDEF_AW(PDNS_WINSR_DATA) 761 762 #define DNS_TEXT_RECORD_LENGTH(StringCount) (FIELD_OFFSET(DNS_TXT_DATA,pStringArray) + ((StringCount) *sizeof(PCHAR))) 763 #define DNS_NULL_RECORD_LENGTH(ByteCount) (FIELD_OFFSET(DNS_NULL_DATA,Data) + (ByteCount)) 764 #define DNS_WKS_RECORD_LENGTH(ByteCount) (FIELD_OFFSET(DNS_WKS_DATA,BitMask) + (ByteCount)) 765 #define DNS_WINS_RECORD_LENGTH(IpCount) (FIELD_OFFSET(DNS_WINS_DATA,WinsServers) + ((IpCount) *sizeof(IP4_ADDRESS))) 766 #define DNS_KEY_RECORD_LENGTH(ByteCount) (FIELD_OFFSET(DNS_KEY_DATA,Key) + (ByteCount)) 767 #define DNS_SIG_RECORD_LENGTH(ByteCount) (FIELD_OFFSET(DNS_SIG_DATA,Signature) + (ByteCount)) 768 #define DNS_NSEC_RECORD_LENGTH(ByteCount) (FIELD_OFFSET(DNS_NSEC_DATA,TypeBitMaps) + (ByteCount)) 769 #define DNS_DS_RECORD_LENGTH(ByteCount) (FIELD_OFFSET(DNS_DS_DATA,Digest) + (ByteCount)) 770 #define DNS_OPT_RECORD_LENGTH(ByteCount) (FIELD_OFFSET(DNS_OPT_DATA,Data) + (ByteCount)) 771 #define DNS_DHCID_RECORD_LENGTH(ByteCount) (FIELD_OFFSET(DNS_DHCID_DATA,DHCID) + (ByteCount)) 772 #define DNS_NSEC3_RECORD_LENGTH(ByteCount) (FIELD_OFFSET(DNS_NSEC3_DATA,chData) + (ByteCount)) 773 #define DNS_NSEC3PARAM_RECORD_LENGTH(ByteCount) (FIELD_OFFSET(DNS_NSEC3PARAM_DATA,pbSalt) + (ByteCount)) 774 #define DNS_TLSA_RECORD_LENGTH(ByteCount) (FIELD_OFFSET(DNS_TLSA_DATA,bCertificateAssociationData) + (ByteCount)) 775 #define DNS_UNKNOWN_RECORD_LENGTH(ByteCount) (FIELD_OFFSET(DNS_UNKNOWN_DATA,bData) + (ByteCount)) 776 777 typedef struct _DnsRecordFlags { 778 DWORD Section : 2; 779 DWORD Delete : 1; 780 DWORD CharSet : 2; 781 DWORD Unused : 3; 782 DWORD Reserved : 24; 783 } DNS_RECORD_FLAGS; 784 785 typedef enum _DnsSection { 786 DnsSectionQuestion,DnsSectionAnswer,DnsSectionAuthority,DnsSectionAddtional 787 } DNS_SECTION; 788 789 #define DnsSectionZone DnsSectionQuestion 790 #define DnsSectionPrereq DnsSectionAnswer 791 #define DnsSectionUpdate DnsSectionAuthority 792 793 #define DNSREC_SECTION (0x00000003) 794 #define DNSREC_QUESTION (0x00000000) 795 #define DNSREC_ANSWER (0x00000001) 796 #define DNSREC_AUTHORITY (0x00000002) 797 #define DNSREC_ADDITIONAL (0x00000003) 798 799 #define DNSREC_ZONE (0x00000000) 800 #define DNSREC_PREREQ (0x00000001) 801 #define DNSREC_UPDATE (0x00000002) 802 803 #define DNSREC_DELETE (0x00000004) 804 #define DNSREC_NOEXIST (0x00000004) 805 806 typedef struct _DnsRecordW { 807 struct _DnsRecordW *pNext; 808 PWSTR pName; 809 WORD wType; 810 WORD wDataLength; 811 union { 812 DWORD DW; 813 DNS_RECORD_FLAGS S; 814 } Flags; 815 DWORD dwTtl; 816 DWORD dwReserved; 817 union { 818 DNS_A_DATA A; 819 DNS_SOA_DATAW SOA,Soa; 820 DNS_PTR_DATAW PTR,Ptr,NS,Ns,CNAME,Cname,DNAME,Dname,MB,Mb,MD,Md,MF,Mf,MG,Mg,MR,Mr; 821 DNS_MINFO_DATAW MINFO,Minfo,RP,Rp; 822 DNS_MX_DATAW MX,Mx,AFSDB,Afsdb,RT,Rt; 823 DNS_TXT_DATAW HINFO,Hinfo,ISDN,Isdn,TXT,Txt,X25; 824 DNS_NULL_DATA Null; 825 DNS_WKS_DATA WKS,Wks; 826 DNS_AAAA_DATA AAAA; 827 DNS_KEY_DATA KEY,Key; 828 DNS_SIG_DATAW SIG,Sig; 829 DNS_ATMA_DATA ATMA,Atma; 830 DNS_NXT_DATAW NXT,Nxt; 831 DNS_SRV_DATAW SRV,Srv; 832 DNS_NAPTR_DATAW NAPTR,Naptr; 833 DNS_OPT_DATA OPT,Opt; 834 DNS_DS_DATA DS,Ds; 835 DNS_RRSIG_DATAW RRSIG,Rrsig; 836 DNS_NSEC_DATAW NSEC,Nsec; 837 DNS_DNSKEY_DATA DNSKEY,Dnskey; 838 DNS_TKEY_DATAW TKEY,Tkey; 839 DNS_TSIG_DATAW TSIG,Tsig; 840 DNS_WINS_DATA WINS,Wins; 841 DNS_WINSR_DATAW WINSR,WinsR,NBSTAT,Nbstat; 842 DNS_DHCID_DATA DHCID; 843 DNS_NSEC3_DATA NSEC3,Nsec3; 844 DNS_NSEC3PARAM_DATA NSEC3PARAM,Nsec3Param; 845 DNS_TLSA_DATA TLSA,Tlsa; 846 DNS_UNKNOWN_DATA UNKNOWN,Unknown; 847 PBYTE pDataPtr; 848 } Data; 849 } DNS_RECORDW,*PDNS_RECORDW; 850 851 typedef struct _DnsRecordOptW { 852 struct _DnsRecordW *pNext; 853 PWSTR pName; 854 WORD wType; 855 WORD wDataLength; 856 union { 857 DWORD DW; 858 DNS_RECORD_FLAGS S; 859 } Flags; 860 DNS_HEADER_EXT ExtHeader; 861 WORD wPayloadSize; 862 WORD wReserved; 863 union { 864 DNS_OPT_DATA OPT,Opt; 865 } Data; 866 } DNS_RECORD_OPTW, *PDNS_RECORD_OPTW; 867 868 typedef struct _DnsRecordA { 869 struct _DnsRecordA *pNext; 870 PSTR pName; 871 WORD wType; 872 WORD wDataLength; 873 union { 874 DWORD DW; 875 DNS_RECORD_FLAGS S; 876 } Flags; 877 DWORD dwTtl; 878 DWORD dwReserved; 879 union { 880 DNS_A_DATA A; 881 DNS_SOA_DATAA SOA,Soa; 882 DNS_PTR_DATAA PTR,Ptr,NS,Ns,CNAME,Cname,DNAME,Dname,MB,Mb,MD,Md,MF,Mf,MG,Mg,MR,Mr; 883 DNS_MINFO_DATAA MINFO,Minfo,RP,Rp; 884 DNS_MX_DATAA MX,Mx,AFSDB,Afsdb,RT,Rt; 885 DNS_TXT_DATAA HINFO,Hinfo,ISDN,Isdn,TXT,Txt,X25; 886 DNS_NULL_DATA Null; 887 DNS_WKS_DATA WKS,Wks; 888 DNS_AAAA_DATA AAAA; 889 DNS_KEY_DATA KEY,Key; 890 DNS_SIG_DATAA SIG,Sig; 891 DNS_ATMA_DATA ATMA,Atma; 892 DNS_NXT_DATAA NXT,Nxt; 893 DNS_SRV_DATAA SRV,Srv; 894 DNS_NAPTR_DATAA NAPTR,Naptr; 895 DNS_OPT_DATA OPT,Opt; 896 DNS_DS_DATA DS,Ds; 897 DNS_RRSIG_DATAA RRSIG,Rrsig; 898 DNS_NSEC_DATAA NSEC,Nsec; 899 DNS_DNSKEY_DATA DNSKEY,Dnskey; 900 DNS_TKEY_DATAA TKEY,Tkey; 901 DNS_TSIG_DATAA TSIG,Tsig; 902 DNS_WINS_DATA WINS,Wins; 903 DNS_WINSR_DATAA WINSR,WinsR,NBSTAT,Nbstat; 904 DNS_DHCID_DATA DHCID; 905 DNS_NSEC3_DATA NSEC3,Nsec3; 906 DNS_NSEC3PARAM_DATA NSEC3PARAM,Nsec3Param; 907 DNS_TLSA_DATA TLSA,Tlsa; 908 DNS_UNKNOWN_DATA UNKNOWN,Unknown; 909 PBYTE pDataPtr; 910 } Data; 911 } DNS_RECORDA,*PDNS_RECORDA; 912 913 typedef struct _DnsRecordOptA { 914 struct _DnsRecordA *pNext; 915 PSTR pName; 916 WORD wType; 917 WORD wDataLength; 918 union { 919 DWORD DW; 920 DNS_RECORD_FLAGS S; 921 } Flags; 922 DNS_HEADER_EXT ExtHeader; 923 WORD wPayloadSize; 924 WORD wReserved; 925 union { 926 DNS_OPT_DATA OPT, Opt; 927 } Data; 928 } DNS_RECORD_OPTA, *PDNS_RECORD_OPTA; 929 930 #ifdef UNICODE 931 typedef DNS_RECORDW DNS_RECORD, *PDNS_RECORD; 932 typedef DNS_RECORD_OPTW DNS_RECORD_OPT, *PDNS_RECORD_OPT; 933 #else 934 typedef DNS_RECORDA DNS_RECORD, *PDNS_RECORD; 935 typedef DNS_RECORD_OPTA DNS_RECORD_OPT, *PDNS_RECORD_OPT; 936 #endif 937 938 #define DNS_RECORD_FIXED_SIZE FIELD_OFFSET(DNS_RECORD,Data) 939 #define SIZEOF_DNS_RECORD_HEADER DNS_RECORD_FIXED_SIZE 940 941 typedef struct _DnsRRSet { 942 PDNS_RECORD pFirstRR; 943 PDNS_RECORD pLastRR; 944 } DNS_RRSET,*PDNS_RRSET; 945 946 #define DNS_RRSET_INIT(rrset) { PDNS_RRSET _prrset = &(rrset); _prrset->pFirstRR = NULL; _prrset->pLastRR = (PDNS_RECORD) &_prrset->pFirstRR; } 947 #define DNS_RRSET_ADD(rrset,pnewRR) { PDNS_RRSET _prrset = &(rrset); PDNS_RECORD _prrnew = (pnewRR); _prrset->pLastRR->pNext = _prrnew; _prrset->pLastRR = _prrnew; } 948 #define DNS_RRSET_TERMINATE(rrset) { PDNS_RRSET _prrset = &(rrset); _prrset->pLastRR->pNext = NULL; } 949 950 typedef VOID (WINAPI *DNS_PROXY_COMPLETION_ROUTINE)(void *completionContext,DNS_STATUS status); 951 952 typedef enum DNS_PROXY_INFORMATION_TYPE { 953 DNS_PROXY_INFORMATION_DIRECT, 954 DNS_PROXY_INFORMATION_DEFAULT_SETTINGS, 955 DNS_PROXY_INFORMATION_PROXY_NAME, 956 DNS_PROXY_INFORMATION_DOES_NOT_EXIST 957 } DNS_PROXY_INFORMATION_TYPE; 958 959 typedef struct DNS_PROXY_INFORMATION { 960 ULONG version; 961 DNS_PROXY_INFORMATION_TYPE proxyInformationType; 962 PWSTR proxyName; 963 } DNS_PROXY_INFORMATION; 964 965 typedef enum _DNS_CHARSET { 966 DnsCharSetUnknown,DnsCharSetUnicode,DnsCharSetUtf8,DnsCharSetAnsi 967 } DNS_CHARSET; 968 969 PDNS_RECORD WINAPI DnsRecordCopyEx(PDNS_RECORD pRecord,DNS_CHARSET CharSetIn,DNS_CHARSET CharSetOut); 970 PDNS_RECORD WINAPI DnsRecordSetCopyEx(PDNS_RECORD pRecordSet,DNS_CHARSET CharSetIn,DNS_CHARSET CharSetOut); 971 972 #if defined(UNICODE) 973 #define DnsRecordCopy(pRR) DnsRecordCopyEx((pRR),DnsCharSetUnicode,DnsCharSetUnicode) 974 #define DnsRecordSetCopy(pRR) DnsRecordSetCopyEx((pRR),DnsCharSetUnicode,DnsCharSetUnicode) 975 #else 976 #define DnsRecordCopy(pRR) DnsRecordCopyEx((pRR),DnsCharSetAnsi,DnsCharSetAnsi) 977 #define DnsRecordSetCopy(pRR) DnsRecordSetCopyEx((pRR),DnsCharSetAnsi,DnsCharSetAnsi) 978 #endif 979 980 WINBOOL WINAPI DnsRecordCompare(PDNS_RECORD pRecord1,PDNS_RECORD pRecord2); 981 WINBOOL WINAPI DnsRecordSetCompare(PDNS_RECORD pRR1,PDNS_RECORD pRR2,PDNS_RECORD *ppDiff1,PDNS_RECORD *ppDiff2); 982 PDNS_RECORD DnsRecordSetDetach(PDNS_RECORD pRecordList); 983 984 typedef enum { 985 DnsFreeFlat = 0,DnsFreeRecordList,DnsFreeParsedMessageFields 986 } DNS_FREE_TYPE; 987 988 VOID WINAPI DnsFree(PVOID pData,DNS_FREE_TYPE FreeType); 989 990 #define DnsFreeRecordListDeep DnsFreeRecordList 991 992 #if(_WIN32_WINNT >= 0x0501) 993 #define DnsRecordListFree(p,t) DnsFree(p,DnsFreeRecordList) 994 #else 995 VOID WINAPI DnsRecordListFree(PDNS_RECORD pRecordList,DNS_FREE_TYPE FreeType); 996 #endif /* _WIN32_WINNT >= 0x0501 */ 997 998 #define DNS_QUERY_STANDARD 0x00000000 999 #define DNS_QUERY_ACCEPT_TRUNCATED_RESPONSE 0x00000001 1000 #define DNS_QUERY_USE_TCP_ONLY 0x00000002 1001 #define DNS_QUERY_NO_RECURSION 0x00000004 1002 #define DNS_QUERY_BYPASS_CACHE 0x00000008 1003 #define DNS_QUERY_NO_WIRE_QUERY 0x00000010 1004 #define DNS_QUERY_NO_LOCAL_NAME 0x00000020 1005 #define DNS_QUERY_NO_HOSTS_FILE 0x00000040 1006 #define DNS_QUERY_NO_NETBT 0x00000080 1007 #define DNS_QUERY_WIRE_ONLY 0x00000100 1008 #define DNS_QUERY_RETURN_MESSAGE 0x00000200 1009 #define DNS_QUERY_MULTICAST_ONLY 0x00000400 1010 #define DNS_QUERY_NO_MULTICAST 0x00000800 1011 #define DNS_QUERY_TREAT_AS_FQDN 0x00001000 1012 #define DNS_QUERY_APPEND_MULTILABEL 0x00800000 1013 #define DNS_QUERY_ADDRCONFIG 0x00002000 1014 #define DNS_QUERY_DUAL_ADDR 0x00004000 1015 #define DNS_QUERY_DONT_RESET_TTL_VALUES 0x00100000 1016 #define DNS_QUERY_DISABLE_IDN_ENCODING 0x00200000 1017 #define DNS_QUERY_APPEND_MULTILABEL 0x00800000 1018 #define DNS_QUERY_DNSSEC_OK 0x01000000 1019 #define DNS_QUERY_DNSSEC_CHECKING_DISABLED 0x02000000 1020 #define DNS_QUERY_RESERVED 0xf0000000 1021 #define DNS_QUERY_CACHE_ONLY DNS_QUERY_NO_WIRE_QUERY 1022 1023 DNS_STATUS WINAPI DnsQuery_A(PCSTR pszName,WORD wType,DWORD Options,PIP4_ARRAY aipServers,PDNS_RECORD *ppQueryResults,PVOID *pReserved); 1024 DNS_STATUS WINAPI DnsQuery_UTF8(PCSTR pszName,WORD wType,DWORD Options,PIP4_ARRAY aipServers,PDNS_RECORDA *ppQueryResults,PVOID *pReserved); 1025 DNS_STATUS WINAPI DnsQuery_W(PCWSTR pszName,WORD wType,DWORD Options,PIP4_ARRAY aipServers,PDNS_RECORD *ppQueryResults,PVOID *pReserved); 1026 1027 #define DnsQuery __MINGW_NAME_UAW(DnsQuery) 1028 1029 #if !defined (USE_PRIVATE_DNS_ADDR) || defined (MIDL_PASS) || defined (__WIDL__) 1030 #define DNS_QUERY_REQUEST_VERSION1 0x1 1031 #define DNS_QUERY_REQUEST_VERSION2 0x2 1032 #endif 1033 1034 #define DNS_QUERY_RESULTS_VERSION1 0x1 1035 1036 typedef struct _DNS_QUERY_RESULT { 1037 ULONG Version; 1038 DNS_STATUS QueryStatus; 1039 ULONG64 QueryOptions; 1040 PDNS_RECORD pQueryRecords; 1041 PVOID Reserved; 1042 } DNS_QUERY_RESULT, *PDNS_QUERY_RESULT; 1043 1044 typedef VOID WINAPI DNS_QUERY_COMPLETION_ROUTINE(PVOID pQueryContext,PDNS_QUERY_RESULT pQueryResults); 1045 typedef DNS_QUERY_COMPLETION_ROUTINE *PDNS_QUERY_COMPLETION_ROUTINE; 1046 1047 #define DNS_UPDATE_SECURITY_USE_DEFAULT 0x00000000 1048 #define DNS_UPDATE_SECURITY_OFF 0x00000010 1049 #define DNS_UPDATE_SECURITY_ON 0x00000020 1050 #define DNS_UPDATE_SECURITY_ONLY 0x00000100 1051 #define DNS_UPDATE_CACHE_SECURITY_CONTEXT 0x00000200 1052 #define DNS_UPDATE_TEST_USE_LOCAL_SYS_ACCT 0x00000400 1053 #define DNS_UPDATE_FORCE_SECURITY_NEGO 0x00000800 1054 #define DNS_UPDATE_TRY_ALL_MASTER_SERVERS 0x00001000 1055 #define DNS_UPDATE_SKIP_NO_UPDATE_ADAPTERS 0x00002000 1056 #define DNS_UPDATE_REMOTE_SERVER 0x00004000 1057 #define DNS_UPDATE_RESERVED 0xffff0000 1058 1059 #define DnsAcquireContextHandle __MINGW_NAME_UAW(DnsAcquireContextHandle) 1060 #define DnsModifyRecordsInSet __MINGW_NAME_UAW(DnsModifyRecordsInSet) 1061 #define DnsReplaceRecordSet __MINGW_NAME_AW(DnsReplaceRecordSet) 1062 #define DnsValidateName(p,f) __MINGW_NAME_UAW(DnsValidateName)((p),(f)) 1063 #define DnsNameCompare(n1,n2) __MINGW_NAME_UAW(DnsNameCompare)((n1),(n2)) 1064 1065 DNS_STATUS WINAPI DnsAcquireContextHandle_W(DWORD CredentialFlags,PVOID pCredentials,PHANDLE pContextHandle); 1066 DNS_STATUS WINAPI DnsAcquireContextHandle_A(DWORD CredentialFlags,PVOID pCredentials,PHANDLE pContextHandle); 1067 VOID WINAPI DnsReleaseContextHandle(HANDLE hContext); 1068 DNS_STATUS WINAPI DnsModifyRecordsInSet_W(PDNS_RECORD pAddRecords,PDNS_RECORD pDeleteRecords,DWORD Options,HANDLE hContext,PIP4_ARRAY pServerList,PVOID pReserved); 1069 DNS_STATUS WINAPI DnsModifyRecordsInSet_A(PDNS_RECORD pAddRecords,PDNS_RECORD pDeleteRecords,DWORD Options,HANDLE hContext,PIP4_ARRAY pServerList,PVOID pReserved); 1070 DNS_STATUS WINAPI DnsModifyRecordsInSet_UTF8(PDNS_RECORDA pAddRecords,PDNS_RECORDA pDeleteRecords,DWORD Options,HANDLE hContext,PIP4_ARRAY pServerList,PVOID pReserved); 1071 DNS_STATUS WINAPI DnsReplaceRecordSetW(PDNS_RECORD pNewSet,DWORD Options,HANDLE hContext,PIP4_ARRAY pServerList,PVOID pReserved); 1072 DNS_STATUS WINAPI DnsReplaceRecordSetA(PDNS_RECORD pNewSet,DWORD Options,HANDLE hContext,PIP4_ARRAY pServerList,PVOID pReserved); 1073 DNS_STATUS WINAPI DnsReplaceRecordSetUTF8(PDNS_RECORDA pNewSet,DWORD Options,HANDLE hContext,PIP4_ARRAY pServerList,PVOID pReserved); 1074 1075 typedef enum _DNS_NAME_FORMAT { 1076 DnsNameDomain, 1077 DnsNameDomainLabel, 1078 DnsNameHostnameFull, 1079 DnsNameHostnameLabel, 1080 DnsNameWildcard, 1081 DnsNameSrvRecord, 1082 DnsNameValidateTld 1083 } DNS_NAME_FORMAT; 1084 1085 DNS_STATUS DnsValidateName_UTF8(LPCSTR pszName,DNS_NAME_FORMAT Format); 1086 DNS_STATUS DnsValidateName_W(LPCWSTR pwszName,DNS_NAME_FORMAT Format); 1087 DNS_STATUS DnsValidateName_A(LPCSTR pszName,DNS_NAME_FORMAT Format); 1088 1089 #define DNS_VALSVR_ERROR_INVALID_ADDR 0x01 1090 #define DNS_VALSVR_ERROR_INVALID_NAME 0x02 1091 #define DNS_VALSVR_ERROR_UNREACHABLE 0x03 1092 #define DNS_VALSVR_ERROR_NO_RESPONSE 0x04 1093 #define DNS_VALSVR_ERROR_NO_AUTH 0x05 1094 #define DNS_VALSVR_ERROR_REFUSED 0x06 1095 1096 #define DNS_VALSVR_ERROR_NO_TCP 0x10 1097 #define DNS_VALSVR_ERROR_UNKNOWN 0xFF 1098 1099 #ifdef _WS2DEF_ 1100 DNS_STATUS DnsValidateServerStatus(PSOCKADDR server,PCWSTR queryName,PDWORD serverStatus); 1101 #endif 1102 1103 WINBOOL WINAPI DnsNameCompare_A(LPSTR pName1,LPSTR pName2); 1104 WINBOOL WINAPI DnsNameCompare_W(LPWSTR pName1,LPWSTR pName2); 1105 1106 typedef struct _DNS_MESSAGE_BUFFER { 1107 DNS_HEADER MessageHead; 1108 CHAR MessageBody[1]; 1109 } DNS_MESSAGE_BUFFER,*PDNS_MESSAGE_BUFFER; 1110 1111 WINBOOL WINAPI DnsWriteQuestionToBuffer_W(PDNS_MESSAGE_BUFFER pDnsBuffer,PDWORD pdwBufferSize,LPWSTR pszName,WORD wType,WORD Xid,WINBOOL fRecursionDesired); 1112 WINBOOL WINAPI DnsWriteQuestionToBuffer_UTF8(PDNS_MESSAGE_BUFFER pDnsBuffer,LPDWORD pdwBufferSize,LPSTR pszName,WORD wType,WORD Xid,WINBOOL fRecursionDesired); 1113 DNS_STATUS WINAPI DnsExtractRecordsFromMessage_W(PDNS_MESSAGE_BUFFER pDnsBuffer,WORD wMessageLength,PDNS_RECORD *ppRecord); 1114 DNS_STATUS WINAPI DnsExtractRecordsFromMessage_UTF8(PDNS_MESSAGE_BUFFER pDnsBuffer,WORD wMessageLength,PDNS_RECORDA *ppRecord); 1115 1116 DWORD WINAPI DnsGetProxyInformation(PCWSTR hostName,DNS_PROXY_INFORMATION *proxyInformation,DNS_PROXY_INFORMATION *defaultProxyInformation,DNS_PROXY_COMPLETION_ROUTINE completionRoutine,void *completionContext); 1117 VOID WINAPI DnsFreeProxyName(PWSTR proxyName); 1118 1119 #define DNS_CONNECTION_NAME_MAX_LENGTH 64 1120 #define DNS_CONNECTION_PROXY_INFO_CURRENT_VERSION 1 1121 #define DNS_CONNECTION_PROXY_INFO_SERVER_MAX_LENGTH 256 1122 #define DNS_CONNECTION_PROXY_INFO_FRIENDLY_NAME_MAX_LENGTH 64 1123 #define DNS_CONNECTION_PROXY_INFO_USERNAME_MAX_LENGTH 128 1124 #define DNS_CONNECTION_PROXY_INFO_PASSWORD_MAX_LENGTH 128 1125 #define DNS_CONNECTION_PROXY_INFO_EXCEPTION_MAX_LENGTH 1024 1126 #define DNS_CONNECTION_PROXY_INFO_EXTRA_INFO_MAX_LENGTH 1024 1127 1128 typedef enum _DNS_CONNECTION_PROXY_TYPE { 1129 DNS_CONNECTION_PROXY_TYPE_NULL = 0, 1130 DNS_CONNECTION_PROXY_TYPE_HTTP = 1, 1131 DNS_CONNECTION_PROXY_TYPE_WAP = 2, 1132 DNS_CONNECTION_PROXY_TYPE_SOCKS4 = 4, 1133 DNS_CONNECTION_PROXY_TYPE_SOCKS5 = 5 1134 } DNS_CONNECTION_PROXY_TYPE; 1135 1136 typedef enum _DNS_CONNECTION_PROXY_INFO_SWITCH { 1137 DNS_CONNECTION_PROXY_INFO_SWITCH_CONFIG = 0, 1138 DNS_CONNECTION_PROXY_INFO_SWITCH_SCRIPT, 1139 DNS_CONNECTION_PROXY_INFO_SWITCH_WPAD 1140 } DNS_CONNECTION_PROXY_INFO_SWITCH; 1141 1142 #define DNS_CONNECTION_PROXY_INFO_FLAG_DISABLED 0x1 1143 #define DNS_CONNECTION_PROXY_INFO_FLAG_BYPASSLOCAL 0x2 1144 1145 struct _DNS_CONNECTION_PROXY_INFO_CONFIG { 1146 WCHAR *pwszServer; 1147 WCHAR *pwszUsername; 1148 WCHAR *pwszPassword; 1149 WCHAR *pwszException; 1150 WCHAR *pwszExtraInfo; 1151 WORD Port; 1152 }; 1153 1154 struct _DNS_CONNECTION_PROXY_INFO_SCRIPT { 1155 WCHAR *pwszScript; 1156 WCHAR *pwszUsername; 1157 WCHAR *pwszPassword; 1158 }; 1159 1160 typedef struct _DNS_CONNECTION_PROXY_INFO { 1161 DWORD Version; 1162 WCHAR *pwszFriendlyName; 1163 DWORD Flags; 1164 DNS_CONNECTION_PROXY_INFO_SWITCH Switch; 1165 __C89_NAMELESS union { 1166 struct _DNS_CONNECTION_PROXY_INFO_CONFIG Config; 1167 struct _DNS_CONNECTION_PROXY_INFO_SCRIPT Script; 1168 }; 1169 } DNS_CONNECTION_PROXY_INFO, *PDNS_CONNECTION_PROXY_INFO; 1170 1171 typedef struct _DNS_CONNECTION_PROXY_INFO_EX { 1172 DNS_CONNECTION_PROXY_INFO ProxyInfo; 1173 DWORD dwInterfaceIndex; 1174 WCHAR *pwszConnectionName; 1175 WINBOOL fDirectConfiguration; 1176 HANDLE hConnection; 1177 } DNS_CONNECTION_PROXY_INFO_EX, *PDNS_CONNECTION_PROXY_INFO_EX; 1178 1179 typedef struct _DNS_CONNECTION_PROXY_ELEMENT { 1180 DNS_CONNECTION_PROXY_TYPE Type; 1181 DNS_CONNECTION_PROXY_INFO Info; 1182 } DNS_CONNECTION_PROXY_ELEMENT; 1183 1184 typedef struct _DNS_CONNECTION_PROXY_LIST { 1185 DWORD cProxies; 1186 DNS_CONNECTION_PROXY_ELEMENT *pProxies; 1187 } DNS_CONNECTION_PROXY_LIST; 1188 1189 typedef struct _DNS_CONNECTION_NAME { 1190 WCHAR wszName[DNS_CONNECTION_NAME_MAX_LENGTH + 1]; 1191 } DNS_CONNECTION_NAME; 1192 1193 typedef struct _DNS_CONNECTION_NAME_LIST { 1194 DWORD cNames; 1195 DNS_CONNECTION_NAME *pNames; 1196 } DNS_CONNECTION_NAME_LIST; 1197 1198 DWORD DnsConnectionGetProxyInfoForHostUrl(PCWSTR pwszHostUrl,BYTE *pSelectionContext,DWORD dwSelectionContextLength,DWORD dwExplicitInterfaceIndex,DNS_CONNECTION_PROXY_INFO_EX *pProxyInfoEx); 1199 VOID DnsConnectionFreeProxyInfoEx(DNS_CONNECTION_PROXY_INFO_EX *pProxyInfoEx); 1200 DWORD DnsConnectionGetProxyInfo(PCWSTR pwszConnectionName,DNS_CONNECTION_PROXY_TYPE Type,DNS_CONNECTION_PROXY_INFO *pProxyInfo); 1201 VOID DnsConnectionFreeProxyInfo(DNS_CONNECTION_PROXY_INFO *pProxyInfo); 1202 DWORD DnsConnectionSetProxyInfo(PCWSTR pwszConnectionName,DNS_CONNECTION_PROXY_TYPE Type,const DNS_CONNECTION_PROXY_INFO *pProxyInfo); 1203 DWORD DnsConnectionDeleteProxyInfo(PCWSTR pwszConnectionName,DNS_CONNECTION_PROXY_TYPE Type); 1204 DWORD DnsConnectionGetProxyList(PCWSTR pwszConnectionName,DNS_CONNECTION_PROXY_LIST *pProxyList); 1205 VOID DnsConnectionFreeProxyList(DNS_CONNECTION_PROXY_LIST *pProxyList); 1206 DWORD DnsConnectionGetNameList(DNS_CONNECTION_NAME_LIST *pNameList); 1207 VOID DnsConnectionFreeNameList(DNS_CONNECTION_NAME_LIST *pNameList); 1208 1209 typedef struct _DNS_CONNECTION_IFINDEX_ENTRY { 1210 PCWSTR pwszConnectionName; 1211 DWORD dwIfIndex; 1212 } DNS_CONNECTION_IFINDEX_ENTRY; 1213 1214 typedef struct _DNS_CONNECTION_IFINDEX_LIST { 1215 DNS_CONNECTION_IFINDEX_ENTRY *pConnectionIfIndexEntries; 1216 DWORD nEntries; 1217 } DNS_CONNECTION_IFINDEX_LIST; 1218 1219 DWORD DnsConnectionUpdateIfIndexTable(DNS_CONNECTION_IFINDEX_LIST *pConnectionIfIndexEntries); 1220 1221 #define DNS_CONNECTION_POLICY_ENTRY_ONDEMAND 0x00000001 1222 1223 typedef struct _DNS_CONNECTION_POLICY_ENTRY { 1224 PCWSTR pwszHost; 1225 PCWSTR pwszAppId; 1226 DWORD cbAppSid; 1227 PBYTE pbAppSid; 1228 DWORD nConnections; 1229 PCWSTR *ppwszConnections; 1230 DWORD dwPolicyEntryFlags; 1231 } DNS_CONNECTION_POLICY_ENTRY, *PDNS_CONNECTION_POLICY_ENTRY; 1232 1233 typedef struct _DNS_CONNECTION_POLICY_ENTRY_LIST { 1234 DNS_CONNECTION_POLICY_ENTRY *pPolicyEntries; 1235 DWORD nEntries; 1236 } DNS_CONNECTION_POLICY_ENTRY_LIST; 1237 1238 typedef enum { 1239 TAG_DNS_CONNECTION_POLICY_TAG_DEFAULT = 0, 1240 TAG_DNS_CONNECTION_POLICY_TAG_CONNECTION_MANAGER, 1241 TAG_DNS_CONNECTION_POLICY_TAG_WWWPT 1242 } DNS_CONNECTION_POLICY_TAG; 1243 1244 DWORD DnsConnectionSetPolicyEntries(DNS_CONNECTION_POLICY_TAG PolicyEntryTag,DNS_CONNECTION_POLICY_ENTRY_LIST *pPolicyEntryList); 1245 DWORD DnsConnectionDeletePolicyEntries(DNS_CONNECTION_POLICY_TAG PolicyEntryTag); 1246 1247 typedef struct _DNS_SERVICE_INSTANCE { 1248 LPWSTR pszInstanceName; 1249 LPWSTR pszHostName; 1250 IP4_ADDRESS *ip4Address; 1251 IP6_ADDRESS *ip6Address; 1252 WORD wPort; 1253 WORD wPriority; 1254 WORD wWeight; 1255 DWORD dwPropertyCount; 1256 PWSTR *keys; 1257 PWSTR *values; 1258 DWORD dwInterfaceIndex; 1259 } DNS_SERVICE_INSTANCE, *PDNS_SERVICE_INSTANCE; 1260 1261 PDNS_SERVICE_INSTANCE WINAPI DnsServiceConstructInstance(PCWSTR pServiceName,PCWSTR pHostName,PIP4_ADDRESS pIp4,PIP6_ADDRESS pIp6,WORD wPort,WORD wPriority,WORD wWeight,DWORD dwPropertiesCount,PCWSTR *keys,PCWSTR *values); 1262 PDNS_SERVICE_INSTANCE WINAPI DnsServiceCopyInstance(PDNS_SERVICE_INSTANCE pOrig); 1263 VOID WINAPI DnsServiceFreeInstance(PDNS_SERVICE_INSTANCE pInstance); 1264 1265 typedef struct _DNS_SERVICE_CANCEL { 1266 PVOID reserved; 1267 } DNS_SERVICE_CANCEL, *PDNS_SERVICE_CANCEL; 1268 1269 typedef VOID WINAPI DNS_SERVICE_BROWSE_CALLBACK(DWORD Status,PVOID pQueryContext,PDNS_RECORD pDnsRecord); 1270 typedef DNS_SERVICE_BROWSE_CALLBACK *PDNS_SERVICE_BROWSE_CALLBACK; 1271 1272 typedef struct _DNS_SERVICE_BROWSE_REQUEST { 1273 ULONG Version; 1274 ULONG InterfaceIndex; 1275 PCWSTR QueryName; 1276 __C89_NAMELESS union { 1277 PDNS_SERVICE_BROWSE_CALLBACK pBrowseCallback; 1278 DNS_QUERY_COMPLETION_ROUTINE *pBrowseCallbackV2; 1279 }; 1280 PVOID pQueryContext; 1281 } DNS_SERVICE_BROWSE_REQUEST, *PDNS_SERVICE_BROWSE_REQUEST; 1282 1283 DNS_STATUS WINAPI DnsServiceBrowse(PDNS_SERVICE_BROWSE_REQUEST pRequest,PDNS_SERVICE_CANCEL pCancel); 1284 DNS_STATUS WINAPI DnsServiceBrowseCancel(PDNS_SERVICE_CANCEL pCancelHandle); 1285 1286 typedef VOID WINAPI DNS_SERVICE_RESOLVE_COMPLETE(DWORD Status,PVOID pQueryContext,PDNS_SERVICE_INSTANCE pInstance); 1287 typedef DNS_SERVICE_RESOLVE_COMPLETE *PDNS_SERVICE_RESOLVE_COMPLETE; 1288 1289 typedef struct _DNS_SERVICE_RESOLVE_REQUEST{ 1290 ULONG Version; 1291 ULONG InterfaceIndex; 1292 PWSTR QueryName; 1293 PDNS_SERVICE_RESOLVE_COMPLETE pResolveCompletionCallback; 1294 PVOID pQueryContext; 1295 } DNS_SERVICE_RESOLVE_REQUEST, *PDNS_SERVICE_RESOLVE_REQUEST; 1296 1297 DNS_STATUS WINAPI DnsServiceResolve(PDNS_SERVICE_RESOLVE_REQUEST pRequest,PDNS_SERVICE_CANCEL pCancel); 1298 DNS_STATUS WINAPI DnsServiceResolveCancel(PDNS_SERVICE_CANCEL pCancelHandle); 1299 1300 typedef VOID WINAPI DNS_SERVICE_REGISTER_COMPLETE(DWORD Status,PVOID pQueryContext,PDNS_SERVICE_INSTANCE pInstance); 1301 typedef DNS_SERVICE_REGISTER_COMPLETE *PDNS_SERVICE_REGISTER_COMPLETE; 1302 1303 typedef struct _DNS_SERVICE_REGISTER_REQUEST{ 1304 ULONG Version; 1305 ULONG InterfaceIndex; 1306 PDNS_SERVICE_INSTANCE pServiceInstance; 1307 PDNS_SERVICE_REGISTER_COMPLETE pRegisterCompletionCallback; 1308 PVOID pQueryContext; 1309 HANDLE hCredentials; 1310 WINBOOL unicastEnabled; 1311 } DNS_SERVICE_REGISTER_REQUEST, *PDNS_SERVICE_REGISTER_REQUEST; 1312 1313 DWORD WINAPI DnsServiceRegister(PDNS_SERVICE_REGISTER_REQUEST pRequest,PDNS_SERVICE_CANCEL pCancel); 1314 DWORD WINAPI DnsServiceDeRegister(PDNS_SERVICE_REGISTER_REQUEST pRequest,PDNS_SERVICE_CANCEL pCancel); 1315 DWORD WINAPI DnsServiceRegisterCancel(PDNS_SERVICE_CANCEL pCancelHandle); 1316 1317 typedef struct _MDNS_QUERY_HANDLE { 1318 WCHAR nameBuf[DNS_MAX_NAME_BUFFER_LENGTH]; 1319 WORD wType; 1320 PVOID pSubscription; 1321 PVOID pWnfCallbackParams; 1322 ULONG stateNameData[2]; 1323 } MDNS_QUERY_HANDLE, *PMDNS_QUERY_HANDLE; 1324 1325 typedef VOID WINAPI MDNS_QUERY_CALLBACK(PVOID pQueryContext,PMDNS_QUERY_HANDLE pQueryHandle,PDNS_QUERY_RESULT pQueryResults); 1326 typedef MDNS_QUERY_CALLBACK *PMDNS_QUERY_CALLBACK; 1327 1328 typedef struct _MDNS_QUERY_REQUEST { 1329 ULONG Version; 1330 ULONG ulRefCount; 1331 PCWSTR Query; 1332 WORD QueryType; 1333 ULONG64 QueryOptions; 1334 ULONG InterfaceIndex; 1335 PMDNS_QUERY_CALLBACK pQueryCallback; 1336 PVOID pQueryContext; 1337 WINBOOL fAnswerReceived; 1338 ULONG ulResendCount; 1339 } MDNS_QUERY_REQUEST, *PMDNS_QUERY_REQUEST; 1340 1341 DNS_STATUS WINAPI DnsStartMulticastQuery(PMDNS_QUERY_REQUEST pQueryRequest,PMDNS_QUERY_HANDLE pHandle); 1342 DNS_STATUS WINAPI DnsStopMulticastQuery(PMDNS_QUERY_HANDLE pHandle); 1343 1344 #ifdef __cplusplus 1345 } 1346 #endif 1347 #endif