You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
1949 lines
62 KiB
1949 lines
62 KiB
/**************************************************************************
|
|
Copyright (C) 1999 Microsoft Corporation. All Rights Reserved.
|
|
|
|
MODULE: REGCFG.CPP
|
|
|
|
PURPOSE: Source module reading/writing PM config sets from the registry
|
|
|
|
FUNCTIONS:
|
|
|
|
COMMENTS:
|
|
|
|
**************************************************************************/
|
|
|
|
/**************************************************************************
|
|
Include Files
|
|
**************************************************************************/
|
|
|
|
#include "pmcfg.h"
|
|
#include "keycrypto.h"
|
|
|
|
// Reg Keys/values that we care about
|
|
TCHAR g_szPassportReg[] = TEXT("Software\\Microsoft\\Passport");
|
|
TCHAR g_szPassportPartner[] = TEXT("Software\\Microsoft\\Passport\\Nexus\\Partner");
|
|
TCHAR g_szPassportEnvironments[] = TEXT("Software\\Microsoft\\Passport\\Environments");
|
|
TCHAR g_szEncryptionKeyData[] = TEXT("KeyData");
|
|
TCHAR g_szKeyTimes[] = TEXT("KeyTimes");
|
|
TCHAR g_szNexus[] = TEXT("Nexus");
|
|
TCHAR g_szPartner[] = TEXT("Partner");
|
|
TCHAR g_szInstallDir[] = TEXT("InstallDir");
|
|
TCHAR g_szVersion[] = TEXT("Version");
|
|
TCHAR g_szTimeWindow[] = TEXT("TimeWindow");
|
|
TCHAR g_szForceSignIn[] = TEXT("ForceSignIn");
|
|
TCHAR g_szNSRefresh[] = TEXT("NSRefresh");
|
|
TCHAR g_szLanguageID[] = TEXT("LanguageID");
|
|
TCHAR g_szCoBrandTemplate[] = TEXT("CoBrandTemplate");
|
|
TCHAR g_szSiteID[] = TEXT("SiteID");
|
|
TCHAR g_szReturnURL[] = TEXT("ReturnURL");
|
|
TCHAR g_szTicketDomain[] = TEXT("TicketDomain");
|
|
TCHAR g_szTicketPath[] = TEXT("TicketPath");
|
|
TCHAR g_szProfileDomain[] = TEXT("ProfileDomain");
|
|
TCHAR g_szProfilePath[] = TEXT("ProfilePath");
|
|
TCHAR g_szSecureDomain[] = TEXT("SecureDomain");
|
|
TCHAR g_szSecurePath[] = TEXT("SecurePath");
|
|
TCHAR g_szCurrentKey[] = TEXT("CurrentKey");
|
|
TCHAR g_szStandAlone[] = TEXT("StandAlone");
|
|
TCHAR g_szDisableCookies[] = TEXT("DisableCookies");
|
|
TCHAR g_szDisasterURL[] = TEXT("DisasterURL");
|
|
TCHAR g_szHostName[] = TEXT("HostName");
|
|
TCHAR g_szHostIP[] = TEXT("HostIP");
|
|
//JVP 3/2/2000
|
|
TCHAR g_szVerboseMode[] = TEXT("Verbose");
|
|
TCHAR g_szEnvName[] = TEXT("Environment");
|
|
TCHAR g_szRemoteFile[] = TEXT("CCDRemoteFile");
|
|
TCHAR g_szLocalFile[] = TEXT("CCDLocalFile");
|
|
TCHAR g_szVersion14[] = TEXT("1.4");
|
|
|
|
TCHAR g_szSecureLevel[] = TEXT("SecureLevel");
|
|
|
|
|
|
#define REG_PASSPORT_SITES_VALUE TEXT("Software\\Microsoft\\Passport\\Sites")
|
|
#define REG_PASSPORT_SITES_LEN (sizeof(REG_PASSPORT_SITES_VALUE) / sizeof(TCHAR) - 1)
|
|
|
|
#define REG_CLOSE_KEY_NULL(a) { if ((a) != NULL) { RegCloseKey(a); (a) = NULL; } }
|
|
|
|
|
|
// -------------------------------------------------------------------------------
|
|
//
|
|
//
|
|
// -------------------------------------------------------------------------------
|
|
BOOL WriteGlobalConfigSettings(HWND hWndDlg, HKEY hklm, LPPMSETTINGS lpPMConfig, LPTSTR lpszRemoteComputer)
|
|
{
|
|
HKEY hkeyPassport = NULL, hkeyPassportSubKey = NULL;
|
|
long lRet;
|
|
BOOL bReturn = FALSE;
|
|
|
|
TCHAR szConfigName[MAX_CONFIGSETNAME];
|
|
TCHAR szTmpBuf[REG_PASSPORT_SITES_LEN + 1 + MAX_CONFIGSETNAME + 1] = REG_PASSPORT_SITES_VALUE;
|
|
ULONG nConfigNameSize = MAX_CONFIGSETNAME;
|
|
FILETIME ftime;
|
|
long nCurrentSubKey;
|
|
|
|
// First, open the keys for the default set
|
|
//
|
|
if ((lRet = RegOpenKeyEx(hklm, g_szPassportReg, 0, KEY_ALL_ACCESS, &hkeyPassport)) != ERROR_SUCCESS)
|
|
{
|
|
LPVOID lpMsgBuf;
|
|
|
|
if (FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER |
|
|
FORMAT_MESSAGE_FROM_SYSTEM |
|
|
FORMAT_MESSAGE_IGNORE_INSERTS,
|
|
NULL,
|
|
lRet,
|
|
MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), // Default language
|
|
(LPTSTR) &lpMsgBuf,
|
|
0,
|
|
NULL) != 0)
|
|
{
|
|
TCHAR pszTitle[MAX_RESOURCE];
|
|
|
|
// Display the string
|
|
LoadString(g_hInst, IDS_ERROR, pszTitle, DIMENSION(pszTitle));
|
|
MessageBox( NULL, (LPCTSTR)lpMsgBuf, pszTitle, MB_OK | MB_ICONINFORMATION );
|
|
|
|
// Free the buffer.
|
|
LocalFree( lpMsgBuf );
|
|
}
|
|
|
|
bReturn = FALSE;
|
|
goto Cleanup;
|
|
}
|
|
|
|
// Write the value for NSRefresh
|
|
RegSetValueEx(hkeyPassport,
|
|
g_szNSRefresh,
|
|
NULL,
|
|
REG_DWORD,
|
|
(LPBYTE)&lpPMConfig->dwEnableManualRefresh,
|
|
sizeof(DWORD));
|
|
|
|
// Write the environment
|
|
RegSetValueEx(hkeyPassport,
|
|
g_szEnvName,
|
|
NULL,
|
|
REG_SZ,
|
|
(LPBYTE)lpPMConfig->szEnvName,
|
|
(lstrlen(lpPMConfig->szEnvName) + 1) * sizeof(TCHAR));
|
|
|
|
RegCloseKey(hkeyPassport);
|
|
hkeyPassport = NULL;
|
|
|
|
// If the "Sites" key was not found, then there are no Sites to configure
|
|
//
|
|
if ((lRet = RegOpenKeyEx(hklm,
|
|
REG_PASSPORT_SITES_VALUE,
|
|
0,
|
|
KEY_ALL_ACCESS,
|
|
&hkeyPassport)) != ERROR_SUCCESS)
|
|
{
|
|
bReturn = TRUE;
|
|
goto Cleanup;
|
|
}
|
|
|
|
nCurrentSubKey = 0;
|
|
while (lRet = RegEnumKeyEx(hkeyPassport,
|
|
nCurrentSubKey++,
|
|
szConfigName,
|
|
&nConfigNameSize,
|
|
NULL,
|
|
NULL,
|
|
NULL,
|
|
&ftime) == ERROR_SUCCESS)
|
|
{
|
|
*(szTmpBuf + REG_PASSPORT_SITES_LEN) = _T('\\');
|
|
*(szTmpBuf + REG_PASSPORT_SITES_LEN + 1) = _T('\0');
|
|
_tcscat(szTmpBuf + REG_PASSPORT_SITES_LEN + 1, szConfigName);
|
|
|
|
if ((lRet = RegOpenKeyEx(hklm,
|
|
szTmpBuf,
|
|
0,
|
|
KEY_ALL_ACCESS,
|
|
&hkeyPassportSubKey)) != ERROR_SUCCESS)
|
|
{
|
|
ReportError(hWndDlg, IDS_CONFIGREAD_ERROR);
|
|
bReturn = FALSE;
|
|
goto Cleanup;
|
|
}
|
|
|
|
|
|
// Write the value for NSRefresh
|
|
RegSetValueEx(hkeyPassportSubKey,
|
|
g_szNSRefresh,
|
|
NULL,
|
|
REG_DWORD,
|
|
(LPBYTE) &lpPMConfig->dwEnableManualRefresh,
|
|
sizeof(DWORD));
|
|
|
|
// Write the environment
|
|
RegSetValueEx(hkeyPassportSubKey,
|
|
g_szEnvName,
|
|
NULL,
|
|
REG_SZ,
|
|
(LPBYTE) lpPMConfig->szEnvName,
|
|
(lstrlen(lpPMConfig->szEnvName) + 1) * sizeof(TCHAR));
|
|
|
|
RegCloseKey(hkeyPassportSubKey);
|
|
hkeyPassportSubKey = NULL;
|
|
|
|
nConfigNameSize = MAX_CONFIGSETNAME * sizeof(TCHAR);
|
|
}
|
|
|
|
if (lRet == ERROR_SUCCESS)
|
|
bReturn = TRUE;
|
|
|
|
Cleanup:
|
|
if (hkeyPassport)
|
|
RegCloseKey(hkeyPassport);
|
|
if (hkeyPassportSubKey)
|
|
RegCloseKey(hkeyPassportSubKey);
|
|
return bReturn;
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/**************************************************************************
|
|
|
|
WriteRegTestKey
|
|
|
|
Installs the default test key for the named config set. This is
|
|
only called in the case where a new config set key was created in
|
|
OpenRegConfigSet.
|
|
|
|
**************************************************************************/
|
|
BOOL
|
|
WriteRegTestKey
|
|
(
|
|
HKEY hkeyConfigKey,
|
|
PSECURITY_DESCRIPTOR pSD
|
|
)
|
|
{
|
|
BOOL bReturn;
|
|
CKeyCrypto kc;
|
|
HKEY hkDataKey = NULL, hkTimeKey = NULL;
|
|
TCHAR szKeyNum[2];
|
|
DWORD dwKeyVer = 1;
|
|
|
|
// Try to encrypt it with MAC address
|
|
BYTE original[CKeyCrypto::RAWKEY_SIZE];
|
|
DATA_BLOB iBlob;
|
|
DATA_BLOB oBlob;
|
|
|
|
SECURITY_ATTRIBUTES SecAttrib;
|
|
|
|
iBlob.cbData = sizeof(original);
|
|
iBlob.pbData = original;
|
|
|
|
ZeroMemory(&oBlob, sizeof(oBlob));
|
|
|
|
memcpy(original, "123456781234567812345678", CKeyCrypto::RAWKEY_SIZE);
|
|
if (kc.encryptKey(&iBlob, &oBlob) != S_OK)
|
|
{
|
|
bReturn = FALSE;
|
|
goto Cleanup;
|
|
}
|
|
|
|
// Now add it to registry
|
|
|
|
lstrcpy(szKeyNum, TEXT("1"));
|
|
|
|
// set up the security attributes structure for the KeyData reg key
|
|
SecAttrib.nLength = sizeof(SECURITY_ATTRIBUTES);
|
|
SecAttrib.lpSecurityDescriptor = pSD;
|
|
SecAttrib.bInheritHandle = FALSE;
|
|
|
|
|
|
if(ERROR_SUCCESS != RegCreateKeyEx(hkeyConfigKey,
|
|
TEXT("KeyData"),
|
|
0,
|
|
TEXT(""),
|
|
0,
|
|
KEY_ALL_ACCESS,
|
|
&SecAttrib,
|
|
&hkDataKey,
|
|
NULL))
|
|
{
|
|
bReturn = FALSE;
|
|
goto Cleanup;
|
|
}
|
|
|
|
if(ERROR_SUCCESS != RegCreateKeyEx(hkeyConfigKey,
|
|
TEXT("KeyTimes"),
|
|
0,
|
|
TEXT(""),
|
|
0,
|
|
KEY_ALL_ACCESS,
|
|
NULL,
|
|
&hkTimeKey,
|
|
NULL))
|
|
{
|
|
bReturn = FALSE;
|
|
goto Cleanup;
|
|
}
|
|
|
|
if(ERROR_SUCCESS != RegSetValueEx(hkDataKey,
|
|
szKeyNum,
|
|
0,
|
|
REG_BINARY,
|
|
oBlob.pbData,
|
|
oBlob.cbData))
|
|
{
|
|
bReturn = FALSE;
|
|
goto Cleanup;
|
|
}
|
|
|
|
if(ERROR_SUCCESS != RegSetValueEx(hkeyConfigKey,
|
|
TEXT("CurrentKey"),
|
|
0,
|
|
REG_DWORD,
|
|
(LPBYTE) &dwKeyVer,
|
|
sizeof(DWORD)))
|
|
{
|
|
bReturn = FALSE;
|
|
goto Cleanup;
|
|
}
|
|
|
|
bReturn = TRUE;
|
|
|
|
Cleanup:
|
|
if (hkDataKey)
|
|
RegCloseKey(hkDataKey);
|
|
if (hkTimeKey)
|
|
RegCloseKey(hkTimeKey);
|
|
|
|
if (oBlob.pbData)
|
|
::LocalFree(oBlob.pbData);
|
|
|
|
return bReturn;
|
|
}
|
|
/**************************************************************************
|
|
|
|
OpenRegConfigSet
|
|
|
|
Open and return an HKEY for a named configuration set
|
|
current passport manager config set from the registry
|
|
|
|
**************************************************************************/
|
|
HKEY OpenRegConfigSet
|
|
(
|
|
HKEY hkeyLocalMachine, // Local or remote HKLM
|
|
LPTSTR lpszConfigSetName // Name of config set
|
|
)
|
|
{
|
|
HKEY hkeyConfigSets = NULL;
|
|
HKEY hkeyConfigSet = NULL;
|
|
DWORD dwDisp;
|
|
PSECURITY_DESCRIPTOR pSD = NULL;
|
|
HKEY hDefKeyData = NULL;
|
|
DWORD cbSD = 0;
|
|
long lRet;
|
|
|
|
//
|
|
// Can't create an unnamed config set.
|
|
//
|
|
|
|
if(lpszConfigSetName == NULL ||
|
|
lpszConfigSetName[0] == TEXT('\0'))
|
|
{
|
|
lRet = ERROR_INVALID_PARAMETER;
|
|
goto Cleanup;
|
|
}
|
|
|
|
if (ERROR_SUCCESS != (lRet = RegCreateKeyEx(hkeyLocalMachine,
|
|
REG_PASSPORT_SITES_VALUE,
|
|
0,
|
|
TEXT(""),
|
|
0,
|
|
KEY_ALL_ACCESS,
|
|
NULL,
|
|
&hkeyConfigSets,
|
|
NULL)))
|
|
{
|
|
goto Cleanup;
|
|
}
|
|
|
|
//
|
|
// Create the key if it doesn't exist, otherwise
|
|
// open it.
|
|
//
|
|
|
|
if (ERROR_SUCCESS != (lRet = RegCreateKeyEx(hkeyConfigSets,
|
|
lpszConfigSetName,
|
|
0,
|
|
TEXT(""),
|
|
0,
|
|
KEY_ALL_ACCESS,
|
|
NULL,
|
|
&hkeyConfigSet,
|
|
&dwDisp)))
|
|
{
|
|
goto Cleanup;
|
|
}
|
|
|
|
//
|
|
// If we created a new regkey, add encryption keys
|
|
//
|
|
|
|
if(dwDisp == REG_CREATED_NEW_KEY)
|
|
{
|
|
// first read the SD from the default key data
|
|
if (ERROR_SUCCESS !=
|
|
RegOpenKeyEx(hkeyLocalMachine,
|
|
L"Software\\Microsoft\\Passport\\KeyData",
|
|
0,
|
|
KEY_READ,
|
|
&hDefKeyData))
|
|
{
|
|
RegCloseKey(hkeyConfigSet);
|
|
hkeyConfigSet = NULL;
|
|
goto Cleanup;
|
|
}
|
|
|
|
if (ERROR_INSUFFICIENT_BUFFER !=
|
|
RegGetKeySecurity(hDefKeyData,
|
|
DACL_SECURITY_INFORMATION,
|
|
&cbSD,
|
|
&cbSD))
|
|
{
|
|
RegCloseKey(hkeyConfigSet);
|
|
hkeyConfigSet = NULL;
|
|
goto Cleanup;
|
|
}
|
|
|
|
if (NULL == (pSD = (PSECURITY_DESCRIPTOR)LocalAlloc(LMEM_FIXED, cbSD)))
|
|
{
|
|
RegCloseKey(hkeyConfigSet);
|
|
hkeyConfigSet = NULL;
|
|
goto Cleanup;
|
|
}
|
|
|
|
if (ERROR_SUCCESS !=
|
|
RegGetKeySecurity(hDefKeyData,
|
|
DACL_SECURITY_INFORMATION,
|
|
pSD,
|
|
&cbSD))
|
|
{
|
|
RegCloseKey(hkeyConfigSet);
|
|
hkeyConfigSet = NULL;
|
|
goto Cleanup;
|
|
}
|
|
|
|
// create the new key data
|
|
if (!WriteRegTestKey(hkeyConfigSet, pSD))
|
|
{
|
|
RegCloseKey(hkeyConfigSet);
|
|
hkeyConfigSet = NULL;
|
|
goto Cleanup;
|
|
}
|
|
}
|
|
|
|
Cleanup:
|
|
if (pSD)
|
|
{
|
|
LocalFree(pSD);
|
|
}
|
|
|
|
if (hDefKeyData)
|
|
{
|
|
RegCloseKey(hDefKeyData);
|
|
}
|
|
|
|
if(hkeyConfigSets)
|
|
RegCloseKey(hkeyConfigSets);
|
|
else {
|
|
LPVOID lpMsgBuf;
|
|
|
|
if (FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER |
|
|
FORMAT_MESSAGE_FROM_SYSTEM |
|
|
FORMAT_MESSAGE_IGNORE_INSERTS,
|
|
NULL,
|
|
lRet,
|
|
MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), // Default language
|
|
(LPTSTR) &lpMsgBuf,
|
|
0,
|
|
NULL) != 0)
|
|
{
|
|
TCHAR pszTitle[MAX_RESOURCE];
|
|
|
|
// Display the string.
|
|
LoadString(g_hInst, IDS_ERROR, pszTitle, DIMENSION(pszTitle));
|
|
MessageBox( NULL, (LPCTSTR) lpMsgBuf, pszTitle, MB_OK | MB_ICONINFORMATION );
|
|
|
|
// Free the buffer.
|
|
LocalFree( lpMsgBuf );
|
|
}
|
|
}
|
|
|
|
return hkeyConfigSet;
|
|
}
|
|
|
|
/**************************************************************************
|
|
|
|
OpenTopRegKey
|
|
|
|
Open the top reg key, if we aren't allowed to then fail.
|
|
|
|
**************************************************************************/
|
|
BOOL OpenTopRegKey
|
|
(
|
|
HWND hWndDlg,
|
|
LPTSTR lpszRemoteComputer,
|
|
HKEY *phklm,
|
|
HKEY *phkeyPassport
|
|
)
|
|
{
|
|
BOOL bReturn;
|
|
long lRet;
|
|
|
|
// Open the Passport Regkey ( either locally or remotly
|
|
if (lpszRemoteComputer && (TEXT('\0') != lpszRemoteComputer[0]))
|
|
{
|
|
//
|
|
// Attempt to connect to the HKEY_LOCAL_MACHINE of the remote computer.
|
|
// If this fails, assume that the computer doesn't exist or doesn't have
|
|
// the registry server running.
|
|
//
|
|
switch (lRet = RegConnectRegistry(lpszRemoteComputer,
|
|
HKEY_LOCAL_MACHINE,
|
|
phklm))
|
|
{
|
|
|
|
case ERROR_SUCCESS:
|
|
break;
|
|
case ERROR_ACCESS_DENIED:
|
|
ReportError(hWndDlg, IDS_CONNECTACCESSDENIED);
|
|
bReturn = FALSE;
|
|
goto Cleanup;
|
|
|
|
default:
|
|
ReportError(hWndDlg, IDS_CONNECTBADNAME);
|
|
bReturn = FALSE;
|
|
goto Cleanup;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
*phklm = HKEY_LOCAL_MACHINE;
|
|
}
|
|
|
|
// Open the key we want
|
|
if (ERROR_SUCCESS != (lRet = RegOpenKeyEx(*phklm,
|
|
g_szPassportReg,
|
|
0,
|
|
KEY_ALL_ACCESS,
|
|
phkeyPassport)))
|
|
{
|
|
LPVOID lpMsgBuf;
|
|
FormatMessage(
|
|
FORMAT_MESSAGE_ALLOCATE_BUFFER |
|
|
FORMAT_MESSAGE_FROM_SYSTEM |
|
|
FORMAT_MESSAGE_IGNORE_INSERTS,
|
|
NULL,
|
|
lRet,
|
|
MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), // Default language
|
|
(LPTSTR) &lpMsgBuf,
|
|
0,
|
|
NULL
|
|
);
|
|
// Display the string.
|
|
{
|
|
TCHAR pszTitle[MAX_RESOURCE];
|
|
|
|
LoadString(g_hInst, IDS_ERROR, pszTitle, DIMENSION(pszTitle));
|
|
MessageBox( NULL, (LPCTSTR) lpMsgBuf, pszTitle, MB_OK | MB_ICONINFORMATION );
|
|
}
|
|
|
|
// Free the buffer.
|
|
LocalFree( lpMsgBuf );
|
|
|
|
// ReportError(hWndDlg, IDS_CONFIGREAD_ERROR);
|
|
bReturn = FALSE;
|
|
goto Cleanup;
|
|
}
|
|
bReturn = TRUE;
|
|
Cleanup:
|
|
return bReturn;
|
|
}
|
|
|
|
|
|
/**************************************************************************
|
|
|
|
ReadRegConfigSet
|
|
|
|
Read the current passport manager config set from the registry
|
|
|
|
**************************************************************************/
|
|
BOOL ReadRegConfigSet
|
|
(
|
|
HWND hWndDlg,
|
|
LPPMSETTINGS lpPMConfig,
|
|
LPTSTR lpszRemoteComputer,
|
|
LPTSTR lpszConfigSetName
|
|
)
|
|
{
|
|
BOOL bReturn;
|
|
HKEY hkeyPassport = NULL; // Regkey where Passport Setting live
|
|
HKEY hkeyConfigSets = NULL;
|
|
HKEY hkeyConfig = NULL;
|
|
HKEY hkeyPartner = NULL;
|
|
HKEY hklm = NULL;
|
|
DWORD dwcbTemp;
|
|
DWORD dwType;
|
|
TCHAR szText[MAX_RESOURCE];
|
|
TCHAR szTitle[MAX_RESOURCE];
|
|
long lRet;
|
|
|
|
if (!OpenTopRegKey(hWndDlg, lpszRemoteComputer, &hklm, &hkeyPassport))
|
|
{
|
|
bReturn = FALSE;
|
|
goto Cleanup;
|
|
}
|
|
|
|
// Open Partner key
|
|
if (ERROR_SUCCESS != (lRet = RegOpenKeyEx(hklm,
|
|
g_szPassportPartner,
|
|
0,
|
|
KEY_ALL_ACCESS,
|
|
&hkeyPartner)))
|
|
{
|
|
LPVOID lpMsgBuf;
|
|
|
|
if (FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER |
|
|
FORMAT_MESSAGE_FROM_SYSTEM |
|
|
FORMAT_MESSAGE_IGNORE_INSERTS,
|
|
NULL,
|
|
lRet,
|
|
MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), // Default language
|
|
(LPTSTR) &lpMsgBuf,
|
|
0,
|
|
NULL) != 0)
|
|
{
|
|
TCHAR pszTitle[MAX_RESOURCE];
|
|
|
|
// Display the string.
|
|
LoadString(g_hInst, IDS_ERROR, pszTitle, DIMENSION(pszTitle));
|
|
MessageBox( NULL, (LPCTSTR) lpMsgBuf, pszTitle, MB_OK | MB_ICONINFORMATION );
|
|
|
|
// Free the buffer.
|
|
LocalFree( lpMsgBuf );
|
|
}
|
|
|
|
// ReportError(hWndDlg, IDS_CONFIGREAD_ERROR);
|
|
bReturn = FALSE;
|
|
goto Cleanup;
|
|
}
|
|
|
|
// open Site key
|
|
if(lpszConfigSetName && lpszConfigSetName[0] != TEXT('\0'))
|
|
{
|
|
hkeyConfig = OpenRegConfigSet(hklm, lpszConfigSetName);
|
|
if(hkeyConfig == NULL)
|
|
{
|
|
ReportError(hWndDlg, IDS_CONFIGREAD_ERROR);
|
|
bReturn = FALSE;
|
|
goto Cleanup;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
hkeyConfig = hkeyPassport;
|
|
}
|
|
|
|
// The Install dir and Version number go into globals, because they are read
|
|
// only values that must come from the target machine's registry.
|
|
|
|
// Read the Install Dir.
|
|
dwcbTemp = MAX_PATH;
|
|
dwType = REG_SZ;
|
|
g_szInstallPath[0] = TEXT('\0'); // Default value
|
|
RegQueryValueEx(hkeyPassport,
|
|
g_szInstallDir,
|
|
NULL,
|
|
&dwType,
|
|
(LPBYTE)g_szInstallPath,
|
|
&dwcbTemp);
|
|
|
|
// Read the version Number
|
|
dwcbTemp = MAX_REGISTRY_STRING;
|
|
dwType = REG_SZ;
|
|
g_szPMVersion[0] = TEXT('\0'); // Default value
|
|
RegQueryValueEx(hkeyPassport,
|
|
g_szVersion,
|
|
NULL,
|
|
&dwType,
|
|
(LPBYTE)&g_szPMVersion,
|
|
&dwcbTemp);
|
|
|
|
// The Remaining settings are read/write and get put into a PMSETTINGS struct
|
|
|
|
// Read the Time Window Number
|
|
dwcbTemp = sizeof(DWORD);
|
|
dwType = REG_DWORD;
|
|
lpPMConfig->dwTimeWindow = DEFAULT_TIME_WINDOW;
|
|
RegQueryValueEx(hkeyConfig,
|
|
g_szTimeWindow,
|
|
NULL,
|
|
&dwType,
|
|
(LPBYTE)&lpPMConfig->dwTimeWindow,
|
|
&dwcbTemp);
|
|
|
|
// Read the value for Forced Signin
|
|
dwcbTemp = sizeof(DWORD);
|
|
dwType = REG_DWORD;
|
|
lpPMConfig->dwForceSignIn = 0; // Don't force a signin by default
|
|
RegQueryValueEx(hkeyConfig,
|
|
g_szForceSignIn,
|
|
NULL,
|
|
&dwType,
|
|
(LPBYTE)&lpPMConfig->dwForceSignIn,
|
|
&dwcbTemp);
|
|
|
|
// Read the value for NSRefresh
|
|
dwcbTemp = sizeof(DWORD);
|
|
dwType = REG_DWORD;
|
|
lpPMConfig->dwEnableManualRefresh = 0; // Don't enable NS Manual Refresh by default
|
|
RegQueryValueEx(hkeyConfig,
|
|
g_szNSRefresh,
|
|
NULL,
|
|
&dwType,
|
|
(LPBYTE)&lpPMConfig->dwEnableManualRefresh,
|
|
&dwcbTemp);
|
|
|
|
// Read the default language ID
|
|
dwcbTemp = sizeof(DWORD);
|
|
dwType = REG_DWORD;
|
|
lpPMConfig->dwLanguageID = DEFAULT_LANGID; // english
|
|
RegQueryValueEx(hkeyConfig,
|
|
g_szLanguageID,
|
|
NULL,
|
|
&dwType,
|
|
(LPBYTE)&lpPMConfig->dwLanguageID,
|
|
&dwcbTemp);
|
|
|
|
// Get the co-branding template
|
|
dwcbTemp = lpPMConfig->cbCoBrandTemplate;
|
|
dwType = REG_SZ;
|
|
lpPMConfig->szCoBrandTemplate[0] = TEXT('\0'); // Default value
|
|
RegQueryValueEx(hkeyConfig,
|
|
g_szCoBrandTemplate,
|
|
NULL,
|
|
&dwType,
|
|
(LPBYTE)lpPMConfig->szCoBrandTemplate,
|
|
&dwcbTemp);
|
|
|
|
// Get the SiteID
|
|
dwcbTemp = sizeof(DWORD);
|
|
dwType = REG_DWORD;
|
|
lpPMConfig->dwSiteID = 1; // Default Site ID
|
|
RegQueryValueEx(hkeyConfig,
|
|
g_szSiteID,
|
|
NULL,
|
|
&dwType,
|
|
(LPBYTE)&lpPMConfig->dwSiteID,
|
|
&dwcbTemp);
|
|
|
|
// Get the return URL template
|
|
dwcbTemp = lpPMConfig->cbReturnURL;
|
|
dwType = REG_SZ;
|
|
lpPMConfig->szReturnURL[0] = TEXT('\0'); // Set a default for the current value
|
|
RegQueryValueEx(hkeyConfig,
|
|
g_szReturnURL,
|
|
NULL,
|
|
&dwType,
|
|
(LPBYTE)lpPMConfig->szReturnURL,
|
|
&dwcbTemp);
|
|
|
|
// Get the ticket cookie domain
|
|
dwcbTemp = lpPMConfig->cbTicketDomain;
|
|
dwType = REG_SZ;
|
|
lpPMConfig->szTicketDomain[0] = TEXT('\0'); // Set a default for the current value
|
|
RegQueryValueEx(hkeyConfig,
|
|
g_szTicketDomain,
|
|
NULL,
|
|
&dwType,
|
|
(LPBYTE)lpPMConfig->szTicketDomain,
|
|
&dwcbTemp);
|
|
|
|
// Get the ticket cookie path
|
|
dwcbTemp = lpPMConfig->cbTicketPath;
|
|
dwType = REG_SZ;
|
|
lpPMConfig->szTicketPath[0] = TEXT('\0'); // Set a default for the current value
|
|
RegQueryValueEx(hkeyConfig,
|
|
g_szTicketPath,
|
|
NULL,
|
|
&dwType,
|
|
(LPBYTE)lpPMConfig->szTicketPath,
|
|
&dwcbTemp);
|
|
|
|
// Get the profile cookie domain
|
|
dwcbTemp = lpPMConfig->cbProfileDomain;
|
|
dwType = REG_SZ;
|
|
lpPMConfig->szProfileDomain[0] = TEXT('\0'); // Set a default for the current value
|
|
RegQueryValueEx(hkeyConfig,
|
|
g_szProfileDomain,
|
|
NULL,
|
|
&dwType,
|
|
(LPBYTE)lpPMConfig->szProfileDomain,
|
|
&dwcbTemp);
|
|
|
|
// Get the profile cookie path
|
|
dwcbTemp = lpPMConfig->cbProfilePath;
|
|
dwType = REG_SZ;
|
|
lpPMConfig->szProfilePath[0] = TEXT('\0'); // Set a default for the current value
|
|
RegQueryValueEx(hkeyConfig,
|
|
g_szProfilePath,
|
|
NULL,
|
|
&dwType,
|
|
(LPBYTE)lpPMConfig->szProfilePath,
|
|
&dwcbTemp);
|
|
|
|
// Get the secure cookie domain
|
|
dwcbTemp = lpPMConfig->cbSecureDomain;
|
|
dwType = REG_SZ;
|
|
lpPMConfig->szSecureDomain[0] = TEXT('\0'); // Set a default for the current value
|
|
RegQueryValueEx(hkeyConfig,
|
|
g_szSecureDomain,
|
|
NULL,
|
|
&dwType,
|
|
(LPBYTE)lpPMConfig->szSecureDomain,
|
|
&dwcbTemp);
|
|
|
|
// Get the secure cookie path
|
|
dwcbTemp = lpPMConfig->cbSecurePath;
|
|
dwType = REG_SZ;
|
|
lpPMConfig->szSecurePath[0] = TEXT('\0'); // Set a default for the current value
|
|
RegQueryValueEx(hkeyConfig,
|
|
g_szSecurePath,
|
|
NULL,
|
|
&dwType,
|
|
(LPBYTE)lpPMConfig->szSecurePath,
|
|
&dwcbTemp);
|
|
|
|
// Get the Disaster URL
|
|
dwcbTemp = lpPMConfig->cbDisasterURL;
|
|
dwType = REG_SZ;
|
|
lpPMConfig->szDisasterURL[0] = TEXT('\0'); // Set a default for the current value
|
|
RegQueryValueEx(hkeyConfig,
|
|
g_szDisasterURL,
|
|
NULL,
|
|
&dwType,
|
|
(LPBYTE)lpPMConfig->szDisasterURL,
|
|
&dwcbTemp);
|
|
|
|
// Get Standalone mode setting
|
|
dwcbTemp = sizeof(DWORD);
|
|
dwType = REG_DWORD;
|
|
lpPMConfig->dwStandAlone = 0; // NOT standalone by default
|
|
RegQueryValueEx(hkeyConfig,
|
|
g_szStandAlone,
|
|
NULL,
|
|
&dwType,
|
|
(LPBYTE)&lpPMConfig->dwStandAlone,
|
|
&dwcbTemp);
|
|
|
|
/////////////////////////////////////////////////////////////////////////
|
|
//JVP 3/2/2000 START CHANGES
|
|
/////////////////////////////////////////////////////////////////////////
|
|
// Get Verbose mode setting
|
|
dwcbTemp = sizeof(DWORD);
|
|
dwType = REG_DWORD;
|
|
lpPMConfig->dwVerboseMode = 0; // NOT verbose by default
|
|
RegQueryValueEx(hkeyConfig,
|
|
g_szVerboseMode,
|
|
NULL,
|
|
&dwType,
|
|
(LPBYTE)&lpPMConfig->dwVerboseMode,
|
|
&dwcbTemp);
|
|
/////////////////////////////////////////////////////////////////////////
|
|
//JVP 3/2/2000 END CHANGES
|
|
/////////////////////////////////////////////////////////////////////////
|
|
|
|
// Get the current environment
|
|
dwcbTemp = lpPMConfig->cbEnvName;
|
|
dwType = REG_SZ;
|
|
lpPMConfig->szEnvName[0] = TEXT('\0'); // Set a default for the current value
|
|
RegQueryValueEx(hkeyConfig,
|
|
g_szEnvName,
|
|
NULL,
|
|
&dwType,
|
|
(LPBYTE)lpPMConfig->szEnvName,
|
|
&dwcbTemp);
|
|
|
|
// Get the current environment
|
|
dwcbTemp = lpPMConfig->cbRemoteFile;
|
|
dwType = REG_SZ;
|
|
lpPMConfig->szRemoteFile[0] = TEXT('\0'); // Set a default for the current value
|
|
RegQueryValueEx(hkeyPartner,
|
|
g_szRemoteFile,
|
|
NULL,
|
|
&dwType,
|
|
(LPBYTE)lpPMConfig->szRemoteFile,
|
|
&dwcbTemp);
|
|
|
|
// Get DisableCookies mode setting
|
|
dwcbTemp = sizeof(DWORD);
|
|
dwType = REG_DWORD;
|
|
lpPMConfig->dwDisableCookies = 0; // Cookies ENABLED by default
|
|
RegQueryValueEx(hkeyConfig,
|
|
g_szDisableCookies,
|
|
NULL,
|
|
&dwType,
|
|
(LPBYTE)&lpPMConfig->dwDisableCookies,
|
|
&dwcbTemp);
|
|
|
|
#ifdef DO_KEYSTUFF
|
|
// Get the current encryption key
|
|
dwcbTemp = sizeof(DWORD);
|
|
dwType = REG_DWORD;
|
|
lpPMConfig->dwCurrentKey = 1;
|
|
RegQueryValueEx(hkeyConfig,
|
|
g_szCurrentKey,
|
|
NULL,
|
|
&dwType,
|
|
(LPBYTE)&lpPMConfig->dwCurrentKey,
|
|
&dwcbTemp);
|
|
#endif
|
|
|
|
// For these next two, since they're required for named configs, we need
|
|
// to check for too much data and truncate it.
|
|
|
|
// Get the Host Name
|
|
dwcbTemp = lpPMConfig->cbHostName;
|
|
dwType = REG_SZ;
|
|
lpPMConfig->szHostName[0] = TEXT('\0'); // Set a default for the current value
|
|
if(ERROR_MORE_DATA == RegQueryValueEx(hkeyConfig,
|
|
g_szHostName,
|
|
NULL,
|
|
&dwType,
|
|
(LPBYTE)lpPMConfig->szHostName,
|
|
&dwcbTemp))
|
|
{
|
|
LPBYTE pb = (LPBYTE)malloc(dwcbTemp);
|
|
if(pb)
|
|
{
|
|
RegQueryValueEx(hkeyConfig,
|
|
g_szHostName,
|
|
NULL,
|
|
&dwType,
|
|
pb,
|
|
&dwcbTemp);
|
|
|
|
memcpy(lpPMConfig->szHostName, pb, lpPMConfig->cbHostName);
|
|
free(pb);
|
|
|
|
ReportError(hWndDlg, IDS_HOSTNAMETRUNC_WARN);
|
|
}
|
|
}
|
|
|
|
// Get the Host IP
|
|
dwcbTemp = lpPMConfig->cbHostIP;
|
|
dwType = REG_SZ;
|
|
lpPMConfig->szHostIP[0] = TEXT('\0'); // Set a default for the current value
|
|
if(ERROR_MORE_DATA == RegQueryValueEx(hkeyConfig,
|
|
g_szHostIP,
|
|
NULL,
|
|
&dwType,
|
|
(LPBYTE)lpPMConfig->szHostIP,
|
|
&dwcbTemp))
|
|
{
|
|
LPBYTE pb = (LPBYTE)malloc(dwcbTemp);
|
|
if(pb)
|
|
{
|
|
RegQueryValueEx(hkeyConfig,
|
|
g_szHostIP,
|
|
NULL,
|
|
&dwType,
|
|
pb,
|
|
&dwcbTemp);
|
|
|
|
memcpy(lpPMConfig->szHostIP, pb, lpPMConfig->cbHostIP);
|
|
free(pb);
|
|
|
|
ReportError(hWndDlg, IDS_HOSTIPTRUNC_WARN);
|
|
}
|
|
}
|
|
|
|
// Query for the secure level setting
|
|
dwcbTemp = sizeof(DWORD);
|
|
dwType = REG_DWORD;
|
|
lpPMConfig->dwSecureLevel = 0; // If this is an existing site then we level set the
|
|
// secure level at 0 so that we don't break anyone,
|
|
// even though the default for a new site is level 10.
|
|
RegQueryValueEx(hkeyConfig,
|
|
g_szSecureLevel,
|
|
NULL,
|
|
&dwType,
|
|
(LPBYTE)&lpPMConfig->dwSecureLevel,
|
|
&dwcbTemp);
|
|
|
|
// If we got empty strings for HostName or
|
|
// HostIP, and we have a named config it
|
|
// means someone's been mucking with
|
|
// the registry. Give them a warning and
|
|
// return FALSE.
|
|
if(lpszConfigSetName && lpszConfigSetName[0] &&
|
|
(lpPMConfig->szHostName[0] == TEXT('\0') ||
|
|
lpPMConfig->szHostIP[0] == TEXT('\0')))
|
|
{
|
|
ReportError(hWndDlg, IDS_CONFIGREAD_ERROR);
|
|
bReturn = FALSE;
|
|
goto Cleanup;
|
|
}
|
|
|
|
bReturn = TRUE;
|
|
|
|
Cleanup:
|
|
|
|
if (hkeyConfig && hkeyConfig != hkeyPassport)
|
|
RegCloseKey(hkeyConfig);
|
|
if (hkeyPassport)
|
|
RegCloseKey(hkeyPassport);
|
|
if (hkeyConfigSets)
|
|
RegCloseKey(hkeyConfigSets);
|
|
if (hklm && hklm != HKEY_LOCAL_MACHINE)
|
|
RegCloseKey(hklm);
|
|
if (hkeyPartner)
|
|
RegCloseKey(hkeyPartner);
|
|
|
|
return bReturn;
|
|
}
|
|
|
|
/**************************************************************************
|
|
|
|
WriteRegConfigSet
|
|
|
|
Write the current passport manager config set from the registry
|
|
|
|
**************************************************************************/
|
|
|
|
BOOL WriteRegConfigSet
|
|
(
|
|
HWND hWndDlg,
|
|
LPPMSETTINGS lpPMConfig,
|
|
LPTSTR lpszRemoteComputer,
|
|
LPTSTR lpszConfigSetName
|
|
)
|
|
{
|
|
BOOL bReturn;
|
|
HKEY hkeyPassport = NULL; // Regkey where Passport Setting live
|
|
HKEY hkeyConfigSets = NULL;
|
|
HKEY hkeyPartner = NULL;
|
|
HKEY hklm = NULL;
|
|
long lRet;
|
|
|
|
// Open the Passport Regkey ( either locally or remotly
|
|
if (lpszRemoteComputer && (TEXT('\0') != lpszRemoteComputer[0]))
|
|
{
|
|
//
|
|
// Attempt to connect to the HKEY_LOCAL_MACHINE of the remote computer.
|
|
// If this fails, assume that the computer doesn't exist or doesn't have
|
|
// the registry server running.
|
|
//
|
|
switch (lRet = RegConnectRegistry(lpszRemoteComputer,
|
|
HKEY_LOCAL_MACHINE,
|
|
&hklm))
|
|
{
|
|
|
|
case ERROR_SUCCESS:
|
|
break;
|
|
|
|
case ERROR_ACCESS_DENIED:
|
|
ReportError(hWndDlg, IDS_CONNECTACCESSDENIED);
|
|
bReturn = FALSE;
|
|
goto Cleanup;
|
|
|
|
default:
|
|
ReportError(hWndDlg, IDS_CONNECTBADNAME);
|
|
bReturn = FALSE;
|
|
goto Cleanup;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
hklm = HKEY_LOCAL_MACHINE;
|
|
}
|
|
|
|
|
|
// Open the key we want
|
|
if(lpszConfigSetName && lpszConfigSetName[0] != TEXT('\0'))
|
|
{
|
|
hkeyPassport = OpenRegConfigSet(hklm, lpszConfigSetName);
|
|
if(hkeyPassport == NULL)
|
|
{
|
|
ReportError(hWndDlg, IDS_CONFIGREAD_ERROR);
|
|
bReturn = FALSE;
|
|
goto Cleanup;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
if (ERROR_SUCCESS != (lRet = RegOpenKeyEx(hklm,
|
|
g_szPassportReg,
|
|
0,
|
|
KEY_ALL_ACCESS,
|
|
&hkeyPassport)))
|
|
{
|
|
LPVOID lpMsgBuf;
|
|
FormatMessage(
|
|
FORMAT_MESSAGE_ALLOCATE_BUFFER |
|
|
FORMAT_MESSAGE_FROM_SYSTEM |
|
|
FORMAT_MESSAGE_IGNORE_INSERTS,
|
|
NULL,
|
|
lRet,
|
|
MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), // Default language
|
|
(LPTSTR) &lpMsgBuf,
|
|
0,
|
|
NULL
|
|
);
|
|
|
|
{
|
|
TCHAR pszTitle[MAX_RESOURCE];
|
|
|
|
// Display the string.
|
|
LoadString(g_hInst, IDS_ERROR, pszTitle, DIMENSION(pszTitle));
|
|
MessageBox( NULL, (LPCTSTR) lpMsgBuf, pszTitle, MB_OK | MB_ICONINFORMATION );
|
|
}
|
|
|
|
// Free the buffer.
|
|
LocalFree( lpMsgBuf );
|
|
|
|
// ReportError(hWndDlg, IDS_CONFIGREAD_ERROR);
|
|
bReturn = FALSE;
|
|
goto Cleanup;
|
|
}
|
|
}
|
|
|
|
WriteGlobalConfigSettings(hWndDlg, hklm, lpPMConfig, lpszRemoteComputer);
|
|
|
|
// Open Partner key
|
|
if (ERROR_SUCCESS != (lRet = RegOpenKeyEx(hklm,
|
|
g_szPassportPartner,
|
|
0,
|
|
KEY_ALL_ACCESS,
|
|
&hkeyPartner)))
|
|
{
|
|
LPVOID lpMsgBuf;
|
|
|
|
if (FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER |
|
|
FORMAT_MESSAGE_FROM_SYSTEM |
|
|
FORMAT_MESSAGE_IGNORE_INSERTS,
|
|
NULL,
|
|
lRet,
|
|
MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), // Default language
|
|
(LPTSTR) &lpMsgBuf,
|
|
0,
|
|
NULL) != 0)
|
|
{
|
|
TCHAR pszTitle[MAX_RESOURCE];
|
|
|
|
// Display the string.
|
|
LoadString(g_hInst, IDS_ERROR, pszTitle, DIMENSION(pszTitle));
|
|
MessageBox( NULL, (LPCTSTR) lpMsgBuf, pszTitle, MB_OK | MB_ICONINFORMATION );
|
|
|
|
// Free the buffer.
|
|
LocalFree( lpMsgBuf );
|
|
}
|
|
|
|
// ReportError(hWndDlg, IDS_CONFIGREAD_ERROR);
|
|
bReturn = FALSE;
|
|
goto Cleanup;
|
|
}
|
|
|
|
|
|
// Write the Time Window Number
|
|
RegSetValueEx(hkeyPassport,
|
|
g_szTimeWindow,
|
|
NULL,
|
|
REG_DWORD,
|
|
(LPBYTE)&lpPMConfig->dwTimeWindow,
|
|
sizeof(DWORD));
|
|
|
|
// Write the value for Forced Signin
|
|
RegSetValueEx(hkeyPassport,
|
|
g_szForceSignIn,
|
|
NULL,
|
|
REG_DWORD,
|
|
(LPBYTE)&lpPMConfig->dwForceSignIn,
|
|
sizeof(DWORD));
|
|
|
|
// Write the default language ID
|
|
RegSetValueEx(hkeyPassport,
|
|
g_szLanguageID,
|
|
NULL,
|
|
REG_DWORD,
|
|
(LPBYTE)&lpPMConfig->dwLanguageID,
|
|
sizeof(DWORD));
|
|
|
|
// Write the co-branding template
|
|
RegSetValueEx(hkeyPassport,
|
|
g_szCoBrandTemplate,
|
|
NULL,
|
|
REG_SZ,
|
|
(LPBYTE)lpPMConfig->szCoBrandTemplate,
|
|
(lstrlen(lpPMConfig->szCoBrandTemplate) + 1) * sizeof(TCHAR));
|
|
|
|
// Write the SiteID
|
|
RegSetValueEx(hkeyPassport,
|
|
g_szSiteID,
|
|
NULL,
|
|
REG_DWORD,
|
|
(LPBYTE)&lpPMConfig->dwSiteID,
|
|
sizeof(DWORD));
|
|
|
|
// Write the return URL template
|
|
RegSetValueEx(hkeyPassport,
|
|
g_szReturnURL,
|
|
NULL,
|
|
REG_SZ,
|
|
(LPBYTE)lpPMConfig->szReturnURL,
|
|
(lstrlen(lpPMConfig->szReturnURL) + 1) * sizeof(TCHAR));
|
|
|
|
// Write the ticket cookie domain
|
|
RegSetValueEx(hkeyPassport,
|
|
g_szTicketDomain,
|
|
NULL,
|
|
REG_SZ,
|
|
(LPBYTE)lpPMConfig->szTicketDomain,
|
|
(lstrlen(lpPMConfig->szTicketDomain) + 1) * sizeof(TCHAR));
|
|
|
|
// Write the ticket cookie path
|
|
RegSetValueEx(hkeyPassport,
|
|
g_szTicketPath,
|
|
NULL,
|
|
REG_SZ,
|
|
(LPBYTE)lpPMConfig->szTicketPath,
|
|
(lstrlen(lpPMConfig->szTicketPath) + 1) * sizeof(TCHAR));
|
|
|
|
// Write the profile cookie domain
|
|
RegSetValueEx(hkeyPassport,
|
|
g_szProfileDomain,
|
|
NULL,
|
|
REG_SZ,
|
|
(LPBYTE)lpPMConfig->szProfileDomain,
|
|
(lstrlen(lpPMConfig->szProfileDomain) + 1) * sizeof(TCHAR));
|
|
|
|
// Write the profile cookie path
|
|
RegSetValueEx(hkeyPassport,
|
|
g_szProfilePath,
|
|
NULL,
|
|
REG_SZ,
|
|
(LPBYTE)lpPMConfig->szProfilePath,
|
|
(lstrlen(lpPMConfig->szProfilePath) + 1) * sizeof(TCHAR));
|
|
|
|
// Write the secure cookie domain
|
|
RegSetValueEx(hkeyPassport,
|
|
g_szSecureDomain,
|
|
NULL,
|
|
REG_SZ,
|
|
(LPBYTE)lpPMConfig->szSecureDomain,
|
|
(lstrlen(lpPMConfig->szSecureDomain) + 1) * sizeof(TCHAR));
|
|
|
|
// Write the secure cookie path
|
|
RegSetValueEx(hkeyPassport,
|
|
g_szSecurePath,
|
|
NULL,
|
|
REG_SZ,
|
|
(LPBYTE)lpPMConfig->szSecurePath,
|
|
(lstrlen(lpPMConfig->szSecurePath) + 1) * sizeof(TCHAR));
|
|
|
|
// Write the DisasterURL
|
|
RegSetValueEx(hkeyPassport,
|
|
g_szDisasterURL,
|
|
NULL,
|
|
REG_SZ,
|
|
(LPBYTE)lpPMConfig->szDisasterURL,
|
|
(lstrlen(lpPMConfig->szDisasterURL) + 1) * sizeof(TCHAR));
|
|
|
|
// Write Standalone mode setting
|
|
RegSetValueEx(hkeyPassport,
|
|
g_szStandAlone,
|
|
NULL,
|
|
REG_DWORD,
|
|
(LPBYTE)&lpPMConfig->dwStandAlone,
|
|
sizeof(DWORD));
|
|
|
|
/////////////////////////////////////////////////////////////////////////
|
|
//JVP 3/2/2000 START CHANGES
|
|
/////////////////////////////////////////////////////////////////////////
|
|
// Write Verbose mode setting
|
|
RegSetValueEx(hkeyPassport,
|
|
g_szVerboseMode,
|
|
NULL,
|
|
REG_DWORD,
|
|
(LPBYTE)&lpPMConfig->dwVerboseMode,
|
|
sizeof(DWORD));
|
|
/////////////////////////////////////////////////////////////////////////
|
|
//JVP 3/2/2000 END CHANGES
|
|
/////////////////////////////////////////////////////////////////////////
|
|
|
|
|
|
// Write the Partner RemoteFile
|
|
RegSetValueEx(hkeyPartner,
|
|
g_szRemoteFile,
|
|
NULL,
|
|
REG_SZ,
|
|
(LPBYTE)lpPMConfig->szRemoteFile,
|
|
(lstrlen(lpPMConfig->szRemoteFile) + 1) * sizeof(TCHAR));
|
|
|
|
// Write Environment RemoteFile
|
|
if (lstrcmp(g_szPMVersion, g_szVersion14) >= 0) // Write EnvName for 1.4 and later
|
|
WriteRegEnv(hWndDlg, lpPMConfig, hklm, lpPMConfig->szEnvName);
|
|
|
|
// Write DisableCookies mode setting
|
|
RegSetValueEx(hkeyPassport,
|
|
g_szDisableCookies,
|
|
NULL,
|
|
REG_DWORD,
|
|
(LPBYTE)&lpPMConfig->dwDisableCookies,
|
|
sizeof(DWORD));
|
|
|
|
// Only write HostName and HostIP for non-default config sets.
|
|
if(lpszConfigSetName && lpszConfigSetName[0])
|
|
{
|
|
// Write the HostName
|
|
RegSetValueEx(hkeyPassport,
|
|
g_szHostName,
|
|
NULL,
|
|
REG_SZ,
|
|
(LPBYTE)lpPMConfig->szHostName,
|
|
(lstrlen(lpPMConfig->szHostName) + 1) * sizeof(TCHAR));
|
|
|
|
// Write the HostIP
|
|
RegSetValueEx(hkeyPassport,
|
|
g_szHostIP,
|
|
NULL,
|
|
REG_SZ,
|
|
(LPBYTE)lpPMConfig->szHostIP,
|
|
(lstrlen(lpPMConfig->szHostIP) + 1) * sizeof(TCHAR));
|
|
}
|
|
|
|
// Write the secure level (note this reg value is not exposed through the UI
|
|
// users need to go directly to the registry to edit this value)
|
|
RegSetValueEx(hkeyPassport,
|
|
g_szSecureLevel,
|
|
NULL,
|
|
REG_DWORD,
|
|
(LPBYTE)&lpPMConfig->dwSecureLevel,
|
|
sizeof(DWORD));
|
|
|
|
bReturn = TRUE;
|
|
|
|
Cleanup:
|
|
|
|
if(hklm && hklm != HKEY_LOCAL_MACHINE)
|
|
RegCloseKey(hklm);
|
|
if(hkeyConfigSets)
|
|
RegCloseKey(hkeyConfigSets);
|
|
if(hkeyPassport)
|
|
RegCloseKey(hkeyPassport);
|
|
if(hkeyPartner)
|
|
RegCloseKey(hkeyPartner);
|
|
|
|
return bReturn;
|
|
}
|
|
|
|
|
|
/**************************************************************************
|
|
|
|
RemoveRegConfigSet
|
|
|
|
Verify that the passed in config set is consistent with the current
|
|
values in the registry.
|
|
|
|
**************************************************************************/
|
|
BOOL RemoveRegConfigSet
|
|
(
|
|
HWND hWndDlg,
|
|
LPTSTR lpszRemoteComputer,
|
|
LPTSTR lpszConfigSetName
|
|
)
|
|
{
|
|
BOOL bReturn;
|
|
HKEY hklm = NULL;
|
|
HKEY hkeyPassportConfigSets = NULL;
|
|
long lRet;
|
|
|
|
// Can't delete the default configuration set.
|
|
if(lpszConfigSetName == NULL || lpszConfigSetName[0] == TEXT('\0'))
|
|
{
|
|
bReturn = FALSE;
|
|
goto Cleanup;
|
|
}
|
|
|
|
// Open the Passport Configuration Sets Regkey ( either locally or remotly
|
|
if (lpszRemoteComputer && (TEXT('\0') != lpszRemoteComputer[0]))
|
|
{
|
|
//
|
|
// Attempt to connect to the HKEY_LOCAL_MACHINE of the remote computer.
|
|
// If this fails, assume that the computer doesn't exist or doesn't have
|
|
// the registry server running.
|
|
//
|
|
switch (RegConnectRegistry(lpszRemoteComputer,
|
|
HKEY_LOCAL_MACHINE,
|
|
&hklm))
|
|
{
|
|
|
|
case ERROR_SUCCESS:
|
|
break;
|
|
|
|
case ERROR_ACCESS_DENIED:
|
|
ReportError(hWndDlg, IDS_CONNECTACCESSDENIED);
|
|
bReturn = FALSE;
|
|
goto Cleanup;
|
|
|
|
default:
|
|
ReportError(hWndDlg, IDS_CONNECTBADNAME);
|
|
bReturn = FALSE;
|
|
goto Cleanup;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
hklm = HKEY_LOCAL_MACHINE;
|
|
}
|
|
|
|
// Open the key we want
|
|
if (ERROR_SUCCESS != (lRet = RegOpenKeyEx(hklm,
|
|
REG_PASSPORT_SITES_VALUE,
|
|
0,
|
|
KEY_ALL_ACCESS,
|
|
&hkeyPassportConfigSets)))
|
|
{
|
|
LPVOID lpMsgBuf;
|
|
if (FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER |
|
|
FORMAT_MESSAGE_FROM_SYSTEM |
|
|
FORMAT_MESSAGE_IGNORE_INSERTS,
|
|
NULL,
|
|
lRet,
|
|
MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), // Default language
|
|
(LPTSTR) &lpMsgBuf,
|
|
0,
|
|
NULL) != 0)
|
|
{
|
|
TCHAR pszTitle[MAX_RESOURCE];
|
|
|
|
// Display the string.
|
|
LoadString(g_hInst, IDS_ERROR, pszTitle, DIMENSION(pszTitle));
|
|
MessageBox( NULL, (LPCTSTR) lpMsgBuf, pszTitle, MB_OK | MB_ICONINFORMATION );
|
|
|
|
// Free the buffer.
|
|
LocalFree( lpMsgBuf );
|
|
}
|
|
|
|
// ReportError(hWndDlg, IDS_CONFIGREAD_ERROR);
|
|
bReturn = FALSE;
|
|
goto Cleanup;
|
|
}
|
|
|
|
// Delete the config set key
|
|
if (ERROR_SUCCESS != SHDeleteKey(hkeyPassportConfigSets, lpszConfigSetName))
|
|
{
|
|
ReportError(hWndDlg, IDS_CONFIGREAD_ERROR);
|
|
bReturn = FALSE;
|
|
goto Cleanup;
|
|
}
|
|
|
|
bReturn = TRUE;
|
|
|
|
Cleanup:
|
|
|
|
if(hklm && hklm != HKEY_LOCAL_MACHINE)
|
|
RegCloseKey(hklm);
|
|
if(hkeyPassportConfigSets)
|
|
RegCloseKey(hkeyPassportConfigSets);
|
|
|
|
return bReturn;
|
|
}
|
|
|
|
|
|
/**************************************************************************
|
|
|
|
VerifyRegConfigSet
|
|
|
|
Verify that the passed in config set is consistent with the current
|
|
values in the registry.
|
|
|
|
**************************************************************************/
|
|
BOOL VerifyRegConfigSet
|
|
(
|
|
HWND hWndDlg,
|
|
LPPMSETTINGS lpPMConfig,
|
|
LPTSTR lpszRemoteComputer,
|
|
LPTSTR lpszConfigSetName
|
|
)
|
|
{
|
|
BOOL fResult = FALSE;
|
|
PMSETTINGS *pPMCurrent = NULL;
|
|
|
|
pPMCurrent = (PMSETTINGS*)LocalAlloc(LMEM_FIXED, sizeof(PMSETTINGS));
|
|
if (NULL == pPMCurrent)
|
|
{
|
|
goto Cleanup;
|
|
}
|
|
|
|
InitializePMConfigStruct(pPMCurrent);
|
|
ReadRegConfigSet(hWndDlg, pPMCurrent, lpszRemoteComputer, lpszConfigSetName);
|
|
|
|
fResult = (0 == memcmp(pPMCurrent, lpPMConfig, sizeof(PMSETTINGS)));
|
|
Cleanup:
|
|
if (pPMCurrent)
|
|
{
|
|
LocalFree(pPMCurrent);
|
|
}
|
|
|
|
return fResult;
|
|
}
|
|
|
|
/**************************************************************************
|
|
|
|
ReadRegConfigSetNames
|
|
|
|
Get back a list of config set names on a local or remote machine.
|
|
Caller is responsible for calling free() on the returned pointer.
|
|
|
|
When this function returns TRUE, lppszConfigSetNames will either
|
|
contain NULL or a string containing the NULL delimited config set
|
|
names on the given computer.
|
|
|
|
When this function returns FALSE, *lppszConfigSetNames will not
|
|
be modified.
|
|
|
|
**************************************************************************/
|
|
BOOL ReadRegConfigSetNames
|
|
(
|
|
HWND hWndDlg,
|
|
LPTSTR lpszRemoteComputer,
|
|
LPTSTR* lppszConfigSetNames
|
|
)
|
|
{
|
|
BOOL bReturn;
|
|
HKEY hklm = NULL;
|
|
HKEY hkeyConfigSets = NULL;
|
|
DWORD dwIndex;
|
|
DWORD dwNumSubKeys;
|
|
DWORD dwMaxKeyNameLen;
|
|
TCHAR achKeyName[MAX_PATH];
|
|
ULONGLONG ullAllocSize;
|
|
LPTSTR lpszConfigSetNames;
|
|
LPTSTR lpszCur;
|
|
|
|
// Open the Passport Regkey ( either locally or remotly
|
|
if (lpszRemoteComputer && (TEXT('\0') != lpszRemoteComputer[0]))
|
|
{
|
|
//
|
|
// Attempt to connect to the HKEY_LOCAL_MACHINE of the remote computer.
|
|
// If this fails, assume that the computer doesn't exist or doesn't have
|
|
// the registry server running.
|
|
//
|
|
switch (RegConnectRegistry(lpszRemoteComputer,
|
|
HKEY_LOCAL_MACHINE,
|
|
&hklm))
|
|
{
|
|
|
|
case ERROR_SUCCESS:
|
|
break;
|
|
|
|
case ERROR_ACCESS_DENIED:
|
|
ReportError(hWndDlg, IDS_CONNECTACCESSDENIED);
|
|
bReturn = FALSE;
|
|
goto Cleanup;
|
|
|
|
default:
|
|
ReportError(hWndDlg, IDS_CONNECTBADNAME);
|
|
bReturn = FALSE;
|
|
goto Cleanup;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
hklm = HKEY_LOCAL_MACHINE;
|
|
}
|
|
|
|
if (ERROR_SUCCESS != RegOpenKeyEx(hklm,
|
|
REG_PASSPORT_SITES_VALUE,
|
|
0,
|
|
KEY_ALL_ACCESS,
|
|
&hkeyConfigSets))
|
|
{
|
|
bReturn = FALSE;
|
|
goto Cleanup;
|
|
}
|
|
|
|
if (ERROR_SUCCESS != RegQueryInfoKey(hkeyConfigSets,
|
|
NULL,
|
|
NULL,
|
|
NULL,
|
|
&dwNumSubKeys,
|
|
&dwMaxKeyNameLen,
|
|
NULL,
|
|
NULL,
|
|
NULL,
|
|
NULL,
|
|
NULL,
|
|
NULL))
|
|
{
|
|
bReturn = FALSE;
|
|
goto Cleanup;
|
|
}
|
|
|
|
//
|
|
// Nothing to do!
|
|
//
|
|
|
|
if(dwNumSubKeys == 0)
|
|
{
|
|
bReturn = TRUE;
|
|
*lppszConfigSetNames = NULL;
|
|
goto Cleanup;
|
|
}
|
|
|
|
// Too big? BUGBUG - We should make sure we check for this
|
|
// When writing out config sets.
|
|
ullAllocSize = UInt32x32To64(dwNumSubKeys, dwMaxKeyNameLen + 1);
|
|
ullAllocSize = (ullAllocSize+1)*sizeof(TCHAR);
|
|
if(ullAllocSize & 0xFFFFFFFF00000000)
|
|
{
|
|
bReturn = FALSE;
|
|
goto Cleanup;
|
|
}
|
|
|
|
// This should allocate more space than we need.
|
|
lpszConfigSetNames = (LPTSTR)malloc(((dwNumSubKeys * (dwMaxKeyNameLen + 1)) + 1) * sizeof(TCHAR));
|
|
if(lpszConfigSetNames == NULL)
|
|
{
|
|
bReturn = FALSE;
|
|
goto Cleanup;
|
|
}
|
|
|
|
// Read all names into the buffer. Names are NULL delimited and
|
|
// two NULLs end the entire thing.
|
|
dwIndex = 0;
|
|
lpszCur = lpszConfigSetNames;
|
|
while (ERROR_SUCCESS == RegEnumKey(hkeyConfigSets, dwIndex++, achKeyName, DIMENSION(achKeyName)))
|
|
{
|
|
_tcscpy(lpszCur, achKeyName);
|
|
lpszCur = _tcschr(lpszCur, TEXT('\0')) + 1;
|
|
}
|
|
|
|
*lpszCur = TEXT('\0');
|
|
|
|
*lppszConfigSetNames = lpszConfigSetNames;
|
|
bReturn = TRUE;
|
|
|
|
Cleanup:
|
|
|
|
if(hklm)
|
|
RegCloseKey(hklm);
|
|
if(hkeyConfigSets)
|
|
RegCloseKey(hkeyConfigSets);
|
|
|
|
return bReturn;
|
|
}
|
|
|
|
/**************************************************************************
|
|
|
|
WriteRegEnv
|
|
|
|
Write the current passport manager env set from the registry
|
|
|
|
**************************************************************************/
|
|
|
|
BOOL WriteRegEnv
|
|
(
|
|
HWND hWndDlg,
|
|
LPPMSETTINGS lpPMConfig,
|
|
HKEY hklm,
|
|
LPTSTR lpszEnvName
|
|
)
|
|
{
|
|
BOOL bReturn;
|
|
HKEY hkeyEnv = NULL;
|
|
long lRet;
|
|
|
|
// Open Env key
|
|
TCHAR szTemp[MAX_RESOURCE];
|
|
wsprintf(szTemp, TEXT("%s\\%s"), g_szPassportEnvironments, lpszEnvName);
|
|
|
|
if (ERROR_SUCCESS != (lRet = RegOpenKeyEx(hklm,
|
|
szTemp,
|
|
0,
|
|
KEY_ALL_ACCESS,
|
|
&hkeyEnv)))
|
|
{
|
|
LPVOID lpMsgBuf;
|
|
FormatMessage(
|
|
FORMAT_MESSAGE_ALLOCATE_BUFFER |
|
|
FORMAT_MESSAGE_FROM_SYSTEM |
|
|
FORMAT_MESSAGE_IGNORE_INSERTS,
|
|
NULL,
|
|
lRet,
|
|
MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), // Default language
|
|
(LPTSTR) &lpMsgBuf,
|
|
0,
|
|
NULL
|
|
);
|
|
|
|
{
|
|
TCHAR pszTitle[MAX_RESOURCE];
|
|
|
|
// Display the string.
|
|
LoadString(g_hInst, IDS_ERROR, pszTitle, DIMENSION(pszTitle));
|
|
MessageBox( NULL, (LPCTSTR) lpMsgBuf, pszTitle, MB_OK | MB_ICONINFORMATION );
|
|
}
|
|
|
|
// Free the buffer.
|
|
LocalFree( lpMsgBuf );
|
|
// ReportError(hWndDlg, IDS_CONFIGREAD_ERROR);
|
|
bReturn = FALSE;
|
|
goto Cleanup;
|
|
}
|
|
|
|
// Write the Env RemoteFile
|
|
RegSetValueEx(hkeyEnv,
|
|
g_szRemoteFile,
|
|
NULL,
|
|
REG_SZ,
|
|
(LPBYTE)lpPMConfig->szRemoteFile,
|
|
(lstrlen(lpPMConfig->szRemoteFile) + 1) * sizeof(TCHAR));
|
|
|
|
|
|
bReturn = TRUE;
|
|
|
|
Cleanup:
|
|
REG_CLOSE_KEY_NULL(hkeyEnv);
|
|
|
|
return bReturn;
|
|
}
|
|
|
|
/**************************************************************************
|
|
|
|
ReadRegEnv
|
|
|
|
Read the current passport manager env set from the registry
|
|
|
|
**************************************************************************/
|
|
|
|
BOOL ReadRegRemoteFile
|
|
(
|
|
HWND hWndDlg,
|
|
LPTSTR lpszRemoteFile,
|
|
LPTSTR lpszRemoteComputer,
|
|
LPTSTR lpszEnvName
|
|
)
|
|
{
|
|
BOOL bReturn;
|
|
HKEY hklm = NULL;
|
|
HKEY hkeyEnv = NULL;
|
|
long lRet;
|
|
|
|
// Open the Passport Regkey ( either locally or remotly
|
|
if (lpszRemoteComputer && (TEXT('\0') != lpszRemoteComputer[0]))
|
|
{
|
|
//
|
|
// Attempt to connect to the HKEY_LOCAL_MACHINE of the remote computer.
|
|
// If this fails, assume that the computer doesn't exist or doesn't have
|
|
// the registry server running.
|
|
//
|
|
switch (RegConnectRegistry(lpszRemoteComputer,
|
|
HKEY_LOCAL_MACHINE,
|
|
&hklm))
|
|
{
|
|
|
|
case ERROR_SUCCESS:
|
|
break;
|
|
|
|
case ERROR_ACCESS_DENIED:
|
|
ReportError(hWndDlg, IDS_CONNECTACCESSDENIED);
|
|
bReturn = FALSE;
|
|
goto Cleanup;
|
|
|
|
default:
|
|
ReportError(hWndDlg, IDS_CONNECTBADNAME);
|
|
bReturn = FALSE;
|
|
goto Cleanup;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
hklm = HKEY_LOCAL_MACHINE;
|
|
}
|
|
|
|
// Open Env key
|
|
TCHAR szTemp[MAX_RESOURCE];
|
|
wsprintf(szTemp, TEXT("%s\\%s"), g_szPassportEnvironments, lpszEnvName);
|
|
if (ERROR_SUCCESS != (lRet = RegOpenKeyEx(hklm,
|
|
szTemp,
|
|
0,
|
|
KEY_ALL_ACCESS,
|
|
&hkeyEnv)))
|
|
{
|
|
LPVOID lpMsgBuf;
|
|
FormatMessage(
|
|
FORMAT_MESSAGE_ALLOCATE_BUFFER |
|
|
FORMAT_MESSAGE_FROM_SYSTEM |
|
|
FORMAT_MESSAGE_IGNORE_INSERTS,
|
|
NULL,
|
|
lRet,
|
|
MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), // Default language
|
|
(LPTSTR) &lpMsgBuf,
|
|
0,
|
|
NULL
|
|
);
|
|
|
|
{
|
|
TCHAR pszTitle[MAX_RESOURCE];
|
|
|
|
// Display the string.
|
|
LoadString(g_hInst, IDS_ERROR, pszTitle, DIMENSION(pszTitle));
|
|
MessageBox( NULL, (LPCTSTR) lpMsgBuf, pszTitle, MB_OK | MB_ICONINFORMATION );
|
|
}
|
|
|
|
// Free the buffer.
|
|
LocalFree( lpMsgBuf );
|
|
// ReportError(hWndDlg, IDS_CONFIGREAD_ERROR);
|
|
bReturn = FALSE;
|
|
goto Cleanup;
|
|
}
|
|
|
|
// Get the current environment
|
|
DWORD dwcbTemp;
|
|
DWORD dwType;
|
|
TCHAR szName[INTERNET_MAX_URL_LENGTH];
|
|
dwcbTemp = sizeof(szName);
|
|
dwType = REG_SZ;
|
|
szName[0] = TEXT('\0'); // Set a default for the current value
|
|
if (ERROR_SUCCESS == RegQueryValueEx(hkeyEnv,
|
|
g_szRemoteFile,
|
|
NULL,
|
|
&dwType,
|
|
(LPBYTE)szName,
|
|
&dwcbTemp))
|
|
{
|
|
lstrcpy(lpszRemoteFile, szName);
|
|
bReturn = TRUE;
|
|
}
|
|
else
|
|
bReturn = FALSE;
|
|
|
|
Cleanup:
|
|
REG_CLOSE_KEY_NULL(hklm);
|
|
REG_CLOSE_KEY_NULL(hkeyEnv);
|
|
|
|
return bReturn;
|
|
}
|
|
|
|
/**************************************************************************
|
|
|
|
ReadRegEnv
|
|
|
|
Read the current passport manager env set from the registry
|
|
|
|
**************************************************************************/
|
|
|
|
BOOL ReadRegLocalFile
|
|
(
|
|
HWND hWndDlg,
|
|
LPTSTR lpszRemoteComputer,
|
|
LPTSTR lpszLocalFile
|
|
)
|
|
{
|
|
BOOL bReturn;
|
|
HKEY hklm = NULL;
|
|
HKEY hkeyPartner = NULL;
|
|
long lRet;
|
|
|
|
// Open the Passport Regkey ( either locally or remotly
|
|
if (lpszRemoteComputer && (TEXT('\0') != lpszRemoteComputer[0]))
|
|
{
|
|
//
|
|
// Attempt to connect to the HKEY_LOCAL_MACHINE of the remote computer.
|
|
// If this fails, assume that the computer doesn't exist or doesn't have
|
|
// the registry server running.
|
|
//
|
|
switch (RegConnectRegistry(lpszRemoteComputer,
|
|
HKEY_LOCAL_MACHINE,
|
|
&hklm))
|
|
{
|
|
|
|
case ERROR_SUCCESS:
|
|
break;
|
|
|
|
case ERROR_ACCESS_DENIED:
|
|
ReportError(hWndDlg, IDS_CONNECTACCESSDENIED);
|
|
bReturn = FALSE;
|
|
goto Cleanup;
|
|
|
|
default:
|
|
ReportError(hWndDlg, IDS_CONNECTBADNAME);
|
|
bReturn = FALSE;
|
|
goto Cleanup;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
hklm = HKEY_LOCAL_MACHINE;
|
|
}
|
|
|
|
// Open Partner key
|
|
if (ERROR_SUCCESS != (lRet = RegOpenKeyEx(hklm,
|
|
g_szPassportPartner,
|
|
0,
|
|
KEY_ALL_ACCESS,
|
|
&hkeyPartner)))
|
|
{
|
|
LPVOID lpMsgBuf;
|
|
|
|
if (FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER |
|
|
FORMAT_MESSAGE_FROM_SYSTEM |
|
|
FORMAT_MESSAGE_IGNORE_INSERTS,
|
|
NULL,
|
|
lRet,
|
|
MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), // Default language
|
|
(LPTSTR) &lpMsgBuf,
|
|
0,
|
|
NULL) != 0)
|
|
{
|
|
TCHAR pszTitle[MAX_RESOURCE];
|
|
|
|
// Display the string.
|
|
LoadString(g_hInst, IDS_ERROR, pszTitle, DIMENSION(pszTitle));
|
|
MessageBox( NULL, (LPCTSTR) lpMsgBuf, pszTitle, MB_OK | MB_ICONINFORMATION );
|
|
|
|
// Free the buffer.
|
|
LocalFree( lpMsgBuf );
|
|
}
|
|
|
|
// ReportError(hWndDlg, IDS_CONFIGREAD_ERROR);
|
|
bReturn = FALSE;
|
|
goto Cleanup;
|
|
}
|
|
|
|
// Get the current environment
|
|
DWORD dwcbTemp;
|
|
DWORD dwType;
|
|
TCHAR szName[INTERNET_MAX_URL_LENGTH];
|
|
dwcbTemp = sizeof(szName);
|
|
dwType = REG_SZ;
|
|
lpszLocalFile[0] = TEXT('\0'); // Set a default for the current value
|
|
if (ERROR_SUCCESS == RegQueryValueEx(hkeyPartner,
|
|
g_szLocalFile,
|
|
NULL,
|
|
&dwType,
|
|
(LPBYTE)szName,
|
|
&dwcbTemp))
|
|
{
|
|
lstrcpy(lpszLocalFile, szName);
|
|
bReturn = TRUE;
|
|
}
|
|
else
|
|
bReturn = FALSE;
|
|
|
|
Cleanup:
|
|
REG_CLOSE_KEY_NULL(hklm);
|
|
REG_CLOSE_KEY_NULL(hkeyPartner);
|
|
|
|
return bReturn;
|
|
}
|
|
|
|
|