/*++ Copyright (C) Microsoft Corporation, 1998-2002 Module Name: dnscmn.h Abstract: Domain Name System (DNS) Netdiag tests. Author: Elena Apreutesei (elenaap) 10/22/98 Revision History: jamesg May 2002 -- cleanup for network info changes jamesg Sept 2000 -- more scrub and cleanup --*/ #ifndef _DNSCOMMON_H_ #define _DNSCOMMON_H_ #include // // Version note: // - code cleanup but // - uses "fixed up" DNS_NETWORK_INFORMATION (UTF8) // - not converted to public DNS_NETWORK_INFO struct // - not unicode // - not IP6 aware // // // Currently getting DNS info in UTF8 // //#define PDNS_NETINFO PDNS_NETWORK_INFOW //#define PDNS_ADAPTER PDNS_ADAPTER_INFOW //#define PDNS_NETINFO PDNS_NETWORK_INFORMATION //#define PDNS_ADAPTER PDNS_ADAPTER_INFORMATION //#define PDNS_SERVER_INFO PDNS_SERVER_INFORMATION // // DNS structures // // DCR: replace with public DNS structures // // These are a mapping of old public DNS structures onto private // netdiag structures to preserve the netdiag names and // field names. They should be replaced by switching to a // new set of unicode public structures. // typedef struct { IP4_ADDRESS IpAddress; DWORD Priority; } DNS_SERVER_INFO, *PDNS_SERVER_INFO; typedef struct { PSTR pszAdapterGuidName; PSTR pszAdapterDomain; PVOID pReserved1; PVOID pReserved2; DWORD InfoFlags; DWORD ServerCount; DNS_SERVER_INFO ServerArray[1]; } DNS_ADAPTER, *PDNS_ADAPTER; typedef struct { PSTR pszDomainOrZoneName; DWORD NameCount; PSTR SearchNameArray[1]; } SEARCH_LIST, *PSEARCH_LIST; typedef struct { PSEARCH_LIST pSearchList; DWORD AdapterCount; PDNS_ADAPTER AdapterArray[1]; } DNS_NETINFO, *PDNS_NETINFO; // // Build sanity check // C_ASSERT( sizeof(SEARCH_LIST) == sizeof(DNS_SEARCH_INFORMATION) ); C_ASSERT( sizeof(DNS_SERVER_INFO) == sizeof(DNS_SERVER_INFORMATION) ); C_ASSERT( sizeof(DNS_ADAPTER) == sizeof(DNS_ADAPTER_INFORMATION) ); C_ASSERT( sizeof(DNS_NETINFO) == sizeof(DNS_NETWORK_INFORMATION) ); // // Map dnsapi.h def for network config retrieval // #define DnsConfigNetworkInfoUTF8 DnsConfigNetworkInformation // // Private dnsapi.dll interface for netdiag // DNS_STATUS DnsNetworkInformation_CreateFromFAZ( IN PCSTR pszName, IN DWORD dwFlags, IN PIP4_ARRAY pIp4Servers, OUT PDNS_NETINFO * ppNetworkInfo ); // // Private defines // #define MAX_NAME_SERVER_COUNT (20) #define MAX_ADDRS (35) #define DNS_QUERY_DATABASE (0x200) #define IP_ARRAY_SIZE(a) (sizeof(DWORD) + (a)*sizeof(IP_ADDRESS)) #define IP4_ARRAY_SIZE(a) IP_ARRAY_SIZE(a) // Use dnslib memory routines #define ALLOCATE_HEAP(iSize) Dns_Alloc(iSize) #define ALLOCATE_HEAP_ZERO(iSize) Dns_AllocZero(iSize) #define REALLOCATE_HEAP(pMem,iSize) Dns_Realloc((pMem),(iSize)) #define FREE_HEAP(pMem) Dns_Free(pMem) // // Registration info blob // typedef struct { PVOID pNext; char szDomainName[DNS_MAX_NAME_BUFFER_LENGTH]; char szAuthoritativeZone[DNS_MAX_NAME_BUFFER_LENGTH]; DWORD dwAuthNSCount; IP_ADDRESS AuthoritativeNS[MAX_NAME_SERVER_COUNT]; DWORD dwIPCount; IP_ADDRESS IPAddresses[MAX_ADDRS]; DNS_STATUS AllowUpdates; } REGISTRATION_INFO, *PREGISTRATION_INFO; // // DNS test functions // BOOL SameAuthoritativeServers( IN PREGISTRATION_INFO pCurrent, IN PIP4_ARRAY pNS ); DNS_STATUS ComputeExpectedRegistration( IN LPSTR pszHostName, IN LPSTR pszPrimaryDomain, IN PDNS_NETINFO pNetworkInfo, OUT PREGISTRATION_INFO * ppExpectedRegistration, OUT NETDIAG_PARAMS * pParams, OUT NETDIAG_RESULT * pResults ); VOID AddToExpectedRegistration( IN LPSTR pszDomain, IN PDNS_ADAPTER pAdapterInfo, IN PDNS_NETINFO pFazResult, IN PIP4_ARRAY pNS, OUT PREGISTRATION_INFO * ppExpectedRegistration ); HRESULT VerifyDnsRegistration( IN LPSTR pszHostName, IN PREGISTRATION_INFO pExpectedRegistration, IN NETDIAG_PARAMS * pParams, IN OUT NETDIAG_RESULT * pResults ); HRESULT CheckDnsRegistration( IN PDNS_NETINFO pNetworkInfo, IN NETDIAG_PARAMS * pParams, IN OUT NETDIAG_RESULT * pResults ); VOID CompareCachedAndRegistryNetworkInfo( IN PDNS_NETINFO pNetworkInfo ); PIP4_ARRAY ServerInfoToIpArray( IN DWORD ServerCount, IN PDNS_SERVER_INFO ServerArray ); DNS_STATUS DnsFindAllPrimariesAndSecondaries( IN LPSTR pszName, IN DWORD dwFlags, IN PIP4_ARRAY aipQueryServers, OUT PDNS_NETINFO * ppNetworkInfo, OUT PIP4_ARRAY * ppNameServers, OUT PIP4_ARRAY * ppPrimaries ); PIP4_ARRAY GrabNameServersIp( IN PDNS_RECORD pDnsRecord ); DNS_STATUS IsDnsServerPrimaryForZone_UTF8( IN IP4_ADDRESS Ip, IN PSTR pZone ); DNS_STATUS IsDnsServerPrimaryForZone_W( IN IP4_ADDRESS Ip, IN PWSTR pZone ); DNS_STATUS DnsUpdateAllowedTest_UTF8( IN HANDLE hContextHandle OPTIONAL, IN PSTR pszName, IN PSTR pszAuthZone, IN PIP4_ARRAY pDnsServers ); DNS_STATUS DnsUpdateAllowedTest_W( IN HANDLE hContextHandle OPTIONAL, IN LPWSTR pwszName, IN LPWSTR pwszAuthZone, IN PIP4_ARRAY pDnsServers ); DNS_STATUS DnsQueryAndCompare( IN LPSTR lpstrName, IN WORD wType, IN DWORD fOptions, IN PIP4_ARRAY aipServers OPTIONAL, IN OUT PDNS_RECORD * ppQueryResultsSet OPTIONAL, IN OUT PVOID * pReserved OPTIONAL, IN PDNS_RECORD pExpected OPTIONAL, IN BOOL bInclusionOk, IN BOOL bUnicode, IN OUT PDNS_RECORD * ppDiff1 OPTIONAL, IN OUT PDNS_RECORD * ppDiff2 OPTIONAL ); BOOLEAN DnsCompareRRSet_W ( IN PDNS_RECORD pRRSet1, IN PDNS_RECORD pRRSet2, OUT PDNS_RECORD * ppDiff1, OUT PDNS_RECORD * ppDiff2 ); DNS_STATUS QueryDnsServerDatabase( IN LPSTR pszName, IN WORD wType, IN IP4_ADDRESS ServerIp, OUT PDNS_RECORD * ppDnsRecord, IN BOOL bUnicode, OUT BOOL * pIsLocal ); BOOL GetAnswerTtl( IN PDNS_RECORD pRec, OUT PDWORD pTtl ); DNS_STATUS GetAllDnsServersFromRegistry( IN PDNS_NETINFO pNetworkInfo, OUT PIP4_ARRAY * pIpArray ); LPSTR UTF8ToAnsi( IN LPSTR pStr ); #endif