////////////////////////////////////////////////////////////////////////////////////////////////// // // strstr.c // // This file contains most commonly used string operation. ALl the setup project should link here // or add the common utility here to avoid duplicating code everywhere or using CRT runtime. // // Created 4\15\997 inateeg got from shlwapi // /////////////////////////////////////////////////////////////////////////////////////////////////// #include #include "sdsutils.h" //================================================================================================= // //================================================================================================= #define NETWAREPATH "System\\CurrentControlSet\\Services\\Class\\NetClient\\" #define NETWARESUBKEY "Ndi" #define NETWAREVALUE "DeviceID" #define DNSLOADBALANCINGPATH "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Internet Settings" #define DNSLOADBALANCINGVALUE "DontUseDNSLoadBalancing" void DoPatchLoadBalancingForNetware( BOOL fRunningOnWin9X ) { HKEY hNetWareSectionKey = NULL; HKEY hCurrentSubKey = NULL; HKEY hDNS_LoadBalancingKey = NULL; char szCurrSubKeyName[MAX_PATH] = { 0 }; char szCurrentBuf[MAX_PATH] = { 0 }; DWORD dwSize = sizeof(szCurrSubKeyName); DWORD dwDNSLoadBalancingData = 1; DWORD dwCurrentSection = 0; DWORD dwType = REG_SZ; LPSTR pNetWareName = "NOVELL"; if ( fRunningOnWin9X ) { if (ERROR_SUCCESS == RegOpenKeyEx(HKEY_LOCAL_MACHINE, NETWAREPATH, 0, KEY_READ, &hNetWareSectionKey) ) { while (ERROR_SUCCESS == RegEnumKeyEx(hNetWareSectionKey, dwCurrentSection, szCurrSubKeyName, &dwSize, NULL, NULL, NULL, NULL)) { lstrcpy(szCurrentBuf, NETWAREPATH); AddPath(szCurrentBuf, szCurrSubKeyName); AddPath(szCurrentBuf, NETWARESUBKEY); if (ERROR_SUCCESS == RegOpenKeyEx(HKEY_LOCAL_MACHINE, (LPCSTR)szCurrentBuf, 0, KEY_QUERY_VALUE, &hCurrentSubKey)) { dwSize = sizeof(szCurrentBuf); if (ERROR_SUCCESS == RegQueryValueEx(hCurrentSubKey, NETWAREVALUE, NULL, &dwType, (LPBYTE) szCurrentBuf, &dwSize)) { if ((REG_SZ == dwType) && (0 == _strnicmp(pNetWareName, szCurrentBuf, lstrlen(pNetWareName)))) { // The user has Novell's version of NetWare so we need to turn off DNS Load Balancing. if (ERROR_SUCCESS == RegCreateKeyEx(HKEY_LOCAL_MACHINE, DNSLOADBALANCINGPATH, 0, TEXT(""), 0, KEY_WRITE, NULL, &hDNS_LoadBalancingKey, NULL)) { dwType = REG_DWORD; RegSetValueEx(hDNS_LoadBalancingKey, DNSLOADBALANCINGVALUE, 0, dwType, (CONST BYTE *) (&dwDNSLoadBalancingData), sizeof(dwDNSLoadBalancingData)); RegCloseKey(hDNS_LoadBalancingKey); hDNS_LoadBalancingKey = NULL; RegCloseKey(hCurrentSubKey); break; } } } RegCloseKey(hCurrentSubKey); hCurrentSubKey = NULL; } dwCurrentSection++; dwSize = sizeof(szCurrSubKeyName); } RegCloseKey(hNetWareSectionKey); hNetWareSectionKey = NULL; } } }