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 */ |