/*++ Copyright (c) 2000-2001 Microsoft Corporation Module Name: registry.h Abstract: Domain Name System (DNS) API Registry routines header. Author: Jim Gilroy (jamesg) March, 2000 Revision History: --*/ #ifndef _DNSREGISTRY_INCLUDED_ #define _DNSREGISTRY_INCLUDED_ // // Registry keys // #define TCPIP_PARAMETERS_KEY L"System\\CurrentControlSet\\Services\\Tcpip\\Parameters" #define TCPIP_RAS_KEY L"System\\CurrentControlSet\\Services\\Tcpip\\Parameters\\Transient" #define TCPIP_INTERFACES_KEY L"System\\CurrentControlSet\\Services\\Tcpip\\Parameters\\Interfaces\\" #define TCPIP_INTERFACES_KEY_A "System\\CurrentControlSet\\Services\\Tcpip\\Parameters\\Interfaces\\" #define DNS_POLICY_KEY L"Software\\Policies\\Microsoft\\Windows NT\\DnsClient" #define DNS_POLICY_WIN2K_KEY L"Software\\Policies\\Microsoft\\System\\DNSClient" //#define DNS_POLICY_INTERFACES_KEY L"Software\\Policies\\Microsoft\\Windows NT\\DNS Client\\Interfaces" #define POLICY_INTERFACES_SUBKEY L"Interfaces" #define DNS_CLIENT_KEY L"Software\\Microsoft\\Windows NT\\CurrentVersion\\DNSClient" #define DNS_CACHE_KEY L"System\\CurrentControlSet\\Services\\DnsCache\\Parameters" #define DNS_SERVER_KEY L"System\\CurrentControlSet\\Services\\DNS" #define NT_SETUP_MODE_KEY L"System\\Setup" // General //#define ITERFACES_KEY_PATH L"\\Interfaces\\" // // Registry values // // note: _KEY appended on SEARCH_LIST_KEY to avoid conflicting // with structure name -- don't remove // #define HOST_NAME L"Hostname" #define DOMAIN_NAME L"Domain" #define DHCP_DOMAIN_NAME L"DhcpDomain" #define ADAPTER_DOMAIN_NAME L"AdapterDomainName" #define PRIMARY_DOMAIN_NAME L"PrimaryDomainName" #define PRIMARY_SUFFIX L"PrimaryDNSSuffix" #define ALTERNATE_NAMES L"AlternateComputerNames" #define DNS_SERVERS L"NameServer" #define SEARCH_LIST_KEY L"SearchList" #define UPDATE_ZONE_EXCLUSIONS L"UpdateZoneExclusions" // Query #define QUERY_ADAPTER_NAME L"QueryAdapterName" #define USE_DOMAIN_NAME_DEVOLUTION L"UseDomainNameDevolution" #define PRIORITIZE_RECORD_DATA L"PrioritizeRecordData" #define ALLOW_UNQUALIFIED_QUERY L"AllowUnqualifiedQuery" #define APPEND_TO_MULTI_LABEL_NAME L"AppendToMultiLabelName" #define SCREEN_BAD_TLDS L"ScreenBadTlds" #define SCREEN_UNREACHABLE_SERVERS L"ScreenUnreachableServers" #define FILTER_CLUSTER_IP L"FilterClusterIp" #define WAIT_FOR_NAME_ERROR_ON_ALL L"WaitForNameErrorOnAll" #define USE_EDNS L"UseEdns" // Update #define REGISTRATION_ENABLED L"RegistrationEnabled" #define REGISTER_PRIMARY_NAME L"RegisterPrimaryName" #define REGISTER_ADAPTER_NAME L"RegisterAdapterName" #define REGISTER_REVERSE_LOOKUP L"RegisterReverseLookup" #define REGISTER_WAN_ADAPTERS L"RegisterWanAdapters" #define REGISTRATION_OVERWRITES_IN_CONFLICT L"RegistrationOverwritesInConflict" #define REGISTRATION_TTL L"RegistrationTtl" #define REGISTRATION_REFRESH_INTERVAL L"RegistrationRefreshInterval" #define REGISTRATION_MAX_ADDRESS_COUNT L"RegistrationMaxAddressCount" #define UPDATE_SECURITY_LEVEL L"UpdateSecurityLevel" #define UPDATE_ZONE_EXCLUDE_FILE L"UpdateZoneExcludeFile" #define UPDATE_TOP_LEVEL_DOMAINS L"UpdateTopLevelDomainZones" // Backcompat #define DISABLE_ADAPTER_DOMAIN_NAME L"DisableAdapterDomainName" #define DISABLE_DYNAMIC_UPDATE L"DisableDynamicUpdate" #define ENABLE_ADAPTER_DOMAIN_NAME_REGISTRATION L"EnableAdapterDomainNameRegistration" #define DISABLE_REVERSE_ADDRESS_REGISTRATIONS L"DisableReverseAddressRegistrations" #define DISABLE_WAN_DYNAMIC_UPDATE L"DisableWanDynamicUpdate" #define ENABLE_WAN_UPDATE_EVENT_LOG L"EnableWanDynamicUpdateEventLog" #define DISABLE_REPLACE_ADDRESSES_IN_CONFLICTS L"DisableReplaceAddressesInConflicts" #define DEFAULT_REGISTRATION_TTL L"DefaultRegistrationTTL" #define DEFAULT_REGISTRATION_REFRESH_INTERVAL L"DefaultRegistrationRefreshInterval" #define MAX_NUMBER_OF_ADDRESSES_TO_REGISTER L"MaxNumberOfAddressesToRegister" // Micellaneous #define NT_SETUP_MODE L"SystemSetupInProgress" #define DNS_TEST_MODE L"DnsTest" #define REMOTE_DNS_RESOLVER L"RemoteDnsResolver" // Cache #define MAX_CACHE_SIZE L"MaxCacheSize" #define MAX_CACHE_TTL L"MaxCacheTtl" #define MAX_NEGATIVE_CACHE_TTL L"MaxNegativeCacheTtl" #define ADAPTER_TIMEOUT_LIMIT L"AdapterTimeoutLimit" #define SERVER_PRIORITY_TIME_LIMIT L"ServerPriorityTimeLimit" #define MAX_CACHED_SOCKETS L"MaxCachedSockets" #define USE_MULTICAST L"UseMulticast" #define MULTICAST_ON_NAME_ERROR L"MulticastOnNameError" #define USE_DOT_LOCAL_DOMAIN L"UseDotLocalDomain" #define LISTEN_ON_MULTICAST L"ListenOnMulticast" // // ANSI keys and values // #define STATIC_NAME_SERVER_VALUE_A "NameServer" #define PRIMARY_DOMAIN_NAME_A "PrimaryDomainName" #if DNSWIN95 // Win95 Keys #define WIN95_TCPIP_KEY_A "System\\CurrentControlSet\\Services\\VxD\\MSTCP" #define WIN95_DHCP_KEY_A "System\\CurrentControlSet\\Services\\VxD\\DHCP" // Value #define USE_DOMAIN_NAME_DEVOLUTION_A "UseDomainNameDevolution" // More #define DHCP_NAME_SERVER_VALUE_A "DhcpNameServer" #define SEARCH_LIST_VALUE_A "SearchList" #define DHCP_DOMAIN_NAME_VALUE_A "DhcpDomain" #define DOMAIN_NAME_VALUE_A "Domain" #define STATIC_DOMAIN_NAME_VALUE_A "Domain" #define DHCP_IP_ADDRESS_VALUE_WIN95_A "DhcpIPAddress" #define DHCP_INFO_VALUE_A "DhcpInfo" #define DHCP_OPTION_INFO_VALUE_A "OptionInfo" #endif // // Reg types of keys // #define REGTYPE_BIND REG_MULTI_SZ #define REGTYPE_EXPORT REG_MULTI_SZ #define REGTYPE_STATIC_IP_ADDRESS REG_MULTI_SZ #define REGTYPE_STATIC_SUBNET_MASK REG_MULTI_SZ #define REGTYPE_UPDATE_ZONE_EXCLUSIONS REG_MULTI_SZ #define REGTYPE_ALTERNATE_NAMES REG_MULTI_SZ #define REGTYPE_DNS_NAME REG_SZ #define REGTYPE_SEARCH_LIST REG_SZ #define REGTYPE_DNS_SERVER REG_SZ #define REGTYPE_DHCP_IP_ADDRESS REG_SZ #define REGTYPE_DHCP_SUBNET_MASK REG_SZ #define REGTYPE_DHCP_INFO REG_BINARY #define REGTYPE_DHCP_OPTION_INFO REG_BINARY #define REGTYPE_DHCP_IP_ADDRESS_WIN95 REG_DWORD // // Registry key dummy ptrs // // Use these when we want to access registry at // EITHER adapter name // OR one of these default locations // #define REGKEY_TCPIP_PARAMETERS ((PWSTR)(UINT_PTR)(0x1)) #define REGKEY_DNS_CACHE ((PWSTR)(UINT_PTR)(0x2)) #define REGKEY_DNS_POLICY ((PWSTR)(UINT_PTR)(0x3)) #define REGKEY_SETUP_MODE_LOCATION ((PWSTR)(UINT_PTR)(0x4)) #define REGKEY_DNS_MAX REGKEY_SETUP_MODE_LOCATION // // Registry value IDs // typedef enum { // basic RegIdHostName = 0, RegIdDomainName, RegIdDhcpDomainName, RegIdAdapterDomainName, RegIdPrimaryDomainName, RegIdPrimaryDnsSuffix, RegIdAlternateNames, RegIdDnsServers, RegIdSearchList, RegIdUpdateZoneExclusions, // query RegIdQueryAdapterName, RegIdUseNameDevolution, RegIdPrioritizeRecordData, RegIdAllowUnqualifiedQuery, RegIdAppendToMultiLabelName, RegIdScreenBadTlds, RegIdScreenUnreachableServers, RegIdFilterClusterIp, RegIdWaitForNameErrorOnAll, RegIdUseEdns, // update RegIdRegistrationEnabled, RegIdRegisterPrimaryName, RegIdRegisterAdapterName, RegIdRegisterReverseLookup, RegIdRegisterWanAdapters, RegIdRegistrationOverwritesInConflict, RegIdRegistrationTtl, RegIdRegistrationRefreshInterval, RegIdRegistrationMaxAddressCount, RegIdUpdateSecurityLevel, RegIdUpdateZoneExcludeFile, RegIdUpdateTopLevelDomains, // backcompat RegIdDisableAdapterDomainName, RegIdDisableDynamicUpdate, RegIdEnableAdapterDomainNameRegistration, RegIdDisableReverseAddressRegistrations, RegIdDisableWanDynamicUpdate, RegIdEnableWanDynamicUpdateEventLog, RegIdDisableReplaceAddressesInConflicts, RegIdDefaultRegistrationTTL, RegIdDefaultRegistrationRefreshInterval, RegIdMaxNumberOfAddressesToRegister, // micellaneous RegIdSetupMode, RegIdTestMode, RegIdRemoteResolver, // resolver RegIdMaxCacheSize, RegIdMaxCacheTtl, RegIdMaxNegativeCacheTtl, RegIdAdapterTimeoutLimit, RegIdServerPriorityTimeLimit, RegIdMaxCachedSockets, // multicast resolver RegIdUseMulticast, RegIdMulticastOnNameError, RegIdUseDotLocalDomain, RegIdListenOnMulticast, } DNS_REGID; // // ID validity mark -- keep in sync // #define RegIdValueMax RegIdListenOnMulticast #define RegIdValueCount (RegIdValueMax+1) // // Duplicates -- lots reads are just for "Domain" // // Note: can make separate entries for these if the // flags need to be different // #define RegIdStaticDomainName RegIdDomainName #define RegIdRasDomainName RegIdDomainName // // Default values // // Note, put here as non-fixed default like refresh interval // is reset in config.c // #define REGDEF_REGISTRATION_TTL (1200) // 20 minutes #define REGDEF_REGISTRATION_REFRESH_INTERVAL (86400) // 1 day #define REGDEF_REGISTRATION_REFRESH_INTERVAL_DC (86400) // 1 day // // EDNS values // #define REG_EDNS_OFF (0) #define REG_EDNS_TRY (1) #define REG_EDNS_ALWAYS (2) // // TLD screening values // - these are bit flags // #define DNS_TLD_SCREEN_NUMERIC (0x00000001) #define DNS_TLD_SCREEN_REPEATED (0x00000010) #define DNS_TLD_SCREEN_BAD_MSDC (0x00000100) #define DNS_TLD_SCREEN_TOO_LONG (0x10000000) #define DNS_TLD_SCREEN_WORKGROUP (0x00100000) #define DNS_TLD_SCREEN_DOMAIN (0x00200000) #define DNS_TLD_SCREEN_HOME (0x00400000) #define DNS_TLD_SCREEN_OFFICE (0x00800000) #define DNS_TLD_SCREEN_LOCAL (0x01000000) #define DNS_TLD_SCREEN_BOGUS_ALL (0xfff00000) #define DNS_TLD_SCREEN_DEFAULT \ ( DNS_TLD_SCREEN_NUMERIC | \ DNS_TLD_SCREEN_REPEATED ) // // Test mode flags // #define TEST_MODE_READ_REG (0x00000001) #define TEST_MODE_SOCK_FAIL (0x00100000) // // Access to registry property table (registry.c) // typedef struct _RegProperty { PWSTR pwsName; DWORD dwDefault; BOOLEAN bPolicy; BOOLEAN bClient; BOOLEAN bTcpip; BOOLEAN bCache; } REG_PROPERTY; extern REG_PROPERTY RegPropertyTable[]; #define REGPROP_NAME(index) (RegPropertyTable[index].pwsName) #define REGPROP_DEFAULT(index) (RegPropertyTable[index].dwDefault) #define REGPROP_POLICY(index) (RegPropertyTable[index].bPolicy) #define REGPROP_CLIENT(index) (RegPropertyTable[index].bClient) #define REGPROP_CACHE(index) (RegPropertyTable[index].bCache) #define REGPROP_TCPIP(index) (RegPropertyTable[index].bTcpip) // // Config globals as structure for RPC // typedef struct _DnsGlobals { DWORD ConfigCookie; DWORD TimeStamp; BOOL InResolver; BOOL IsWin2000; #if DNSBUILDOLD BOOL IsWin9X; BOOL IsNT4; #endif BOOL IsWorkstation; BOOL IsServer; BOOL IsDnsServer; BOOL IsDomainController; BOOL InNTSetupMode; DWORD DnsTestMode; BOOL QueryAdapterName; BOOL UseNameDevolution; BOOL PrioritizeRecordData; BOOL AllowUnqualifiedQuery; BOOL AppendToMultiLabelName; BOOL ScreenBadTlds; BOOL ScreenUnreachableServers; BOOL FilterClusterIp; BOOL WaitForNameErrorOnAll; DWORD UseEdns; BOOL RegistrationEnabled; BOOL RegisterPrimaryName; BOOL RegisterAdapterName; BOOL RegisterReverseLookup; BOOL RegisterWanAdapters; BOOL RegistrationOverwritesInConflict; DWORD RegistrationMaxAddressCount; DWORD RegistrationTtl; DWORD RegistrationRefreshInterval; DWORD UpdateSecurityLevel; BOOL UpdateZoneExcludeFile; BOOL UpdateTopLevelDomains; // // Cache stuff // // Not needed unless switch to this for actual registry read, // but convient to just export one global rather than several. // This way it's all the same. // DWORD MaxCacheSize; DWORD MaxCacheTtl; DWORD MaxNegativeCacheTtl; DWORD AdapterTimeoutLimit; DWORD ServerPriorityTimeLimit; DWORD MaxCachedSockets; BOOL UseMulticast; BOOL MulticastOnNameError; BOOL UseDotLocalDomain; BOOL ListenOnMulticast; } DNS_GLOBALS_BLOB, *PDNS_GLOBALS_BLOB; // // no MIDL pass on rest of file // // This file is included in MIDL pass for resolver // in order to pick up the DNS_GLOBALS_BLOB defintion // on the theory that it is better to have it right // here with the other registry config. But all the // function definitions and other struct defs are // of no interest during the pass. // #ifndef MIDL_PASS // // Config globals -- macros for globals // // There are two basic approaches here: // // 1) Single config blob -- but no fixed memory. // All callers must drop down blob to receive config blob. // Note, that this still requires macros for each individual global // but the form can be the same inside and outside the dll, and // nothing need be exported. // // 2) Create a single config blob and export that. // Individual globals then become macros into the blob. Still the // form of the macro will be different inside and outside the // dll. // // 3) Use macros to expose each individual global. // Form of macro will be different inside versus outside the dll. // Advantage here is that globals are preserved and available for // symbolic debugging. // #ifdef DNSAPI_INTERNAL // // Internal to dnsapi.dll // extern DNS_GLOBALS_BLOB DnsGlobals; #else // // External to dnsapi.dll // __declspec(dllimport) DNS_GLOBALS_BLOB DnsGlobals; #endif // // Macros to globals // #define g_ConfigCookie (DnsGlobals.ConfigCookie) #define g_InResolver (DnsGlobals.InResolver) #define g_IsWin2000 (DnsGlobals.IsWin2000) #define g_IsWin9X (DnsGlobals.IsWin9X) #define g_IsNT4 (DnsGlobals.IsNT4) #define g_IsWorkstation (DnsGlobals.IsWorkstation) #define g_IsServer (DnsGlobals.IsServer) #define g_IsDnsServer (DnsGlobals.IsDnsServer) #define g_IsDomainController (DnsGlobals.IsDomainController) #define g_InNTSetupMode (DnsGlobals.InNTSetupMode) #define g_DnsTestMode (DnsGlobals.DnsTestMode) #define g_QueryAdapterName (DnsGlobals.QueryAdapterName) #define g_UseNameDevolution (DnsGlobals.UseNameDevolution) #define g_PrioritizeRecordData (DnsGlobals.PrioritizeRecordData) #define g_AllowUnqualifiedQuery (DnsGlobals.AllowUnqualifiedQuery) #define g_AppendToMultiLabelName (DnsGlobals.AppendToMultiLabelName) #define g_ScreenBadTlds (DnsGlobals.ScreenBadTlds) #define g_ScreenUnreachableServers (DnsGlobals.ScreenUnreachableServers) #define g_FilterClusterIp (DnsGlobals.FilterClusterIp) #define g_WaitForNameErrorOnAll (DnsGlobals.WaitForNameErrorOnAll) #define g_UseEdns (DnsGlobals.UseEdns) #define g_RegistrationEnabled (DnsGlobals.RegistrationEnabled) #define g_RegisterPrimaryName (DnsGlobals.RegisterPrimaryName) #define g_RegisterAdapterName (DnsGlobals.RegisterAdapterName) #define g_RegisterReverseLookup (DnsGlobals.RegisterReverseLookup) #define g_RegisterWanAdapters (DnsGlobals.RegisterWanAdapters) #define g_RegistrationOverwritesInConflict (DnsGlobals.RegistrationOverwritesInConflict) #define g_RegistrationMaxAddressCount (DnsGlobals.RegistrationMaxAddressCount) #define g_RegistrationTtl (DnsGlobals.RegistrationTtl) #define g_RegistrationRefreshInterval (DnsGlobals.RegistrationRefreshInterval) #define g_UpdateSecurityLevel (DnsGlobals.UpdateSecurityLevel) #define g_UpdateZoneExcludeFile (DnsGlobals.UpdateZoneExcludeFile) #define g_UpdateTopLevelDomains (DnsGlobals.UpdateTopLevelDomains) #define g_MaxCacheSize (DnsGlobals.MaxCacheSize) #define g_MaxCacheTtl (DnsGlobals.MaxCacheTtl) #define g_MaxNegativeCacheTtl (DnsGlobals.MaxNegativeCacheTtl) #define g_AdapterTimeoutLimit (DnsGlobals.AdapterTimeoutLimit) #define g_ServerPriorityTimeLimit (DnsGlobals.ServerPriorityTimeLimit) #define g_MaxCachedSockets (DnsGlobals.MaxCachedSockets) #define g_UseMulticast (DnsGlobals.UseMulticast) #define g_MulticastOnNameError (DnsGlobals.MulticastOnNameError) #define g_UseDotLocalDomain (DnsGlobals.UseDotLocalDomain) #define g_ListenOnMulticast (DnsGlobals.ListenOnMulticast) // // Macros for old functions // // These values are read on DLL attach and can't change so // they don't require registry refresh. // #define Dns_IsMicrosoftNTServer() g_IsServer #define Dns_IsMicrosoftNTDomainController() g_IsDomainController // // Non-exported config globals // extern PWSTR g_pwsRemoteResolver; // // Registry call flags // #define DNSREG_FLAG_GET_UNICODE (0x0001) // return string in unicode #define DNSREG_FLAG_DUMP_EMPTY (0x0010) // dump empty data\strings -- return NULL // // Registry Session // typedef struct _RegSession { HKEY hPolicy; HKEY hClient; HKEY hTcpip; HKEY hCache; } REG_SESSION, *PREG_SESSION; // // Policy adapter info read // // DCR: might be better to just include in config and // bring the whole baby across // // DCR: get to global\per adapter reads with reg_blob // then build global blob (flat) and network info(allocated) // // DCR: exposed config info should provide levels // - all // - adapter info (given domain name) // - global info // typedef struct _RegGlobalInfo { // Global data PSTR pszPrimaryDomainName; PSTR pszHostName; // Global flags needed to build network info BOOL fUseNameDevolution; BOOL fUseMulticast; BOOL fUseMulticastOnNameError; BOOL fUseDotLocalDomain; // Adapter policy overrides PIP_ARRAY pDnsServerArray; PVOID pDnsServerIp6Array; PSTR pszAdapterDomainName; BOOL fRegisterAdapterName; // Read\not-read from policy BOOL fPolicyRegisterAdapterName; // DCR: DWORD blob read here } REG_GLOBAL_INFO, *PREG_GLOBAL_INFO; // // Registry adapter info read // typedef struct _RegAdapterInfo { PSTR pszAdapterDomainName; BOOL fQueryAdapterName; BOOL fRegistrationEnabled; BOOL fRegisterAdapterName; DWORD RegistrationMaxAddressCount; } REG_ADAPTER_INFO, *PREG_ADAPTER_INFO; // // Registry update info // // DCR: should be able to get from global read // typedef struct _RegUpdateInfo { PSTR pszPrimaryDomainName; PSTR pmszAlternateNames; // policy overrides PSTR pszAdapterDomainName; PIP_ARRAY pDnsServerArray; PVOID pDnsServerIp6Array; // update flags (policy, global or adapter) BOOL fRegistrationEnabled; BOOL fRegisterAdapterName; DWORD RegistrationMaxAddressCount; } REG_UPDATE_INFO, *PREG_UPDATE_INFO; // // Registry routines // VOID Reg_Init( VOID ); // // Registry shims (hide Win9x wide char issue) // LONG WINAPI DnsShimRegCreateKeyExW( IN HKEY hKey, IN LPCWSTR lpSubKey, IN DWORD Reserved, IN LPWSTR lpClass, IN DWORD dwOptions, IN REGSAM samDesired, IN LPSECURITY_ATTRIBUTES lpSecurityAttributes, OUT PHKEY phkResult, OUT LPDWORD lpdwDisposition ); LONG WINAPI DnsShimRegOpenKeyExW( IN HKEY hKey, IN LPCWSTR lpSubKey, IN DWORD dwOptions, IN REGSAM samDesired, OUT PHKEY phkResult ); LONG WINAPI DnsShimRegQueryValueExW( IN HKEY hKey, IN LPCWSTR lpValueName, IN LPDWORD lpReserved, IN LPDWORD lpType, IN LPBYTE lpData, IN LPDWORD lpcbData ); // // Query routines // DNS_STATUS WINAPI Reg_OpenSession( OUT PREG_SESSION pRegSession, IN DWORD Level, IN DWORD ValueId ); VOID WINAPI Reg_CloseSession( IN OUT PREG_SESSION pRegSession ); DNS_STATUS Reg_GetDword( IN PREG_SESSION pRegSession, OPTIONAL IN HKEY hRegKey, OPTIONAL IN PWSTR pwsKeyName, OPTIONAL IN DWORD ValueId, OUT PDWORD pResult ); DNS_STATUS Reg_GetValueEx( IN PREG_SESSION pRegSession, OPTIONAL IN HKEY hRegKey, OPTIONAL IN LPSTR pwsAdapter, OPTIONAL IN DWORD ValueId, IN DWORD ValueType, IN DWORD Flag, OUT PBYTE * ppBuffer ); #define Reg_GetValue(s, k, id, t, pb ) \ Reg_GetValueEx(s, k, NULL, id, t, 0, pb ) DNS_STATUS Reg_GetIpArray( IN PREG_SESSION pRegSession, OPTIONAL IN HKEY hRegKey, OPTIONAL IN LPSTR pwsAdapter, OPTIONAL IN DWORD ValueId, IN DWORD ValueType, OUT PIP_ARRAY * ppIpArray ); // // Set routines // HKEY WINAPI Reg_CreateKey( IN PWSTR pwsKeyName, IN BOOL bWrite ); DNS_STATUS WINAPI Reg_SetDwordValueByName( IN PVOID pReserved, IN HKEY hKey, IN PWSTR pwsNameKey, OPTIONAL IN PWSTR pwsNameValue, OPTIONAL IN DWORD dwValue ); DNS_STATUS WINAPI Reg_SetDwordValue( IN PVOID pReserved, IN HKEY hRegKey, IN PWSTR pwsNameKey, OPTIONAL IN DWORD ValueId, IN DWORD dwValue ); // // Special type routines (regfig.c) // DNS_STATUS Reg_ReadPrimaryDomainName( IN PREG_SESSION pRegSession, OPTIONAL IN HKEY hRegKey, OPTIONAL OUT PSTR * ppPrimaryDomainName ); BOOL Reg_IsMicrosoftDnsServer( VOID ); DNS_STATUS Reg_WriteLoopbackDnsServerList( IN PSTR pszAdapterName, IN PREG_SESSION pRegSession ); // // Main reg config read (config.c) // DNS_STATUS Reg_ReadGlobalsEx( IN DWORD dwFlag, IN PVOID pRegSession ); // // DNS Config info access (regfig.c) // DNS_STATUS Reg_ReadGlobalInfo( IN PREG_SESSION pRegSession, OUT PREG_GLOBAL_INFO pRegInfo ); VOID Reg_FreeGlobalInfo( IN OUT PREG_GLOBAL_INFO pRegInfo, IN BOOL fFreeBlob ); DNS_STATUS Reg_ReadAdapterInfo( IN PSTR pszAdapterName, IN PREG_SESSION pRegSession, IN PREG_GLOBAL_INFO pRegInfo, OUT PREG_ADAPTER_INFO pBlob ); VOID Reg_FreeAdapterInfo( IN OUT PREG_ADAPTER_INFO pRegAdapterInfo, IN BOOL fFreeBlob ); DNS_STATUS Reg_ReadUpdateInfo( IN PSTR pszAdapterName, OUT PREG_UPDATE_INFO pUpdateInfo ); VOID Reg_FreeUpdateInfo( IN OUT PREG_UPDATE_INFO pUpdateInfo, IN BOOL fFreeBlob ); // // Insure fressh update config (regfig.c) // DNS_STATUS Reg_RefreshUpdateConfig( VOID ); // // Simplified special type access // PSTR WINAPI Reg_GetPrimaryDomainName( IN DNS_CHARSET CharSet ); PSTR WINAPI Reg_GetHostName( IN DNS_CHARSET CharSet ); PSTR WINAPI Reg_GetFullHostName( IN DNS_CHARSET CharSet ); // // Simple reg DWORD access // DWORD Reg_ReadDwordProperty( IN DNS_REGID RegId, IN PWSTR pwsAdapterName OPTIONAL ); DNS_STATUS WINAPI Reg_SetDwordPropertyAndAlertCache( IN PWSTR pwsKey, IN DWORD RegId, IN DWORD dwValue ); // // Configuration\registry // #if 0 #define DnsEnableMulticastResolverThread() \ Reg_SetDwordPropertyAndAlertCache( \ REGKEY_DNS_CACHE, \ ALLOW_MULTICAST_RESOLVER_OPERATION, \ TRUE ) #define DnsDisableMulticastResolverThread() \ Reg_SetDwordPropertyAndAlertCache( \ REGKEY_DNS_CACHE, \ ALLOW_MULTICAST_RESOLVER_OPERATION, \ FALSE ) #endif #endif // no MIDL_PASS #endif _DNSREGISTRY_INCLUDED_ // // End registry.h //