OSDN Git Service

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