3 * @copy 2012 MinGW.org project
5 * Permission is hereby granted, free of charge, to any person obtaining a
6 * copy of this software and associated documentation files (the "Software"),
7 * to deal in the Software without restriction, including without limitation
8 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
9 * and/or sell copies of the Software, and to permit persons to whom the
10 * Software is furnished to do so, subject to the following conditions:
12 * The above copyright notice and this permission notice (including the next
13 * paragraph) shall be included in all copies or substantial portions of the
16 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
19 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
21 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
22 * DEALINGS IN THE SOFTWARE.
26 #pragma GCC system_header
33 #define DNS_QUERY_STANDARD 0x0
34 #define DNS_QUERY_ACCEPT_TRUNCATED_RESPONSE 0x1
35 #define DNS_QUERY_USE_TCP_ONLY 0x2
36 #define DNS_QUERY_NO_RECURSION 0x4
37 #define DNS_QUERY_BYPASS_CACHE 0x8
38 #define DNS_QUERY_NO_WIRE_QUERY 0x10
39 #define DNS_QUERY_NO_LOCAL_NAME 0x20
40 #define DNS_QUERY_NO_HOSTS_FILE 0x40
41 #define DNS_QUERY_NO_NETBT 0x80
42 #define DNS_QUERY_TREAT_AS_FQDN 0x1000
43 #define DNS_QUERY_WIRE_ONLY 0x100
44 #define DNS_QUERY_RETURN_MESSAGE 0x200
45 #define DNS_QUERY_DONT_RESET_TTL_VALUES 0x100000
46 #define DNS_QUERY_RESERVED 0xff000000
48 #define DNS_UPDATE_SECURITY_USE_DEFAULT 0x0
49 #define DNS_UPDATE_SECURITY_OFF 0x10
50 #define DNS_UPDATE_SECURITY_ON 0x20
51 #define DNS_UPDATE_SECURITY_ONLY 0x100
52 #define DNS_UPDATE_CACHE_SECURITY_CONTEXT 0x200
53 #define DNS_UPDATE_TEST_USE_LOCAL_SYS_ACCT 0x400
54 #define DNS_UPDATE_FORCE_SECURITY_NEGO 0x800
55 #define DNS_UPDATE_RESERVED 0xffff0000
58 typedef DWORD IP4_ADDRESS;
59 typedef DWORD DNS_STATUS;
114 DNS_TYPE_ANY=DNS_TYPE_ALL
116 typedef enum _DNS_CHARSET
125 DnsConfigPrimaryDomainName_W,
126 DnsConfigPrimaryDomainName_A,
127 DnsConfigPrimaryDomainName_UTF8,
128 DnsConfigAdapterDomainName_W,
129 DnsConfigAdapterDomainName_A,
130 DnsConfigAdapterDomainName_UTF8,
131 DnsConfigDnsServerList,
133 DnsConfigAdapterInfo,
134 DnsConfigPrimaryHostNameRegistrationEnabled,
135 DnsConfigAdapterHostNameRegistrationEnabled,
136 DnsConfigAddressRegistrationMaxCount,
139 DnsConfigHostName_UTF8,
140 DnsConfigFullHostName_W,
141 DnsConfigFullHostName_A,
142 DnsConfigFullHostName_UTF8
148 DnsFreeParsedMessageFields
150 typedef enum _DNS_NAME_FORMAT
155 DnsNameHostnameLabel,
166 typedef struct _IP4_ARRAY {
168 IP4_ADDRESS AddrArray[1];
169 } IP4_ARRAY, *PIP4_ARRAY;
172 } IP6_ADDRESS, *PIP6_ADDRESS, DNS_IP6_ADDRESS, *PDNS_IP6_ADDRESS;
173 typedef struct _DNS_HEADER {
175 BYTE RecursionDesired;
182 BYTE RecursionAvailable;
185 WORD NameServerCount;
186 WORD AdditionalCount;
187 } DNS_HEADER, *PDNS_HEADER;
188 typedef struct _DNS_MESSAGE_BUFFER {
189 DNS_HEADER MessageHead;
191 } DNS_MESSAGE_BUFFER, *PDNS_MESSAGE_BUFFER;
192 typedef struct _DnsRecordFlags {
199 #define DNSREC_QUESTION 0
200 #define DNSREC_ANSWER 1
201 #define DNSREC_AUTHORITY 2
202 #define DNSREC_ADDITIONAL 3
204 IP4_ADDRESS IpAddress;
205 } DNS_A_DATA, *PDNS_A_DATA;
207 DNS_IP6_ADDRESS Ip6Address;
208 } DNS_AAAA_DATA, *PDNS_AAAA_DATA;
209 #define DNS_ATMA_MAX_ADDR_LENGTH 20
212 BYTE Address[DNS_ATMA_MAX_ADDR_LENGTH];
213 } DNS_ATMA_DATA, *PDNS_ATMA_DATA;
219 } DNS_KEY_DATA, *PDNS_KEY_DATA;
228 } DNS_LOC_DATA, *PDNS_LOC_DATA;
231 LPTSTR pNameErrorsMailbox;
232 } DNS_MINFO_DATA, *PDNS_MINFO_DATA;
234 LPTSTR pNameExchange;
237 } DNS_MX_DATA, *PDNS_MX_DATA;
241 } DNS_NULL_DATA, *PDNS_NULL_DATA;
246 } DNS_NXT_DATA, *PDNS_NXT_DATA;
249 } DNS_PTR_DATA, *PDNS_PTR_DATA;
261 } DNS_SIG_DATA, *PDNS_SIG_DATA;
263 LPTSTR pNamePrimaryServer;
264 LPTSTR pNameAdministrator;
270 } DNS_SOA_DATA, *PDNS_SOA_DATA;
277 } DNS_SRV_DATA, *PDNS_SRV_DATA;
280 LPTSTR pStringArray[1];
281 } DNS_TXT_DATA, *PDNS_TXT_DATA;
283 LPTSTR pNameAlgorithm;
284 PBYTE pAlgorithmPacket;
293 UCHAR cAlgNameLength;
294 BOOL bPacketPointers;
295 } DNS_TKEY_DATA, *PDNS_TKEY_DATA;
297 LPTSTR pNameAlgorithm;
298 PBYTE pAlgorithmPacket;
301 LONGLONG i64CreateTime;
307 UCHAR cAlgNameLength;
308 BOOL bPacketPointers;
309 } DNS_TSIG_DATA, *PDNS_TSIG_DATA;
312 DWORD dwLookupTimeout;
313 DWORD dwCacheTimeout;
314 DWORD cWinsServerCount;
315 IP4_ADDRESS WinsServers[1];
316 } DNS_WINS_DATA, *PDNS_WINS_DATA;
319 DWORD dwLookupTimeout;
320 DWORD dwCacheTimeout;
321 LPTSTR pNameResultDomain;
322 } DNS_WINSR_DATA, *PDNS_WINSR_DATA;
323 typedef struct _DNS_WIRE_QUESTION {
326 } DNS_WIRE_QUESTION, *PDNS_WIRE_QUESTION;
327 typedef struct _DNS_WIRE_RECORD {
332 } DNS_WIRE_RECORD, *PDNS_WIRE_RECORD;
334 IP4_ADDRESS IpAddress;
337 } DNS_WKS_DATA, *PDNS_WKS_DATA;
338 typedef struct _DnsRecord {
339 struct _DnsRecord* pNext;
351 DNS_SOA_DATA SOA, Soa;
352 DNS_PTR_DATA PTR, Ptr, NS, Ns, CNAME, Cname, MB, Mb,
353 MD, Md, MF, Mf, MG, Mg, MR, Mr;
354 DNS_MINFO_DATA MINFO, Minfo, RP, Rp;
355 DNS_MX_DATA MX, Mx, AFSDB, Afsdb, RT, Rt;
356 DNS_TXT_DATA HINFO, Hinfo, ISDN, Isdn, TXT, Txt, X25;
358 DNS_WKS_DATA WKS, Wks;
360 DNS_KEY_DATA KEY, Key;
361 DNS_SIG_DATA SIG, Sig;
362 DNS_ATMA_DATA ATMA, Atma;
363 DNS_NXT_DATA NXT, Nxt;
364 DNS_SRV_DATA SRV, Srv;
365 DNS_TKEY_DATA TKEY, Tkey;
366 DNS_TSIG_DATA TSIG, Tsig;
367 DNS_WINS_DATA WINS, Wins;
368 DNS_WINSR_DATA WINSR, WinsR, NBSTAT, Nbstat;
370 } DNS_RECORD, *PDNS_RECORD;
371 typedef struct _DnsRRSet {
372 PDNS_RECORD pFirstRR;
374 } DNS_RRSET, *PDNS_RRSET;
376 DNS_STATUS WINAPI DnsAcquireContextHandle_A(DWORD,PVOID,HANDLE*);
377 DNS_STATUS WINAPI DnsAcquireContextHandle_W(DWORD,PVOID,HANDLE*);
378 DNS_STATUS WINAPI DnsExtractRecordsFromMessage_W(PDNS_MESSAGE_BUFFER,WORD,PDNS_RECORD*);
379 DNS_STATUS WINAPI DnsExtractRecordsFromMessage_UTF8(PDNS_MESSAGE_BUFFER,WORD,PDNS_RECORD*);
380 DNS_STATUS WINAPI DnsModifyRecordsInSet_A(PDNS_RECORD,PDNS_RECORD,DWORD,HANDLE,PIP4_ARRAY,PVOID);
381 DNS_STATUS WINAPI DnsModifyRecordsInSet_W(PDNS_RECORD,PDNS_RECORD,DWORD,HANDLE,PIP4_ARRAY,PVOID);
382 DNS_STATUS WINAPI DnsModifyRecordsInSet_UTF8(PDNS_RECORD,PDNS_RECORD,DWORD,HANDLE,PIP4_ARRAY,PVOID);
383 BOOL WINAPI DnsNameCompare_A(LPSTR,LPSTR);
384 BOOL WINAPI DnsNameCompare_W(LPWSTR,LPWSTR);
385 DNS_STATUS WINAPI DnsQuery_A(PCSTR,WORD,DWORD,PIP4_ARRAY,PDNS_RECORD*,PVOID*);
386 DNS_STATUS WINAPI DnsQuery_W(PCWSTR,WORD,DWORD,PIP4_ARRAY,PDNS_RECORD*,PVOID*);
387 DNS_STATUS WINAPI DnsQuery_UTF8(PCSTR,WORD,DWORD,PIP4_ARRAY,PDNS_RECORD*,PVOID*);
388 DNS_STATUS WINAPI DnsQueryConfig(DNS_CONFIG_TYPE,DWORD,PWSTR,PVOID,PVOID,PDWORD);
389 BOOL WINAPI DnsRecordCompare(PDNS_RECORD,PDNS_RECORD);
390 PDNS_RECORD WINAPI DnsRecordCopyEx(PDNS_RECORD,DNS_CHARSET,DNS_CHARSET);
391 void WINAPI DnsRecordListFree(PDNS_RECORD,DNS_FREE_TYPE);
392 BOOL WINAPI DnsRecordSetCompare(PDNS_RECORD,PDNS_RECORD,PDNS_RECORD*,PDNS_RECORD*);
393 PDNS_RECORD WINAPI DnsRecordSetCopyEx(PDNS_RECORD,DNS_CHARSET,DNS_CHARSET);
394 PDNS_RECORD WINAPI DnsRecordSetDetach(PDNS_RECORD);
395 void WINAPI DnsReleaseContextHandle(HANDLE);
396 DNS_STATUS WINAPI DnsReplaceRecordSetA(PDNS_RECORD,DWORD,HANDLE,PIP4_ARRAY,PVOID);
397 DNS_STATUS WINAPI DnsReplaceRecordSetW(PDNS_RECORD,DWORD,HANDLE,PIP4_ARRAY,PVOID);
398 DNS_STATUS WINAPI DnsReplaceRecordSetUTF8(PDNS_RECORD,DWORD,HANDLE,PIP4_ARRAY,PVOID);
399 DNS_STATUS WINAPI DnsValidateName_A(LPCSTR,DNS_NAME_FORMAT);
400 DNS_STATUS WINAPI DnsValidateName_W(LPCWSTR, DNS_NAME_FORMAT);
401 DNS_STATUS WINAPI DnsValidateName_UTF8(LPCSTR,DNS_NAME_FORMAT);
402 BOOL WINAPI DnsWriteQuestionToBuffer_W(PDNS_MESSAGE_BUFFER,LPDWORD,LPWSTR,WORD,WORD,BOOL);
403 BOOL WINAPI DnsWriteQuestionToBuffer_UTF8(PDNS_MESSAGE_BUFFER,LPDWORD,LPSTR,WORD,WORD,BOOL);
405 #define DnsAcquireContextHandle __AW(DnsAcquireContextHandle_)
406 #define DnsModifyRecordsInSet __AW(DnsModifyRecordsInSet_)
407 #define DnsNameCompare __AW(DnsNameCompare_)
408 #define DnsQuery __AW(DnsQuery_)
409 #define DnsReplaceRecordSet __AW(DnsReplaceRecordSet)
410 #define DnsValidateName __AW(DnsValidateName_)
412 #endif /* RC_INVOKED */
418 #endif /* _WINDNS_H */