92 pRecord->
dwTtl = 7 * 24 * 60 * 60;
123 pRecord->
dwTtl = 7 * 24 * 60 * 60;
199 if (WideString ==
NULL)
257 if (WideString ==
NULL)
288 if (QueryResultSet ==
NULL)
309 switch (QueryResultWide->wType)
332 if (ConvertedRecord ==
NULL)
338 QueryResultSet =
NULL;
344 ConvertedRecord->pName =
DnsWToC((
PWCHAR)QueryResultWide->pName);
353 ConvertedRecord->wType = QueryResultWide->wType;
355 switch (QueryResultWide->wType)
359 ConvertedRecord->wDataLength = QueryResultWide->wDataLength;
360 memcpy(&ConvertedRecord->Data, &QueryResultWide->Data, QueryResultWide->wDataLength);
373 ConvertedRecord->Data.PTR.pNameHost =
DnsWToC((
PWCHAR)QueryResultWide->Data.PTR.pNameHost);
375 ConvertedRecord->Data.PTR.pNameHost =
DnsWToUTF8((
PWCHAR)QueryResultWide->Data.PTR.pNameHost);
382 ConvertedRecord->Data.MINFO.pNameMailbox =
DnsWToC((
PWCHAR)QueryResultWide->Data.MINFO.pNameMailbox);
383 ConvertedRecord->Data.MINFO.pNameErrorsMailbox =
DnsWToC((
PWCHAR)QueryResultWide->Data.MINFO.pNameErrorsMailbox);
387 ConvertedRecord->Data.MINFO.pNameMailbox =
DnsWToUTF8((
PWCHAR)QueryResultWide->Data.MINFO.pNameMailbox);
388 ConvertedRecord->Data.MINFO.pNameErrorsMailbox =
DnsWToUTF8((
PWCHAR)QueryResultWide->Data.MINFO.pNameErrorsMailbox);
393 ConvertedRecord->wDataLength =
sizeof(
DNS_MX_DATA);
395 ConvertedRecord->Data.MX.pNameExchange =
DnsWToC((
PWCHAR)QueryResultWide->Data.MX.pNameExchange);
397 ConvertedRecord->Data.MX.pNameExchange =
DnsWToUTF8((
PWCHAR)QueryResultWide->Data.MX.pNameExchange);
398 ConvertedRecord->Data.MX.wPreference = QueryResultWide->Data.MX.wPreference;
402 ConvertedRecord->wDataLength =
sizeof(
DNS_TXT_DATA) + (
sizeof(
PCHAR) * QueryResultWide->Data.TXT.dwStringCount);
403 ConvertedRecord->Data.TXT.dwStringCount = QueryResultWide->Data.TXT.dwStringCount;
406 for (
i = 0;
i < ConvertedRecord->Data.TXT.dwStringCount;
i++)
407 ConvertedRecord->Data.TXT.pStringArray[
i] =
DnsWToC((
PWCHAR)QueryResultWide->Data.TXT.pStringArray[
i]);
409 for (
i = 0;
i < ConvertedRecord->Data.TXT.dwStringCount;
i++)
410 ConvertedRecord->Data.TXT.pStringArray[
i] =
DnsWToUTF8((
PWCHAR)QueryResultWide->Data.TXT.pStringArray[
i]);
415 ConvertedRecord->wDataLength =
sizeof(
DNS_NULL_DATA) + QueryResultWide->Data.Null.dwByteCount;
416 ConvertedRecord->Data.Null.dwByteCount = QueryResultWide->Data.Null.dwByteCount;
417 memcpy(&ConvertedRecord->Data.Null.Data, &QueryResultWide->Data.Null.Data, QueryResultWide->Data.Null.dwByteCount);
423 LastRecord->pNext = ConvertedRecord;
424 LastRecord = LastRecord->pNext;
428 LastRecord = *QueryResultSet = ConvertedRecord;
431 QueryResultWide = QueryResultWide->pNext;
435 LastRecord->pNext = 0;
484 (QueryResultSet ==
NULL))
487 *QueryResultSet =
NULL;
595 TempSize += StringLength;
597 TempSize += StringLength;
615 AdapterAddressesSize = 0;
618 GAA_FLAG_SKIP_ANYCAST | GAA_FLAG_SKIP_MULTICAST,
621 &AdapterAddressesSize);
622 if (!AdapterAddressesSize)
626 Addresses =
RtlAllocateHeap(RtlGetProcessHeap(), 0, AdapterAddressesSize);
629 GAA_FLAG_SKIP_ANYCAST | GAA_FLAG_SKIP_MULTICAST,
632 &AdapterAddressesSize);
638 for (pip = Addresses; pip !=
NULL; pip = pip->Next) {
666 ULONG network_info_blen = 0;
667 DWORD network_info_result;
671 PCHAR HostWithDomainName;
677 if (QueryResultSet ==
NULL)
680 *QueryResultSet =
NULL;
695 if (
NULL == AnsiName)
711 if (
NULL == network_info)
720 return network_info_result;
725 size_t TempLen = 2, StringLength = 0;
728 TempLen += StringLength;
730 TempLen += StringLength;
741 if (
NULL == *QueryResultSet)
743 RtlFreeHeap(RtlGetProcessHeap(), 0, HostWithDomainName);
747 (*QueryResultSet)->pNext =
NULL;
748 (*QueryResultSet)->wType =
Type;
749 (*QueryResultSet)->wDataLength =
sizeof(
DNS_A_DATA);
752 (*QueryResultSet)->Data.A.IpAddress =
Address;
754 (*QueryResultSet)->pName = (
LPSTR)
DnsCToW(HostWithDomainName);
756 RtlFreeHeap(RtlGetProcessHeap(), 0, HostWithDomainName);
807#define CNAME_LOOP_MAX 16
809 CurrentName = AnsiName;
819 if (CurrentName != AnsiName)
826 if (answer && answer->
rrs.
addr)
828 if (CurrentName != AnsiName)
834 if (
NULL == *QueryResultSet)
840 (*QueryResultSet)->pNext =
NULL;
841 (*QueryResultSet)->wType =
Type;
842 (*QueryResultSet)->wDataLength =
sizeof(
DNS_A_DATA);
845 (*QueryResultSet)->Data.A.IpAddress = answer->
rrs.
addr->
addr.
inet.sin_addr.s_addr;
858 if (CurrentName != AnsiName)
865 if (CurrentName != AnsiName)
897 RtlFreeHeap(RtlGetProcessHeap(), 0, ToDelete->pName);
899 switch(ToDelete->wType)
909 RtlFreeHeap(RtlGetProcessHeap(), 0, ToDelete->Data.PTR.pNameHost);
914 RtlFreeHeap(RtlGetProcessHeap(), 0, ToDelete->Data.MX.pNameExchange);
918 for(
i = 0;
i < ToDelete->Data.TXT.dwStringCount;
i++)
919 RtlFreeHeap(RtlGetProcessHeap(), 0, ToDelete->Data.TXT.pStringArray[
i]);
921 RtlFreeHeap(RtlGetProcessHeap(), 0, ToDelete->Data.TXT.pStringArray);
925 next = ToDelete->pNext;
937 DPRINT(
"DnsFlushResolverCache()\n");
942 DPRINT(
"R_ResolverFlushCache() returned %lu\n",
Status);
963 DPRINT1(
"DnsFlushResolverCacheEntry_A(%s)\n", pszEntry);
965 if (pszEntry ==
NULL)
968 pszUnicodeEntry =
DnsCToW(pszEntry);
969 if (pszUnicodeEntry ==
NULL)
975 DPRINT(
"R_ResolverFlushCacheEntry() returned %lu\n",
Status);
984 RtlFreeHeap(RtlGetProcessHeap(), 0, pszUnicodeEntry);
998 DPRINT1(
"DnsFlushResolverCacheEntry_UTF8(%s)\n", pszEntry);
1000 if (pszEntry ==
NULL)
1003 pszUnicodeEntry =
DnsCToW(pszEntry);
1004 if (pszUnicodeEntry ==
NULL)
1010 DPRINT(
"R_ResolverFlushCacheEntry() returned %lu\n",
Status);
1019 RtlFreeHeap(RtlGetProcessHeap(), 0, pszUnicodeEntry);
1032 DPRINT1(
"DnsFlushResolverCacheEntry_W(%S)\n", pszEntry);
1034 if (pszEntry ==
NULL)
1040 DPRINT(
"R_ResolverFlushCacheEntry() returned %lu\n",
Status);
1080 if (CacheEntries ==
NULL)
ULONG WSAAPI inet_addr(IN CONST CHAR FAR *cp)
DNS_STATUS DnsIntTranslateAdnsToDNS_STATUS(int Status)
ADNS_API void adns_addserver(adns_state state, struct in_addr server)
ADNS_API void adns_finish(adns_state ads)
ADNS_API int adns_synchronous(adns_state ads, const char *owner, adns_rrtype type, adns_queryflags flags, adns_answer **answer_r)
ADNS_API int adns_numservers(adns_state state)
ADNS_API int adns_init(adns_state *newstate_r, adns_initflags flags, FILE *diagfile)
ADNS_API void adns_ccf_search(adns_state state, const char *fn, int lno, const char *buf)
static RESOLVER_CACHE DnsCache
DWORD __stdcall CRrReadCache(_In_ DNSRSLVR_HANDLE pwszServerName, _Out_ DNS_CACHE_ENTRY **ppCacheEntries)
DWORD __stdcall R_ResolverQuery(_In_ DNSRSLVR_HANDLE pszServerName, _In_ LPCWSTR pszName, _In_ WORD wType, _In_ DWORD dwFlags, _Inout_ DWORD *dwRecords, _Out_ DNS_RECORDW **ppResultRecords)
DWORD __stdcall R_ResolverFlushCache(_In_ DNSRSLVR_HANDLE pszServerName)
DWORD __stdcall R_ResolverFlushCacheEntry(_In_ DNSRSLVR_HANDLE pszServerName, _In_ LPCWSTR pszName, _In_ WORD wType)
PVOID NTAPI RtlAllocateHeap(IN PVOID HeapHandle, IN ULONG Flags, IN SIZE_T Size)
BOOLEAN NTAPI RtlFreeHeap(IN PVOID HeapHandle, IN ULONG Flags, IN PVOID HeapBase)
#define NT_SUCCESS(StatCode)
#define ERROR_INVALID_PARAMETER
#define WideCharToMultiByte
#define MultiByteToWideChar
#define ERROR_INVALID_NAME
DNS_STATUS WINAPI DnsQuery_CodePage(UINT CodePage, LPCSTR Name, WORD Type, DWORD Options, PVOID Extra, PDNS_RECORD *QueryResultSet, PVOID *Reserved)
BOOL WINAPI DnsFlushResolverCache(VOID)
DNS_STATUS WINAPI DnsQuery_A(LPCSTR Name, WORD Type, DWORD Options, PVOID Extra, PDNS_RECORD *QueryResultSet, PVOID *Reserved)
void DnsIntFreeRecordList(PDNS_RECORD ToDelete)
static BOOL ParseIpv4Address(_In_ PCWSTR AddressString, _Out_ PIN_ADDR pAddress)
BOOL WINAPI DnsFlushResolverCacheEntry_A(_In_ LPCSTR pszEntry)
BOOL WINAPI DnsFlushResolverCacheEntry_W(_In_ LPCWSTR pszEntry)
DNS_STATUS WINAPI DnsQuery_W(LPCWSTR Name, WORD Type, DWORD Options, PVOID Extra, PDNS_RECORD *QueryResultSet, PVOID *Reserved)
DNS_STATUS WINAPI DnsQuery_UTF8(LPCSTR Name, WORD Type, DWORD Options, PVOID Extra, PDNS_RECORD *QueryResultSet, PVOID *Reserved)
static PWCHAR DnsUTF8ToW(const CHAR *NarrowString)
BOOL WINAPI DnsGetCacheDataTable(_Out_ PDNS_CACHE_ENTRY *DnsCache)
BOOL WINAPI DnsFlushResolverCacheEntry_UTF8(_In_ LPCSTR pszEntry)
static PWCHAR DnsCToW(const CHAR *NarrowString)
DWORD WINAPI GetCurrentTimeInSeconds(VOID)
IP4_ADDRESS CheckForCurrentHostname(CONST CHAR *Name, PFIXED_INFO network_info)
static PCHAR DnsWToUTF8(const WCHAR *WideString)
static PDNS_RECORDW CreateRecordForIpAddress(_In_ PCWSTR Name, _In_ WORD Type)
CHAR * xstrsaveA(const CHAR *str)
DNS_STATUS WINAPI Query_Main(LPCWSTR Name, WORD Type, DWORD Options, PDNS_RECORD *QueryResultSet)
static PCHAR DnsWToC(const WCHAR *WideString)
WCHAR * xstrsave(const WCHAR *str)
static BOOL ParseIpv6Address(_In_ PCWSTR AddressString, _Out_ PIN6_ADDR pAddress)
VOID WINAPI GetSystemTimeAsFileTime(OUT PFILETIME lpFileTime)
BOOL WINAPI SystemTimeToFileTime(IN CONST SYSTEMTIME *lpSystemTime, OUT LPFILETIME lpFileTime)
GLenum const GLvoid * addr
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
_CRTIMP size_t __cdecl wcslen(_In_z_ const wchar_t *_Str)
_CONST_RETURN wchar_t *__cdecl wcsstr(_In_z_ const wchar_t *_Str, _In_z_ const wchar_t *_SubStr)
#define EXCEPTION_EXECUTE_HANDLER
static PIP_ADAPTER_ADDRESSES
DWORD WINAPI GetNetworkParams(PFIXED_INFO pFixedInfo, PULONG pOutBufLen)
#define GAA_FLAG_SKIP_FRIENDLY_NAME
struct FIXED_INFO * PFIXED_INFO
#define memcpy(s1, s2, n)
#define ERROR_FILE_NOT_FOUND
static PLARGE_INTEGER Time
NTSYSAPI NTSTATUS NTAPI RtlIpv6StringToAddressW(_In_ PCWSTR String, _Out_ PCWSTR *Terminator, _Out_ struct in6_addr *Addr)
NTSYSAPI NTSTATUS NTAPI RtlIpv4StringToAddressW(_In_ PCWSTR String, _In_ BOOLEAN Strict, _Out_ PCWSTR *Terminator, _Out_ struct in_addr *Addr)
static unsigned __int64 next
#define RpcExceptionCode()
STRSAFEAPI StringCchCatA(STRSAFE_LPSTR pszDest, size_t cchDest, STRSAFE_LPCSTR pszSrc)
STRSAFEAPI StringCbLengthW(STRSAFE_LPCWSTR psz, size_t cbMax, size_t *pcbLength)
STRSAFEAPI StringCbCopyW(STRSAFE_LPWSTR pszDest, size_t cbDest, STRSAFE_LPCWSTR pszSrc)
STRSAFEAPI StringCbLengthA(STRSAFE_LPCSTR psz, size_t cbMax, size_t *pcbLength)
STRSAFEAPI StringCchLengthA(STRSAFE_LPCSTR psz, size_t cchMax, size_t *pcchLength)
STRSAFEAPI StringCchCopyA(STRSAFE_LPSTR pszDest, size_t cchDest, STRSAFE_LPCSTR pszSrc)
STRSAFEAPI StringCbCopyA(STRSAFE_LPSTR pszDest, size_t cbDest, STRSAFE_LPCSTR pszSrc)
DNS_IP6_ADDRESS Ip6Address
IP_ADDR_STRING DnsServerList
char HostName[MAX_HOSTNAME_LEN+4]
char DomainName[MAX_DOMAIN_NAME_LEN+4]
union _DnsRecordW::@3316 Data
union _DnsRecordW::@3315 Flags
struct _IP_ADDR_STRING * Next
IP_ADDRESS_STRING IpAddress
union adns_answer::@4271 rrs
union adns_rr_addr::@4270 addr
union in_addr::@1034 S_un
_In_ PWDFDEVICE_INIT _In_ PWDF_REMOVE_LOCK_OPTIONS Options
_Reserved_ PVOID Reserved
#define DNS_QUERY_NO_RECURSION
#define DNS_QUERY_NO_WIRE_QUERY
#define DNS_ERROR_INVALID_NAME_CHAR
struct sockaddr_in * LPSOCKADDR_IN
_In_ KPRIORITY _In_ LONG Adjustment