OSDN Git Service

More on assuming GCC is greater than or equal to version 3.5.4 and that
[mingw/mingw-org-wsl.git] / include / windns.h
1 #ifndef _WINDNS_H
2 #define _WINDNS_H
3 #pragma GCC system_header
4
5 #ifdef __cplusplus
6 extern "C" {
7 #endif
8
9 #define DNS_QUERY_STANDARD 0x0
10 #define DNS_QUERY_ACCEPT_TRUNCATED_RESPONSE 0x1
11 #define DNS_QUERY_USE_TCP_ONLY 0x2
12 #define DNS_QUERY_NO_RECURSION 0x4
13 #define DNS_QUERY_BYPASS_CACHE 0x8
14 #define DNS_QUERY_NO_WIRE_QUERY 0x10
15 #define DNS_QUERY_NO_LOCAL_NAME 0x20
16 #define DNS_QUERY_NO_HOSTS_FILE 0x40
17 #define DNS_QUERY_NO_NETBT 0x80
18 #define DNS_QUERY_TREAT_AS_FQDN 0x1000
19 #define DNS_QUERY_WIRE_ONLY 0x100
20 #define DNS_QUERY_RETURN_MESSAGE 0x200
21 #define DNS_QUERY_DONT_RESET_TTL_VALUES 0x100000
22 #define DNS_QUERY_RESERVED 0xff000000
23
24 #define DNS_UPDATE_SECURITY_USE_DEFAULT 0x0
25 #define DNS_UPDATE_SECURITY_OFF 0x10
26 #define DNS_UPDATE_SECURITY_ON 0x20
27 #define DNS_UPDATE_SECURITY_ONLY 0x100
28 #define DNS_UPDATE_CACHE_SECURITY_CONTEXT 0x200
29 #define DNS_UPDATE_TEST_USE_LOCAL_SYS_ACCT 0x400
30 #define DNS_UPDATE_FORCE_SECURITY_NEGO 0x800
31 #define DNS_UPDATE_RESERVED 0xffff0000
32
33 #ifndef RC_INVOKE
34 typedef DWORD IP4_ADDRESS;
35 typedef DWORD DNS_STATUS;
36 enum {
37         DNS_TYPE_A=1,
38         DNS_TYPE_NS,
39         DNS_TYPE_MD,
40         DNS_TYPE_MF,
41         DNS_TYPE_CNAME,
42         DNS_TYPE_SOA,
43         DNS_TYPE_MB,
44         DNS_TYPE_MG,
45         DNS_TYPE_MR,
46         DNS_TYPE_NULL,
47         DNS_TYPE_WKS,
48         DNS_TYPE_PTR,
49         DNS_TYPE_HINFO,
50         DNS_TYPE_MINFO,
51         DNS_TYPE_MX,
52         DNS_TYPE_TEXT,
53         DNS_TYPE_RP,
54         DNS_TYPE_AFSDB,
55         DNS_TYPE_X25,
56         DNS_TYPE_ISDN,
57         DNS_TYPE_RT,
58         DNS_TYPE_NSAP,
59         DNS_TYPE_NSAPPTR,
60         DNS_TYPE_SIG,
61         DNS_TYPE_KEY,
62         DNS_TYPE_PX,
63         DNS_TYPE_GPOS,
64         DNS_TYPE_AAAA,
65         DNS_TYPE_LOC,
66         DNS_TYPE_NXT,
67         DNS_TYPE_EID,
68         DNS_TYPE_NIMLOC,
69         DNS_TYPE_SRV,
70         DNS_TYPE_ATMA,
71         DNS_TYPE_NAPTR,
72         DNS_TYPE_KX,
73         DNS_TYPE_CERT,
74         DNS_TYPE_A6,
75         DNS_TYPE_DNAME,
76         DNS_TYPE_SINK,
77         DNS_TYPE_OPT,
78         DNS_TYPE_UINFO=100,
79         DNS_TYPE_UID,
80         DNS_TYPE_GID,
81         DNS_TYPE_UNSPEC,
82         DNS_TYPE_ADDRS=248,
83         DNS_TYPE_TKEY,
84         DNS_TYPE_TSIG,
85         DNS_TYPE_IXFR,
86         DNS_TYPE_AXFR,
87         DNS_TYPE_MAILB,
88         DNS_TYPE_MAILA,
89         DNS_TYPE_ALL,
90         DNS_TYPE_ANY=DNS_TYPE_ALL
91 };
92 typedef enum _DNS_CHARSET
93 {
94         DnsCharSetUnknown, 
95         DnsCharSetUnicode, 
96         DnsCharSetUtf8, 
97         DnsCharSetAnsi
98 } DNS_CHARSET;
99 typedef enum 
100 {
101         DnsConfigPrimaryDomainName_W, 
102         DnsConfigPrimaryDomainName_A, 
103         DnsConfigPrimaryDomainName_UTF8, 
104         DnsConfigAdapterDomainName_W, 
105         DnsConfigAdapterDomainName_A, 
106         DnsConfigAdapterDomainName_UTF8, 
107         DnsConfigDnsServerList, 
108         DnsConfigSearchList, 
109         DnsConfigAdapterInfo, 
110         DnsConfigPrimaryHostNameRegistrationEnabled, 
111         DnsConfigAdapterHostNameRegistrationEnabled, 
112         DnsConfigAddressRegistrationMaxCount, 
113         DnsConfigHostName_W, 
114         DnsConfigHostName_A, 
115         DnsConfigHostName_UTF8, 
116         DnsConfigFullHostName_W, 
117         DnsConfigFullHostName_A, 
118         DnsConfigFullHostName_UTF8
119 } DNS_CONFIG_TYPE;
120 typedef enum 
121 {
122         DnsFreeFlat = 0, 
123         DnsFreeRecordList, 
124         DnsFreeParsedMessageFields
125 } DNS_FREE_TYPE;
126 typedef enum _DNS_NAME_FORMAT
127 {
128         DnsNameDomain, 
129         DnsNameDomainLabel, 
130         DnsNameHostnameFull, 
131         DnsNameHostnameLabel, 
132         DnsNameWildcard, 
133         DnsNameSrvRecord
134 } DNS_NAME_FORMAT;
135 typedef enum 
136 {
137         DnsSectionQuestion, 
138         DnsSectionAnswer, 
139         DnsSectionAuthority, 
140         DnsSectionAdditional
141 } DNS_SECTION;
142 typedef struct _IP4_ARRAY {
143         DWORD AddrCount;
144         IP4_ADDRESS AddrArray[1];
145 } IP4_ARRAY, *PIP4_ARRAY;
146 typedef struct {
147         DWORD IP6Dword[4];
148 } IP6_ADDRESS, *PIP6_ADDRESS, DNS_IP6_ADDRESS, *PDNS_IP6_ADDRESS;
149 typedef struct _DNS_HEADER {
150         WORD Xid;
151         BYTE RecursionDesired;
152         BYTE Truncation;
153         BYTE Authoritative;
154         BYTE Opcode;
155         BYTE IsResponse;
156         BYTE ResponseCode;
157         BYTE Reserved;
158         BYTE RecursionAvailable;
159         WORD QuestionCount;
160         WORD AnswerCount;
161         WORD NameServerCount;
162         WORD AdditionalCount;
163 } DNS_HEADER, *PDNS_HEADER;
164 typedef struct _DNS_MESSAGE_BUFFER {
165         DNS_HEADER MessageHead;
166         CHAR MessageBody[1];
167 } DNS_MESSAGE_BUFFER, *PDNS_MESSAGE_BUFFER;
168 typedef struct _DnsRecordFlags {
169         DWORD Section   :2;
170         DWORD Delete    :1;
171         DWORD CharSet   :2;
172         DWORD Unused    :3;
173         DWORD Reserved  :24;
174 } DNS_RECORD_FLAGS;
175 #define DNSREC_QUESTION 0
176 #define DNSREC_ANSWER 1
177 #define DNSREC_AUTHORITY 2
178 #define DNSREC_ADDITIONAL 3
179 typedef struct {
180         IP4_ADDRESS IpAddress;
181 } DNS_A_DATA, *PDNS_A_DATA;
182 typedef struct {
183         DNS_IP6_ADDRESS Ip6Address;
184 } DNS_AAAA_DATA, *PDNS_AAAA_DATA;
185 #define DNS_ATMA_MAX_ADDR_LENGTH 20
186 typedef struct {
187         BYTE AddressType;
188         BYTE Address[DNS_ATMA_MAX_ADDR_LENGTH];
189 } DNS_ATMA_DATA, *PDNS_ATMA_DATA;
190 typedef struct {
191         WORD wFlags;
192         BYTE chProtocol;
193         BYTE chAlgorithm;
194         BYTE Key[1];
195 } DNS_KEY_DATA, *PDNS_KEY_DATA;
196 typedef struct {
197         WORD wVersion;
198         WORD wSize;
199         WORD wHorPrec;
200         WORD wVerPrec;
201         DWORD dwLatitude;
202         DWORD dwLongitude;
203         DWORD dwAltitude;
204 } DNS_LOC_DATA, *PDNS_LOC_DATA;
205 typedef struct {
206         LPTSTR pNameMailbox;
207         LPTSTR pNameErrorsMailbox;
208 } DNS_MINFO_DATA, *PDNS_MINFO_DATA;
209 typedef struct {
210         LPTSTR pNameExchange;
211         WORD wPreference;
212         WORD Pad;
213 } DNS_MX_DATA, *PDNS_MX_DATA;
214 typedef struct {
215         DWORD dwByteCount;
216         BYTE Data[1];
217 } DNS_NULL_DATA, *PDNS_NULL_DATA;
218 typedef struct {
219         LPTSTR pNameNext;
220         WORD wNumTypes;
221         WORD wTypes[1];
222 } DNS_NXT_DATA, *PDNS_NXT_DATA;
223 typedef struct {
224         LPTSTR pNameHost;
225 } DNS_PTR_DATA, *PDNS_PTR_DATA;
226 typedef struct {
227         LPTSTR pNameSigner;
228         WORD wTypeCovered;
229         BYTE chAlgorithm;
230         BYTE chLabelCount;
231         DWORD dwOriginalTtl;
232         DWORD dwExpiration;
233         DWORD dwTimeSigned;
234         WORD wKeyTag;
235         WORD Pad;
236         BYTE Signature[1];
237 } DNS_SIG_DATA, *PDNS_SIG_DATA;
238 typedef struct {
239         LPTSTR pNamePrimaryServer;
240         LPTSTR pNameAdministrator;
241         DWORD dwSerialNo;
242         DWORD dwRefresh;
243         DWORD dwRetry;
244         DWORD dwExpire;
245         DWORD dwDefaultTtl;
246 } DNS_SOA_DATA, *PDNS_SOA_DATA;
247 typedef struct {
248         LPTSTR pNameTarget;
249         WORD wPriority;
250         WORD wWeight;
251         WORD wPort;
252         WORD Pad;
253 } DNS_SRV_DATA, *PDNS_SRV_DATA;
254 typedef struct {
255         DWORD dwStringCount;
256         LPTSTR pStringArray[1];
257 } DNS_TXT_DATA, *PDNS_TXT_DATA;
258 typedef struct {
259         LPTSTR pNameAlgorithm;
260         PBYTE pAlgorithmPacket;
261         PBYTE pKey;
262         PBYTE pOtherData;
263         DWORD dwCreateTime;
264         DWORD dwExpireTime;
265         WORD wMode;
266         WORD wError;
267         WORD wKeyLength;
268         WORD wOtherLength;
269         UCHAR cAlgNameLength;
270         BOOL bPacketPointers;
271 } DNS_TKEY_DATA, *PDNS_TKEY_DATA;
272 typedef struct {
273         LPTSTR pNameAlgorithm;
274         PBYTE pAlgorithmPacket;
275         PBYTE pSignature;
276         PBYTE pOtherData;
277         LONGLONG i64CreateTime;
278         WORD wFudgeTime;
279         WORD wOriginalXid;
280         WORD wError;
281         WORD wSigLength;
282         WORD wOtherLength;
283         UCHAR cAlgNameLength;
284         BOOL bPacketPointers;
285 } DNS_TSIG_DATA, *PDNS_TSIG_DATA;
286 typedef struct {
287         DWORD dwMappingFlag;
288         DWORD dwLookupTimeout;
289         DWORD dwCacheTimeout;
290         DWORD cWinsServerCount;
291         IP4_ADDRESS WinsServers[1];
292 } DNS_WINS_DATA, *PDNS_WINS_DATA;
293 typedef struct {
294         DWORD dwMappingFlag;
295         DWORD dwLookupTimeout;
296         DWORD dwCacheTimeout;
297         LPTSTR pNameResultDomain;
298 } DNS_WINSR_DATA, *PDNS_WINSR_DATA;
299 typedef struct _DNS_WIRE_QUESTION {
300         WORD QuestionType;
301         WORD QuestionClass;
302 } DNS_WIRE_QUESTION, *PDNS_WIRE_QUESTION;
303 typedef struct _DNS_WIRE_RECORD {
304         WORD RecordType;
305         WORD RecordClass;
306         DWORD TimeToLive;
307         WORD DataLength;
308 } DNS_WIRE_RECORD, *PDNS_WIRE_RECORD;
309 typedef struct {
310         IP4_ADDRESS IpAddress;
311         UCHAR chProtocol;
312         BYTE BitMask[1];
313 } DNS_WKS_DATA, *PDNS_WKS_DATA;
314 typedef struct _DnsRecord {
315         struct _DnsRecord* pNext;
316         LPTSTR pName;
317         WORD wType;
318         WORD wDataLength;
319         union {
320                 DWORD DW;
321                 DNS_RECORD_FLAGS S;
322         } Flags;
323         DWORD dwTtl;
324         DWORD dwReserved;
325         union {
326                 DNS_A_DATA A;
327                 DNS_SOA_DATA SOA, Soa;
328                 DNS_PTR_DATA PTR, Ptr, NS, Ns, CNAME, Cname, MB, Mb,
329                              MD, Md, MF, Mf, MG, Mg, MR, Mr;
330                 DNS_MINFO_DATA MINFO, Minfo, RP, Rp;
331                 DNS_MX_DATA MX, Mx, AFSDB, Afsdb, RT, Rt;
332                 DNS_TXT_DATA HINFO, Hinfo, ISDN, Isdn, TXT, Txt, X25;
333                 DNS_NULL_DATA Null;
334                 DNS_WKS_DATA WKS, Wks;
335                 DNS_AAAA_DATA AAAA;
336                 DNS_KEY_DATA KEY, Key;
337                 DNS_SIG_DATA SIG, Sig;
338                 DNS_ATMA_DATA ATMA, Atma;
339                 DNS_NXT_DATA NXT, Nxt;
340                 DNS_SRV_DATA SRV, Srv;
341                 DNS_TKEY_DATA TKEY, Tkey;
342                 DNS_TSIG_DATA TSIG, Tsig;
343                 DNS_WINS_DATA WINS, Wins;
344                 DNS_WINSR_DATA WINSR, WinsR, NBSTAT, Nbstat;
345         } Data;
346 } DNS_RECORD, *PDNS_RECORD;
347 typedef struct _DnsRRSet {
348         PDNS_RECORD pFirstRR;
349         PDNS_RECORD pLastRR;
350 } DNS_RRSET, *PDNS_RRSET;
351
352 DNS_STATUS WINAPI DnsAcquireContextHandle_A(DWORD,PVOID,HANDLE*);
353 DNS_STATUS WINAPI DnsAcquireContextHandle_W(DWORD,PVOID,HANDLE*);
354 DNS_STATUS WINAPI DnsExtractRecordsFromMessage_W(PDNS_MESSAGE_BUFFER,WORD,PDNS_RECORD*);
355 DNS_STATUS WINAPI DnsExtractRecordsFromMessage_UTF8(PDNS_MESSAGE_BUFFER,WORD,PDNS_RECORD*);
356 DNS_STATUS WINAPI DnsModifyRecordsInSet_A(PDNS_RECORD,PDNS_RECORD,DWORD,HANDLE,PIP4_ARRAY,PVOID);
357 DNS_STATUS WINAPI DnsModifyRecordsInSet_W(PDNS_RECORD,PDNS_RECORD,DWORD,HANDLE,PIP4_ARRAY,PVOID);
358 DNS_STATUS WINAPI DnsModifyRecordsInSet_UTF8(PDNS_RECORD,PDNS_RECORD,DWORD,HANDLE,PIP4_ARRAY,PVOID);
359 BOOL WINAPI DnsNameCompare_A(LPSTR,LPSTR);
360 BOOL WINAPI DnsNameCompare_W(LPWSTR,LPWSTR);
361 DNS_STATUS WINAPI DnsQuery_A(PCSTR,WORD,DWORD,PIP4_ARRAY,PDNS_RECORD*,PVOID*);
362 DNS_STATUS WINAPI DnsQuery_W(PCWSTR,WORD,DWORD,PIP4_ARRAY,PDNS_RECORD*,PVOID*);
363 DNS_STATUS WINAPI DnsQuery_UTF8(PCSTR,WORD,DWORD,PIP4_ARRAY,PDNS_RECORD*,PVOID*);
364 DNS_STATUS WINAPI DnsQueryConfig(DNS_CONFIG_TYPE,DWORD,PWSTR,PVOID,PVOID,PDWORD);
365 BOOL WINAPI DnsRecordCompare(PDNS_RECORD,PDNS_RECORD);
366 PDNS_RECORD WINAPI DnsRecordCopyEx(PDNS_RECORD,DNS_CHARSET,DNS_CHARSET);
367 void WINAPI DnsRecordListFree(PDNS_RECORD,DNS_FREE_TYPE);
368 BOOL WINAPI DnsRecordSetCompare(PDNS_RECORD,PDNS_RECORD,PDNS_RECORD*,PDNS_RECORD*);
369 PDNS_RECORD WINAPI DnsRecordSetCopyEx(PDNS_RECORD,DNS_CHARSET,DNS_CHARSET);
370 PDNS_RECORD WINAPI DnsRecordSetDetach(PDNS_RECORD);
371 void WINAPI DnsReleaseContextHandle(HANDLE);
372 DNS_STATUS WINAPI DnsReplaceRecordSetA(PDNS_RECORD,DWORD,HANDLE,PIP4_ARRAY,PVOID);
373 DNS_STATUS WINAPI DnsReplaceRecordSetW(PDNS_RECORD,DWORD,HANDLE,PIP4_ARRAY,PVOID);
374 DNS_STATUS WINAPI DnsReplaceRecordSetUTF8(PDNS_RECORD,DWORD,HANDLE,PIP4_ARRAY,PVOID);
375 DNS_STATUS WINAPI DnsValidateName_A(LPCSTR,DNS_NAME_FORMAT);
376 DNS_STATUS WINAPI DnsValidateName_W(LPCWSTR, DNS_NAME_FORMAT);
377 DNS_STATUS WINAPI DnsValidateName_UTF8(LPCSTR,DNS_NAME_FORMAT);
378 BOOL WINAPI DnsWriteQuestionToBuffer_W(PDNS_MESSAGE_BUFFER,LPDWORD,LPWSTR,WORD,WORD,BOOL);
379 BOOL WINAPI DnsWriteQuestionToBuffer_UTF8(PDNS_MESSAGE_BUFFER,LPDWORD,LPSTR,WORD,WORD,BOOL);
380
381 #ifdef UNICODE
382 #define DnsAcquireContextHandle DnsAcquireContextHandle_W
383 #define DnsModifyRecordsInSet DnsModifyRecordsInSet_W
384 #define DnsNameCompare DnsNameCompare_W
385 #define DnsQuery DnsQuery_W
386 #define DnsReplaceRecordSet DnsReplaceRecordSetW
387 #define DnsValidateName DnsValidateName_W
388 #else
389 #define DnsAcquireContextHandle DnsAcquireContextHandle_A
390 #define DnsModifyRecordsInSet DnsModifyRecordsInSet_A
391 #define DnsNameCompare DnsNameCompare_A
392 #define DnsQuery DnsQuery_A
393 #define DnsReplaceRecordSet DnsReplaceRecordSetA
394 #define DnsValidateName DnsValidateName_A
395 #endif
396
397 #endif /* RC_INVOKED */
398
399 #ifdef __cplusplus
400 }
401 #endif
402
403 #endif /* _WINDNS_H */