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
32 #define DNS_QUERY_STANDARD 0x0
33 #define DNS_QUERY_ACCEPT_TRUNCATED_RESPONSE 0x1
34 #define DNS_QUERY_USE_TCP_ONLY 0x2
35 #define DNS_QUERY_NO_RECURSION 0x4
36 #define DNS_QUERY_BYPASS_CACHE 0x8
37 #define DNS_QUERY_NO_WIRE_QUERY 0x10
38 #define DNS_QUERY_NO_LOCAL_NAME 0x20
39 #define DNS_QUERY_NO_HOSTS_FILE 0x40
40 #define DNS_QUERY_NO_NETBT 0x80
41 #define DNS_QUERY_TREAT_AS_FQDN 0x1000
42 #define DNS_QUERY_WIRE_ONLY 0x100
43 #define DNS_QUERY_RETURN_MESSAGE 0x200
44 #define DNS_QUERY_DONT_RESET_TTL_VALUES 0x100000
45 #define DNS_QUERY_RESERVED 0xff000000
47 #define DNS_UPDATE_SECURITY_USE_DEFAULT 0x0
48 #define DNS_UPDATE_SECURITY_OFF 0x10
49 #define DNS_UPDATE_SECURITY_ON 0x20
50 #define DNS_UPDATE_SECURITY_ONLY 0x100
51 #define DNS_UPDATE_CACHE_SECURITY_CONTEXT 0x200
52 #define DNS_UPDATE_TEST_USE_LOCAL_SYS_ACCT 0x400
53 #define DNS_UPDATE_FORCE_SECURITY_NEGO 0x800
54 #define DNS_UPDATE_RESERVED 0xffff0000
57 typedef DWORD IP4_ADDRESS;
58 typedef DWORD DNS_STATUS;
113 DNS_TYPE_ANY=DNS_TYPE_ALL
115 typedef enum _DNS_CHARSET
124 DnsConfigPrimaryDomainName_W,
125 DnsConfigPrimaryDomainName_A,
126 DnsConfigPrimaryDomainName_UTF8,
127 DnsConfigAdapterDomainName_W,
128 DnsConfigAdapterDomainName_A,
129 DnsConfigAdapterDomainName_UTF8,
130 DnsConfigDnsServerList,
132 DnsConfigAdapterInfo,
133 DnsConfigPrimaryHostNameRegistrationEnabled,
134 DnsConfigAdapterHostNameRegistrationEnabled,
135 DnsConfigAddressRegistrationMaxCount,
138 DnsConfigHostName_UTF8,
139 DnsConfigFullHostName_W,
140 DnsConfigFullHostName_A,
141 DnsConfigFullHostName_UTF8
147 DnsFreeParsedMessageFields
149 typedef enum _DNS_NAME_FORMAT
154 DnsNameHostnameLabel,
165 typedef struct _IP4_ARRAY {
167 IP4_ADDRESS AddrArray[1];
168 } IP4_ARRAY, *PIP4_ARRAY;
171 } IP6_ADDRESS, *PIP6_ADDRESS, DNS_IP6_ADDRESS, *PDNS_IP6_ADDRESS;
172 typedef struct _DNS_HEADER {
174 BYTE RecursionDesired;
181 BYTE RecursionAvailable;
184 WORD NameServerCount;
185 WORD AdditionalCount;
186 } DNS_HEADER, *PDNS_HEADER;
187 typedef struct _DNS_MESSAGE_BUFFER {
188 DNS_HEADER MessageHead;
190 } DNS_MESSAGE_BUFFER, *PDNS_MESSAGE_BUFFER;
191 typedef struct _DnsRecordFlags {
198 #define DNSREC_QUESTION 0
199 #define DNSREC_ANSWER 1
200 #define DNSREC_AUTHORITY 2
201 #define DNSREC_ADDITIONAL 3
203 IP4_ADDRESS IpAddress;
204 } DNS_A_DATA, *PDNS_A_DATA;
206 DNS_IP6_ADDRESS Ip6Address;
207 } DNS_AAAA_DATA, *PDNS_AAAA_DATA;
208 #define DNS_ATMA_MAX_ADDR_LENGTH 20
211 BYTE Address[DNS_ATMA_MAX_ADDR_LENGTH];
212 } DNS_ATMA_DATA, *PDNS_ATMA_DATA;
218 } DNS_KEY_DATA, *PDNS_KEY_DATA;
227 } DNS_LOC_DATA, *PDNS_LOC_DATA;
230 LPTSTR pNameErrorsMailbox;
231 } DNS_MINFO_DATA, *PDNS_MINFO_DATA;
233 LPTSTR pNameExchange;
236 } DNS_MX_DATA, *PDNS_MX_DATA;
240 } DNS_NULL_DATA, *PDNS_NULL_DATA;
245 } DNS_NXT_DATA, *PDNS_NXT_DATA;
248 } DNS_PTR_DATA, *PDNS_PTR_DATA;
260 } DNS_SIG_DATA, *PDNS_SIG_DATA;
262 LPTSTR pNamePrimaryServer;
263 LPTSTR pNameAdministrator;
269 } DNS_SOA_DATA, *PDNS_SOA_DATA;
276 } DNS_SRV_DATA, *PDNS_SRV_DATA;
279 LPTSTR pStringArray[1];
280 } DNS_TXT_DATA, *PDNS_TXT_DATA;
282 LPTSTR pNameAlgorithm;
283 PBYTE pAlgorithmPacket;
292 UCHAR cAlgNameLength;
293 BOOL bPacketPointers;
294 } DNS_TKEY_DATA, *PDNS_TKEY_DATA;
296 LPTSTR pNameAlgorithm;
297 PBYTE pAlgorithmPacket;
300 LONGLONG i64CreateTime;
306 UCHAR cAlgNameLength;
307 BOOL bPacketPointers;
308 } DNS_TSIG_DATA, *PDNS_TSIG_DATA;
311 DWORD dwLookupTimeout;
312 DWORD dwCacheTimeout;
313 DWORD cWinsServerCount;
314 IP4_ADDRESS WinsServers[1];
315 } DNS_WINS_DATA, *PDNS_WINS_DATA;
318 DWORD dwLookupTimeout;
319 DWORD dwCacheTimeout;
320 LPTSTR pNameResultDomain;
321 } DNS_WINSR_DATA, *PDNS_WINSR_DATA;
322 typedef struct _DNS_WIRE_QUESTION {
325 } DNS_WIRE_QUESTION, *PDNS_WIRE_QUESTION;
326 typedef struct _DNS_WIRE_RECORD {
331 } DNS_WIRE_RECORD, *PDNS_WIRE_RECORD;
333 IP4_ADDRESS IpAddress;
336 } DNS_WKS_DATA, *PDNS_WKS_DATA;
337 typedef struct _DnsRecord {
338 struct _DnsRecord* pNext;
350 DNS_SOA_DATA SOA, Soa;
351 DNS_PTR_DATA PTR, Ptr, NS, Ns, CNAME, Cname, MB, Mb,
352 MD, Md, MF, Mf, MG, Mg, MR, Mr;
353 DNS_MINFO_DATA MINFO, Minfo, RP, Rp;
354 DNS_MX_DATA MX, Mx, AFSDB, Afsdb, RT, Rt;
355 DNS_TXT_DATA HINFO, Hinfo, ISDN, Isdn, TXT, Txt, X25;
357 DNS_WKS_DATA WKS, Wks;
359 DNS_KEY_DATA KEY, Key;
360 DNS_SIG_DATA SIG, Sig;
361 DNS_ATMA_DATA ATMA, Atma;
362 DNS_NXT_DATA NXT, Nxt;
363 DNS_SRV_DATA SRV, Srv;
364 DNS_TKEY_DATA TKEY, Tkey;
365 DNS_TSIG_DATA TSIG, Tsig;
366 DNS_WINS_DATA WINS, Wins;
367 DNS_WINSR_DATA WINSR, WinsR, NBSTAT, Nbstat;
369 } DNS_RECORD, *PDNS_RECORD;
370 typedef struct _DnsRRSet {
371 PDNS_RECORD pFirstRR;
373 } DNS_RRSET, *PDNS_RRSET;
375 DNS_STATUS WINAPI DnsAcquireContextHandle_A(DWORD,PVOID,HANDLE*);
376 DNS_STATUS WINAPI DnsAcquireContextHandle_W(DWORD,PVOID,HANDLE*);
377 DNS_STATUS WINAPI DnsExtractRecordsFromMessage_W(PDNS_MESSAGE_BUFFER,WORD,PDNS_RECORD*);
378 DNS_STATUS WINAPI DnsExtractRecordsFromMessage_UTF8(PDNS_MESSAGE_BUFFER,WORD,PDNS_RECORD*);
379 DNS_STATUS WINAPI DnsModifyRecordsInSet_A(PDNS_RECORD,PDNS_RECORD,DWORD,HANDLE,PIP4_ARRAY,PVOID);
380 DNS_STATUS WINAPI DnsModifyRecordsInSet_W(PDNS_RECORD,PDNS_RECORD,DWORD,HANDLE,PIP4_ARRAY,PVOID);
381 DNS_STATUS WINAPI DnsModifyRecordsInSet_UTF8(PDNS_RECORD,PDNS_RECORD,DWORD,HANDLE,PIP4_ARRAY,PVOID);
382 BOOL WINAPI DnsNameCompare_A(LPSTR,LPSTR);
383 BOOL WINAPI DnsNameCompare_W(LPWSTR,LPWSTR);
384 DNS_STATUS WINAPI DnsQuery_A(PCSTR,WORD,DWORD,PIP4_ARRAY,PDNS_RECORD*,PVOID*);
385 DNS_STATUS WINAPI DnsQuery_W(PCWSTR,WORD,DWORD,PIP4_ARRAY,PDNS_RECORD*,PVOID*);
386 DNS_STATUS WINAPI DnsQuery_UTF8(PCSTR,WORD,DWORD,PIP4_ARRAY,PDNS_RECORD*,PVOID*);
387 DNS_STATUS WINAPI DnsQueryConfig(DNS_CONFIG_TYPE,DWORD,PWSTR,PVOID,PVOID,PDWORD);
388 BOOL WINAPI DnsRecordCompare(PDNS_RECORD,PDNS_RECORD);
389 PDNS_RECORD WINAPI DnsRecordCopyEx(PDNS_RECORD,DNS_CHARSET,DNS_CHARSET);
390 void WINAPI DnsRecordListFree(PDNS_RECORD,DNS_FREE_TYPE);
391 BOOL WINAPI DnsRecordSetCompare(PDNS_RECORD,PDNS_RECORD,PDNS_RECORD*,PDNS_RECORD*);
392 PDNS_RECORD WINAPI DnsRecordSetCopyEx(PDNS_RECORD,DNS_CHARSET,DNS_CHARSET);
393 PDNS_RECORD WINAPI DnsRecordSetDetach(PDNS_RECORD);
394 void WINAPI DnsReleaseContextHandle(HANDLE);
395 DNS_STATUS WINAPI DnsReplaceRecordSetA(PDNS_RECORD,DWORD,HANDLE,PIP4_ARRAY,PVOID);
396 DNS_STATUS WINAPI DnsReplaceRecordSetW(PDNS_RECORD,DWORD,HANDLE,PIP4_ARRAY,PVOID);
397 DNS_STATUS WINAPI DnsReplaceRecordSetUTF8(PDNS_RECORD,DWORD,HANDLE,PIP4_ARRAY,PVOID);
398 DNS_STATUS WINAPI DnsValidateName_A(LPCSTR,DNS_NAME_FORMAT);
399 DNS_STATUS WINAPI DnsValidateName_W(LPCWSTR, DNS_NAME_FORMAT);
400 DNS_STATUS WINAPI DnsValidateName_UTF8(LPCSTR,DNS_NAME_FORMAT);
401 BOOL WINAPI DnsWriteQuestionToBuffer_W(PDNS_MESSAGE_BUFFER,LPDWORD,LPWSTR,WORD,WORD,BOOL);
402 BOOL WINAPI DnsWriteQuestionToBuffer_UTF8(PDNS_MESSAGE_BUFFER,LPDWORD,LPSTR,WORD,WORD,BOOL);
405 #define DnsAcquireContextHandle DnsAcquireContextHandle_W
406 #define DnsModifyRecordsInSet DnsModifyRecordsInSet_W
407 #define DnsNameCompare DnsNameCompare_W
408 #define DnsQuery DnsQuery_W
409 #define DnsReplaceRecordSet DnsReplaceRecordSetW
410 #define DnsValidateName DnsValidateName_W
412 #define DnsAcquireContextHandle DnsAcquireContextHandle_A
413 #define DnsModifyRecordsInSet DnsModifyRecordsInSet_A
414 #define DnsNameCompare DnsNameCompare_A
415 #define DnsQuery DnsQuery_A
416 #define DnsReplaceRecordSet DnsReplaceRecordSetA
417 #define DnsValidateName DnsValidateName_A
420 #endif /* RC_INVOKED */
426 #endif /* _WINDNS_H */