windns.h 43 KB

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