From 79dc3eb0953876b9c8576f71fa32edafedc354b3 Mon Sep 17 00:00:00 2001 From: Hans Leidekker Date: Sun, 9 Apr 2006 18:35:36 +0200 Subject: [PATCH] dnsapi: Add windns.h. Based on a patch sent by Matthew Kehrer a while ago. --- include/Makefile.in | 1 + include/windns.h | 605 ++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 606 insertions(+) create mode 100644 include/windns.h diff --git a/include/Makefile.in b/include/Makefile.in index c40e5f9473e..5aa7ef1a56f 100644 --- a/include/Makefile.in +++ b/include/Makefile.in @@ -265,6 +265,7 @@ WINDOWS_INCLUDES = \ wincon.h \ wincrypt.h \ windef.h \ + windns.h \ windows.h \ windowsx.h \ winerror.h \ diff --git a/include/windns.h b/include/windns.h new file mode 100644 index 00000000000..f9b0eadde4f --- /dev/null +++ b/include/windns.h @@ -0,0 +1,605 @@ +/* + * DNS support + * + * Copyright (C) 2006 Matthew Kehrer + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + +#ifndef __WINE_WINDNS_H +#define __WINE_WINDNS_H + +#ifdef __cplusplus +extern "C" { +#endif + +#define DNS_TYPE_ZERO 0x0000 +#define DNS_TYPE_A 0x0001 +#define DNS_TYPE_NS 0x0002 +#define DNS_TYPE_MD 0x0003 +#define DNS_TYPE_MF 0x0004 +#define DNS_TYPE_CNAME 0x0005 +#define DNS_TYPE_SOA 0x0006 +#define DNS_TYPE_MB 0x0007 +#define DNS_TYPE_MG 0x0008 +#define DNS_TYPE_MR 0x0009 +#define DNS_TYPE_NULL 0x000a +#define DNS_TYPE_WKS 0x000b +#define DNS_TYPE_PTR 0x000c +#define DNS_TYPE_HINFO 0x000d +#define DNS_TYPE_MINFO 0x000e +#define DNS_TYPE_MX 0x000f +#define DNS_TYPE_TEXT 0x0010 +#define DNS_TYPE_RP 0x0011 +#define DNS_TYPE_AFSDB 0x0012 +#define DNS_TYPE_X25 0x0013 +#define DNS_TYPE_ISDN 0x0014 +#define DNS_TYPE_RT 0x0015 +#define DNS_TYPE_NSAP 0x0016 +#define DNS_TYPE_NSAPPTR 0x0017 +#define DNS_TYPE_SIG 0x0018 +#define DNS_TYPE_KEY 0x0019 +#define DNS_TYPE_PX 0x001a +#define DNS_TYPE_GPOS 0x001b +#define DNS_TYPE_AAAA 0x001c +#define DNS_TYPE_LOC 0x001d +#define DNS_TYPE_NXT 0x001e +#define DNS_TYPE_EID 0x001f +#define DNS_TYPE_NIMLOC 0x0020 +#define DNS_TYPE_SRV 0x0021 +#define DNS_TYPE_ATMA 0x0022 +#define DNS_TYPE_NAPTR 0x0023 +#define DNS_TYPE_KX 0x0024 +#define DNS_TYPE_CERT 0x0025 +#define DNS_TYPE_A6 0x0026 +#define DNS_TYPE_DNAME 0x0027 +#define DNS_TYPE_SINK 0x0028 +#define DNS_TYPE_OPT 0x0029 +#define DNS_TYPE_UINFO 0x0064 +#define DNS_TYPE_UID 0x0065 +#define DNS_TYPE_GID 0x0066 +#define DNS_TYPE_UNSPEC 0x0067 +#define DNS_TYPE_ADDRS 0x00f8 +#define DNS_TYPE_TKEY 0x00f9 +#define DNS_TYPE_TSIG 0x00fa +#define DNS_TYPE_IXFR 0x00fb +#define DNS_TYPE_AXFR 0x00fc +#define DNS_TYPE_MAILB 0x00fd +#define DNS_TYPE_MAILA 0x00fe +#define DNS_TYPE_ALL 0x00ff +#define DNS_TYPE_ANY 0x00ff + +#define DNS_TYPE_WINS 0xff01 +#define DNS_TYPE_WINSR 0xff02 +#define DNS_TYPE_NBSTAT (DNS_TYPE_WINSR) + +#define DNS_QUERY_STANDARD 0x00000000 +#define DNS_QUERY_ACCEPT_TRUNCATED_RESPONSE 0x00000001 +#define DNS_QUERY_USE_TCP_ONLY 0x00000002 +#define DNS_QUERY_NO_RECURSION 0x00000004 +#define DNS_QUERY_BYPASS_CACHE 0x00000008 +#define DNS_QUERY_NO_WIRE_QUERY 0x00000010 +#define DNS_QUERY_NO_LOCAL_NAME 0x00000020 +#define DNS_QUERY_NO_HOSTS_FILE 0x00000040 +#define DNS_QUERY_NO_NETBT 0x00000080 +#define DNS_QUERY_WIRE_ONLY 0x00000100 +#define DNS_QUERY_RETURN_MESSAGE 0x00000200 +#define DNS_QUERY_TREAT_AS_FQDN 0x00001000 +#define DNS_QUERY_DONT_RESET_TTL_VALUES 0x00100000 +#define DNS_QUERY_RESERVED 0xff000000 + +typedef enum _DNS_NAME_FORMAT +{ + DnsNameDomain, + DnsNameDomainLabel, + DnsNameHostnameFull, + DnsNameHostnameLabel, + DnsNameWildcard, + DnsNameSrvRecord +} DNS_NAME_FORMAT; + +typedef enum _DNS_FREE_TYPE +{ + DnsFreeFlat, + DnsFreeRecordList, + DnsFreeParsedMessageFields +} DNS_FREE_TYPE; + +typedef enum _DNS_CHARSET +{ + DnsCharSetUnknown, + DnsCharSetUnicode, + DnsCharSetUtf8, + DnsCharSetAnsi +} DNS_CHARSET; + +typedef enum _DNS_CONFIG_TYPE +{ + DnsConfigPrimaryDomainName_W, + DnsConfigPrimaryDomainName_A, + DnsConfigPrimaryDomainName_UTF8, + DnsConfigAdapterDomainName_W, + DnsConfigAdapterDomainName_A, + DnsConfigAdapterDomainName_UTF8, + DnsConfigDnsServerList, + DnsConfigSearchList, + DnsConfigAdapterInfo, + DnsConfigPrimaryHostNameRegistrationEnabled, + DnsConfigAdapterHostNameRegistrationEnabled, + DnsConfigAddressRegistrationMaxCount, + DnsConfigHostName_W, + DnsConfigHostName_A, + DnsConfigHostName_UTF8, + DnsConfigFullHostName_W, + DnsConfigFullHostName_A, + DnsConfigFullHostName_UTF8 +} DNS_CONFIG_TYPE; + +typedef enum _DnsSection +{ + DnsSectionQuestion, + DnsSectionAnswer, + DnsSectionAuthority, + DnsSectionAddtional +} DNS_SECTION; + +typedef long DNS_STATUS; +typedef DWORD IP4_ADDRESS; + +typedef struct +{ + DWORD IP6Dword[4]; +} IP6_ADDRESS, *PIP6_ADDRESS, DNS_IP6_ADDRESS, *PDNS_IP6_ADDRESS; + +typedef struct _IP4_ARRAY +{ + DWORD AddrCount; + IP4_ADDRESS AddrArray[1]; +} IP4_ARRAY, *PIP4_ARRAY; + +typedef struct _DNS_HEADER +{ + WORD Xid; + BYTE RecursionDesired; + BYTE Truncation; + BYTE Authoritative; + BYTE Opcode; + BYTE IsResponse; + BYTE ResponseCode; + BYTE Reserved; + BYTE RecursionAvailable; + WORD QuestionCount; + WORD AnswerCount; + WORD NameServerCount; + WORD AdditionalCount; +} DNS_HEADER, *PDNS_HEADER; + +typedef struct _DNS_MESSAGE_BUFFER +{ + DNS_HEADER MessageHead; + CHAR MessageBody[1]; +} DNS_MESSAGE_BUFFER, *PDNS_MESSAGE_BUFFER; + +typedef struct +{ + IP4_ADDRESS IpAddress; +} DNS_A_DATA, *PDNS_A_DATA; + +typedef struct _DnsRecordFlags +{ + DWORD Section :2; + DWORD Delete :1; + DWORD CharSet :2; + DWORD Unused :3; + DWORD Reserved :24; +} DNS_RECORD_FLAGS; + +typedef struct +{ + LPSTR pNamePrimaryServer; + LPSTR pNameAdministrator; + DWORD dwSerialNo; + DWORD dwRefresh; + DWORD dwRetry; + DWORD dwExpire; + DWORD dwDefaultTtl; +} DNS_SOA_DATAA, *PDNS_SOA_DATAA; + +typedef struct +{ + LPWSTR pNamePrimaryServer; + LPWSTR pNameAdministrator; + DWORD dwSerialNo; + DWORD dwRefresh; + DWORD dwRetry; + DWORD dwExpire; + DWORD dwDefaultTtl; +} DNS_SOA_DATAW, *PDNS_SOA_DATAW; + +DECL_WINELIB_TYPE_AW(DNS_SOA_DATA) +DECL_WINELIB_TYPE_AW(PDNS_SOA_DATA) + +typedef struct +{ + LPSTR pNameHost; +} DNS_PTR_DATAA, *PDNS_PTR_DATAA; + +typedef struct +{ + LPWSTR pNameHost; +} DNS_PTR_DATAW, *PDNS_PTR_DATAW; + +DECL_WINELIB_TYPE_AW(DNS_PTR_DATA) +DECL_WINELIB_TYPE_AW(PDNS_PTR_DATA) + +typedef struct +{ + LPSTR pNameMailbox; + LPSTR pNameErrorsMailbox; +} DNS_MINFO_DATAA, *PDNS_MINFO_DATAA; + +typedef struct +{ + LPWSTR pNameMailbox; + LPWSTR pNameErrorsMailbox; +} DNS_MINFO_DATAW, *PDNS_MINFO_DATAW; + +DECL_WINELIB_TYPE_AW(DNS_MINFO_DATA) +DECL_WINELIB_TYPE_AW(PDNS_MINFO_DATA) + +typedef struct +{ + LPSTR pNameExchange; + WORD wPreference; + WORD Pad; +} DNS_MX_DATAA, *PDNS_MX_DATAA; + +typedef struct +{ + LPWSTR pNameExchange; + WORD wPreference; + WORD Pad; +} DNS_MX_DATAW, *PDNS_MX_DATAW; + +DECL_WINELIB_TYPE_AW(DNS_MX_DATA) +DECL_WINELIB_TYPE_AW(PDNS_MX_DATA) + +typedef struct +{ + DWORD dwStringCount; + LPSTR pStringArray[1]; +} DNS_TXT_DATAA, *PDNS_TXT_DATAA; + +typedef struct +{ + DWORD dwStringCount; + LPWSTR pStringArray[1]; +} DNS_TXT_DATAW, *PDNS_TXT_DATAW; + +DECL_WINELIB_TYPE_AW(DNS_TXT_DATA) +DECL_WINELIB_TYPE_AW(PDNS_TXT_DATA) + +typedef struct +{ + DWORD dwByteCount; + BYTE Data[1]; +} DNS_NULL_DATA, *PDNS_NULL_DATA; + +typedef struct +{ + IP4_ADDRESS IpAddress; + UCHAR chProtocol; + BYTE BitMask[1]; +} DNS_WKS_DATA, *PDNS_WKS_DATA; + +typedef struct +{ + DNS_IP6_ADDRESS Ip6Address; +} DNS_AAAA_DATA, *PDNS_AAAA_DATA; + +typedef struct +{ + WORD wFlags; + BYTE chProtocol; + BYTE chAlgorithm; + BYTE Key[1]; +} DNS_KEY_DATA, *PDNS_KEY_DATA; + +typedef struct +{ + WORD wVersion; + WORD wSize; + WORD wHorPrec; + WORD wVerPrec; + DWORD dwLatitude; + DWORD dwLongitude; + DWORD dwAltitude; +} DNS_LOC_DATA, *PDNS_LOC_DATA; + +typedef struct +{ + LPSTR pNameSigner; + WORD wTypeCovered; + BYTE chAlgorithm; + BYTE chLabelCount; + DWORD dwOriginalTtl; + DWORD dwExpiration; + DWORD dwTimeSigned; + WORD wKeyTag; + WORD Pad; + BYTE Signature[1]; +} DNS_SIG_DATAA, *PDNS_SIG_DATAA; + +typedef struct +{ + LPWSTR pNameSigner; + WORD wTypeCovered; + BYTE chAlgorithm; + BYTE chLabelCount; + DWORD dwOriginalTtl; + DWORD dwExpiration; + DWORD dwTimeSigned; + WORD wKeyTag; + WORD Pad; + BYTE Signature[1]; +} DNS_SIG_DATAW, *PDNS_SIG_DATAW; + +DECL_WINELIB_TYPE_AW(DNS_SIG_DATA) +DECL_WINELIB_TYPE_AW(PDNS_SIG_DATA) + +#define DNS_ATMA_MAX_ADDR_LENGTH 20 + +typedef struct +{ + BYTE AddressType; + BYTE Address[DNS_ATMA_MAX_ADDR_LENGTH]; +} DNS_ATMA_DATA, *PDNS_ATMA_DATA; + +typedef struct +{ + LPSTR pNameNext; + WORD wNumTypes; + WORD wTypes[1]; +} DNS_NXT_DATAA, *PDNS_NXT_DATAA; + +typedef struct +{ + LPWSTR pNameNext; + WORD wNumTypes; + WORD wTypes[1]; +} DNS_NXT_DATAW, *PDNS_NXT_DATAW; + +DECL_WINELIB_TYPE_AW(DNS_NXT_DATA) +DECL_WINELIB_TYPE_AW(PDNS_NXT_DATA) + +typedef struct +{ + LPSTR pNameTarget; + WORD wPriority; + WORD wWeight; + WORD wPort; + WORD Pad; +} DNS_SRV_DATAA, *PDNS_SRV_DATAA; + +typedef struct +{ + LPWSTR pNameTarget; + WORD wPriority; + WORD wWeight; + WORD wPort; + WORD Pad; +} DNS_SRV_DATAW, *PDNS_SRV_DATAW; + +DECL_WINELIB_TYPE_AW(DNS_SRV_DATA) +DECL_WINELIB_TYPE_AW(PDNS_SRV_DATA) + +typedef struct +{ + LPSTR pNameAlgorithm; + PBYTE pAlgorithmPacket; + PBYTE pKey; + PBYTE pOtherData; + DWORD dwCreateTime; + DWORD dwExpireTime; + WORD wMode; + WORD wError; + WORD wKeyLength; + WORD wOtherLength; + UCHAR cAlgNameLength; + BOOL bPacketPointers; +} DNS_TKEY_DATAA, *PDNS_TKEY_DATAA; + +typedef struct +{ + LPWSTR pNameAlgorithm; + PBYTE pAlgorithmPacket; + PBYTE pKey; + PBYTE pOtherData; + DWORD dwCreateTime; + DWORD dwExpireTime; + WORD wMode; + WORD wError; + WORD wKeyLength; + WORD wOtherLength; + UCHAR cAlgNameLength; + BOOL bPacketPointers; +} DNS_TKEY_DATAW, *PDNS_TKEY_DATAW; + +DECL_WINELIB_TYPE_AW(DNS_TKEY_DATA) +DECL_WINELIB_TYPE_AW(PDNS_TKEY_DATA) + +typedef struct +{ + LPSTR pNameAlgorithm; + PBYTE pAlgorithmPacket; + PBYTE pSignature; + PBYTE pOtherData; + LONGLONG i64CreateTime; + WORD wFudgeTime; + WORD wOriginalXid; + WORD wError; + WORD wSigLength; + WORD wOtherLength; + UCHAR cAlgNameLength; + BOOL bPacketPointers; +} DNS_TSIG_DATAA, *PDNS_TSIG_DATAA; + +typedef struct +{ + LPWSTR pNameAlgorithm; + PBYTE pAlgorithmPacket; + PBYTE pSignature; + PBYTE pOtherData; + LONGLONG i64CreateTime; + WORD wFudgeTime; + WORD wOriginalXid; + WORD wError; + WORD wSigLength; + WORD wOtherLength; + UCHAR cAlgNameLength; + BOOL bPacketPointers; +} DNS_TSIG_DATAW, *PDNS_TSIG_DATAW; + +typedef struct +{ + DWORD dwMappingFlag; + DWORD dwLookupTimeout; + DWORD dwCacheTimeout; + DWORD cWinsServerCount; + IP4_ADDRESS WinsServers[1]; +} DNS_WINS_DATA, *PDNS_WINS_DATA; + +typedef struct +{ + DWORD dwMappingFlag; + DWORD dwLookupTimeout; + DWORD dwCacheTimeout; + LPSTR pNameResultDomain; +} DNS_WINSR_DATAA, *PDNS_WINSR_DATAA; + +typedef struct +{ + DWORD dwMappingFlag; + DWORD dwLookupTimeout; + DWORD dwCacheTimeout; + LPWSTR pNameResultDomain; +} DNS_WINSR_DATAW, *PDNS_WINSR_DATAW; + +DECL_WINELIB_TYPE_AW(DNS_WINSR_DATA) +DECL_WINELIB_TYPE_AW(PDNS_WINSR_DATA) + +typedef struct _DnsRecordA +{ + struct _DnsRecordA *pNext; + LPSTR pName; + WORD wType; + WORD wDataLength; + union + { + DWORD DW; + DNS_RECORD_FLAGS S; + } Flags; + DWORD dwTtl; + DWORD dwReserved; + union + { + DNS_A_DATA A; + DNS_SOA_DATAA SOA, Soa; + DNS_PTR_DATAA PTR, Ptr, NS, Ns, CNAME, Cname, MB, Mb, MD, Md, MF, Mf, MG, Mg, MR, Mr; + DNS_MINFO_DATAA MINFO, Minfo, RP, Rp; + DNS_MX_DATAA MX, Mx, AFSDB, Afsdb, RT, Rt; + DNS_TXT_DATAA HINFO, Hinfo, ISDN, Isdn, TXT, Txt, X25; + DNS_NULL_DATA Null; + DNS_WKS_DATA WKS, Wks; + DNS_AAAA_DATA AAAA; + DNS_KEY_DATA KEY, Key; + DNS_SIG_DATAA SIG, Sig; + DNS_ATMA_DATA ATMA, Atma; + DNS_NXT_DATAA NXT, Nxt; + DNS_SRV_DATAA SRV, Srv; + DNS_TKEY_DATAA TKEY, Tkey; + DNS_TSIG_DATAA TSIG, Tsig; + DNS_WINS_DATA WINS, Wins; + DNS_WINSR_DATAA WINSR, WinsR, NBSTAT, Nbstat; + } Data; +} DNS_RECORDA, *PDNS_RECORDA; + +typedef struct _DnsRecordW +{ + struct _DnsRecordW *pNext; + LPWSTR pName; + WORD wType; + WORD wDataLength; + union + { + DWORD DW; + DNS_RECORD_FLAGS S; + } Flags; + DWORD dwTtl; + DWORD dwReserved; + union + { + DNS_A_DATA A; + DNS_SOA_DATAW SOA, Soa; + DNS_PTR_DATAW PTR, Ptr, NS, Ns, CNAME, Cname, MB, Mb, MD, Md, MF, Mf, MG, Mg, MR, Mr; + DNS_MINFO_DATAW MINFO, Minfo, RP, Rp; + DNS_MX_DATAW MX, Mx, AFSDB, Afsdb, RT, Rt; + DNS_TXT_DATAW HINFO, Hinfo, ISDN, Isdn, TXT, Txt, X25; + DNS_NULL_DATA Null; + DNS_WKS_DATA WKS, Wks; + DNS_AAAA_DATA AAAA; + DNS_KEY_DATA KEY, Key; + DNS_SIG_DATAW SIG, Sig; + DNS_ATMA_DATA ATMA, Atma; + DNS_NXT_DATAW NXT, Nxt; + DNS_SRV_DATAW SRV, Srv; + DNS_TKEY_DATAW TKEY, Tkey; + DNS_TSIG_DATAW TSIG, Tsig; + DNS_WINS_DATA WINS, Wins; + DNS_WINSR_DATAW WINSR, WinsR, NBSTAT, Nbstat; + } Data; +} DNS_RECORDW, *PDNS_RECORDW; + +DECL_WINELIB_TYPE_AW(DNS_RECORD) +DECL_WINELIB_TYPE_AW(PDNS_RECORD) + +DNS_STATUS WINAPI DnsAcquireContextHandle_A(DWORD,PVOID,HANDLE*); +DNS_STATUS WINAPI DnsAcquireContextHandle_W(DWORD,PVOID,HANDLE*); +DNS_STATUS WINAPI DnsExtractRecordsFromMessage_W(PDNS_MESSAGE_BUFFER,WORD,PDNS_RECORDW*); +DNS_STATUS WINAPI DnsExtractRecordsFromMessage_UTF8(PDNS_MESSAGE_BUFFER,WORD,PDNS_RECORDA*); +DNS_STATUS WINAPI DnsModifyRecordsInSet_A(PDNS_RECORDA,PDNS_RECORDA,DWORD,HANDLE,PIP4_ARRAY,PVOID); +DNS_STATUS WINAPI DnsModifyRecordsInSet_W(PDNS_RECORDW,PDNS_RECORDW,DWORD,HANDLE,PIP4_ARRAY,PVOID); +DNS_STATUS WINAPI DnsModifyRecordsInSet_UTF8(PDNS_RECORDA,PDNS_RECORDA,DWORD,HANDLE,PIP4_ARRAY,PVOID); +BOOL WINAPI DnsNameCompare_A(LPSTR,LPSTR); +BOOL WINAPI DnsNameCompare_W(LPWSTR,LPWSTR); +DNS_STATUS WINAPI DnsQuery_A(PCSTR,WORD,DWORD,PIP4_ARRAY,PDNS_RECORDA*,PVOID*); +DNS_STATUS WINAPI DnsQuery_W(PCWSTR,WORD,DWORD,PIP4_ARRAY,PDNS_RECORDW*,PVOID*); +DNS_STATUS WINAPI DnsQuery_UTF8(PCSTR,WORD,DWORD,PIP4_ARRAY,PDNS_RECORDA*,PVOID*); +DNS_STATUS WINAPI DnsQueryConfig(DNS_CONFIG_TYPE,DWORD,PWSTR,PVOID,PVOID,PDWORD); +void WINAPI DnsReleaseContextHandle(HANDLE); +DNS_STATUS WINAPI DnsReplaceRecordSetA(PDNS_RECORDA,DWORD,HANDLE,PIP4_ARRAY,PVOID); +DNS_STATUS WINAPI DnsReplaceRecordSetW(PDNS_RECORDW,DWORD,HANDLE,PIP4_ARRAY,PVOID); +DNS_STATUS WINAPI DnsReplaceRecordSetUTF8(PDNS_RECORDA,DWORD,HANDLE,PIP4_ARRAY,PVOID); +DNS_STATUS WINAPI DnsValidateName_A(LPCSTR,DNS_NAME_FORMAT); +DNS_STATUS WINAPI DnsValidateName_W(LPCWSTR, DNS_NAME_FORMAT); +DNS_STATUS WINAPI DnsValidateName_UTF8(LPCSTR,DNS_NAME_FORMAT); +BOOL WINAPI DnsWriteQuestionToBuffer_W(PDNS_MESSAGE_BUFFER,LPDWORD,LPWSTR,WORD,WORD,BOOL); +BOOL WINAPI DnsWriteQuestionToBuffer_UTF8(PDNS_MESSAGE_BUFFER,LPDWORD,LPSTR,WORD,WORD,BOOL); + +#ifdef __cplusplus +} +#endif + +#endif