698 lines
19 KiB
C++
698 lines
19 KiB
C++
#define STRICT
|
|
#include <windows.h>
|
|
#include <stdlib.h>
|
|
#include <stdarg.h>
|
|
#include <crtdbg.h>
|
|
#include <winbase.h>
|
|
#include <ras.h>
|
|
#include <time.h>
|
|
#include "icwunicd.h"
|
|
#include "RegData.h"
|
|
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// Defines
|
|
//-----------------------------------------------------------------------------
|
|
#define MAX_REGSTRING 150
|
|
#define DEFAULT_DIALOGTIMEOUT 1800000 // half hour
|
|
#define DEFAULT_SLEEPDURATION 30000 // 30 seconds
|
|
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// Global Handles and other defines
|
|
//-----------------------------------------------------------------------------
|
|
time_t g_tStartDate = 0;
|
|
int g_nISPTrialDays = 0;
|
|
int g_nTotalNotifications = -1;
|
|
DWORD g_dwDialogTimeOut = 0;
|
|
DWORD g_dwWakeupInterval = 0;
|
|
TCHAR g_szISPName[MAX_REGSTRING];
|
|
TCHAR g_szISPPhone[MAX_REGSTRING];
|
|
TCHAR g_szSignupURL[MAX_REGSTRING];
|
|
TCHAR g_szISPMsg[MAX_ISPMSGSTRING];
|
|
TCHAR g_szSignupURLTrialOver[MAX_REGSTRING];
|
|
TCHAR g_szConnectoidName[MAX_REGSTRING];
|
|
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// Registry entry strings.
|
|
//-----------------------------------------------------------------------------
|
|
static const TCHAR* g_szKeyRunOnce = TEXT("Software\\Microsoft\\Windows\\CurrentVersion\\RunOnce");
|
|
static const TCHAR* g_szEntryRunOnce = TEXT("IcwRmind");
|
|
|
|
// Key for IE run once stuff
|
|
static const TCHAR* g_szKeyIERunOnce = TEXT("Software\\Microsoft\\Internet Explorer\\Main");
|
|
static const TCHAR* g_szEntryIERunOnce = TEXT("First Home Page");
|
|
static const TCHAR* g_szHtmlFile = TEXT("TrialExp.html");
|
|
|
|
// This is the key where all the application data will be stored.
|
|
static const TCHAR* g_szKeyIcwRmind = TEXT("Software\\Microsoft\\Internet Connection Wizard\\IcwRmind");
|
|
|
|
// These entries will be created by the connection wizard.
|
|
static const TCHAR* g_szEntryISPName = TEXT("ISP_Name");
|
|
static const TCHAR* g_szEntryISPPhone = TEXT("ISP_Phone");
|
|
static const TCHAR* g_szEntryISPMsg = TEXT("ISP_Message");
|
|
static const TCHAR* g_szEntryTrialDays = TEXT("Trial_Days");
|
|
static const TCHAR* g_szEntrySignupURL = TEXT("Signup_URL");
|
|
static const TCHAR* g_szEntrySignupURLTrialOver = TEXT("Expired_URL");
|
|
static const TCHAR* g_szEntryConnectoidName = TEXT("Entry_Name");
|
|
static const TCHAR* g_szSignupSuccessfuly = TEXT("TrialConverted");
|
|
|
|
// These entries will be created by this application.
|
|
static const TCHAR* g_szEntryTrialStart = TEXT("Trial_Start");
|
|
static const TCHAR* g_szEntryTrialStartString = TEXT("Trial_Start_String");
|
|
static const TCHAR* g_szEntryAppIsVisible = TEXT("App_IsVisible");
|
|
static const TCHAR* g_szEntryWakeupInterval = TEXT("Wakeup_Interval");
|
|
static const TCHAR* g_szEntryTotalNotifications = TEXT("Total_Notifications");
|
|
static const TCHAR* g_szEntryDialogTimeOut = TEXT("Dialog_TimeOut");
|
|
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// GetWakeupInterval
|
|
//-----------------------------------------------------------------------------
|
|
DWORD GetWakeupInterval()
|
|
{
|
|
if (g_dwWakeupInterval)
|
|
{
|
|
return g_dwWakeupInterval;
|
|
}
|
|
|
|
CMcRegistry reg;
|
|
|
|
if (OpenIcwRmindKey(reg))
|
|
{
|
|
bool bRetCode = reg.GetValue(g_szEntryWakeupInterval, g_dwWakeupInterval);
|
|
|
|
// If not in the registry then set the default value.
|
|
if (!bRetCode)
|
|
{
|
|
g_dwWakeupInterval = DEFAULT_SLEEPDURATION;
|
|
}
|
|
}
|
|
|
|
return g_dwWakeupInterval;
|
|
}
|
|
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// GetDialogTimeout
|
|
//-----------------------------------------------------------------------------
|
|
DWORD GetDialogTimeout()
|
|
{
|
|
if (g_dwDialogTimeOut)
|
|
{
|
|
return g_dwDialogTimeOut;
|
|
}
|
|
|
|
CMcRegistry reg;
|
|
|
|
if (OpenIcwRmindKey(reg))
|
|
{
|
|
bool bRetCode = reg.GetValue(g_szEntryDialogTimeOut, g_dwDialogTimeOut);
|
|
|
|
// If not in the registry then set the default value.
|
|
if (!bRetCode)
|
|
{
|
|
g_dwDialogTimeOut = DEFAULT_DIALOGTIMEOUT;
|
|
}
|
|
}
|
|
|
|
return g_dwDialogTimeOut;
|
|
}
|
|
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// IsApplicationVisible
|
|
//-----------------------------------------------------------------------------
|
|
BOOL IsApplicationVisible()
|
|
{
|
|
// This data is debug data so it is not cached. Default value is
|
|
// FALSE if not found in registry.
|
|
BOOL bVisible = FALSE;
|
|
CMcRegistry reg;
|
|
|
|
if (OpenIcwRmindKey(reg))
|
|
{
|
|
DWORD dwData = 0;
|
|
bool bRetCode = reg.GetValue(g_szEntryAppIsVisible, dwData);
|
|
|
|
if (bRetCode)
|
|
{
|
|
bVisible = (BOOL) dwData;
|
|
}
|
|
}
|
|
|
|
return bVisible;
|
|
}
|
|
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// GetConnectionName
|
|
//-----------------------------------------------------------------------------
|
|
const TCHAR* GetISPConnectionName()
|
|
{
|
|
// If we already retrieved this then simply pass it back.
|
|
if (lstrlen(g_szConnectoidName))
|
|
{
|
|
return g_szConnectoidName;
|
|
}
|
|
|
|
CMcRegistry reg;
|
|
|
|
if (OpenIcwRmindKey(reg))
|
|
{
|
|
bool bRetCode = reg.GetValue(g_szEntryConnectoidName, g_szConnectoidName, sizeof(TCHAR)*MAX_REGSTRING);
|
|
_ASSERT(bRetCode);
|
|
}
|
|
|
|
return g_szConnectoidName;
|
|
}
|
|
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// GetISPSignupUrl
|
|
//-----------------------------------------------------------------------------
|
|
const TCHAR* GetISPSignupUrl()
|
|
{
|
|
// If we already retrieved this then simply pass it back.
|
|
if (lstrlen(g_szSignupURL))
|
|
{
|
|
return g_szSignupURL;
|
|
}
|
|
|
|
CMcRegistry reg;
|
|
|
|
if (OpenIcwRmindKey(reg))
|
|
{
|
|
bool bRetCode = reg.GetValue(g_szEntrySignupURL, g_szSignupURL, sizeof(TCHAR)*MAX_REGSTRING);
|
|
_ASSERT(bRetCode);
|
|
}
|
|
|
|
return g_szSignupURL;
|
|
}
|
|
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// GetISPSignupUrlTrialOver
|
|
//-----------------------------------------------------------------------------
|
|
const TCHAR* GetISPSignupUrlTrialOver()
|
|
{
|
|
// If we already retrieved this then simply pass it back.
|
|
if (lstrlen(g_szSignupURLTrialOver))
|
|
{
|
|
return g_szSignupURLTrialOver;
|
|
}
|
|
|
|
CMcRegistry reg;
|
|
|
|
if (OpenIcwRmindKey(reg))
|
|
{
|
|
bool bRetCode = reg.GetValue(g_szEntrySignupURLTrialOver, g_szSignupURLTrialOver, sizeof(TCHAR)*MAX_REGSTRING);
|
|
_ASSERT(bRetCode);
|
|
}
|
|
|
|
return g_szSignupURLTrialOver;
|
|
}
|
|
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// SetupRunOnce
|
|
//-----------------------------------------------------------------------------
|
|
void SetupRunOnce()
|
|
{
|
|
CMcRegistry reg;
|
|
|
|
bool bRetCode = reg.OpenKey(HKEY_LOCAL_MACHINE, g_szKeyRunOnce);
|
|
_ASSERT(bRetCode);
|
|
|
|
if (bRetCode)
|
|
{
|
|
LPTSTR lpszFileName = new TCHAR[_MAX_PATH + 23];
|
|
|
|
if (GetModuleFileName(GetModuleHandle(NULL), lpszFileName, _MAX_PATH + 20))
|
|
{
|
|
// Add a command line parameter.
|
|
lstrcat(lpszFileName, TEXT(" -R"));
|
|
bRetCode = reg.SetValue(g_szEntryRunOnce, lpszFileName);
|
|
_ASSERT(bRetCode);
|
|
}
|
|
|
|
delete [] lpszFileName;
|
|
}
|
|
}
|
|
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// RemoveRunOnce
|
|
//-----------------------------------------------------------------------------
|
|
void RemoveRunOnce()
|
|
{
|
|
CMcRegistry reg;
|
|
|
|
bool bRetCode = reg.OpenKey(HKEY_LOCAL_MACHINE, g_szKeyRunOnce);
|
|
_ASSERT(bRetCode);
|
|
|
|
if (bRetCode)
|
|
{
|
|
bRetCode = reg.SetValue(g_szEntryRunOnce, TEXT(""));
|
|
_ASSERT(bRetCode);
|
|
}
|
|
}
|
|
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// GetISPName
|
|
//-----------------------------------------------------------------------------
|
|
const TCHAR* GetISPName()
|
|
{
|
|
// If we already retrieved this then simply pass it back.
|
|
if (lstrlen(g_szISPName))
|
|
{
|
|
return g_szISPName;
|
|
}
|
|
|
|
CMcRegistry reg;
|
|
|
|
if (OpenIcwRmindKey(reg))
|
|
{
|
|
bool bRetCode = reg.GetValue(g_szEntryISPName, g_szISPName, sizeof(TCHAR)*MAX_REGSTRING);
|
|
_ASSERT(bRetCode);
|
|
}
|
|
|
|
return g_szISPName;
|
|
}
|
|
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// GetISPPhone
|
|
//-----------------------------------------------------------------------------
|
|
const TCHAR* GetISPPhone()
|
|
{
|
|
// If we already retrieved this then simply pass it back.
|
|
if (lstrlen(g_szISPPhone))
|
|
{
|
|
return g_szISPPhone;
|
|
}
|
|
|
|
CMcRegistry reg;
|
|
|
|
if (OpenIcwRmindKey(reg))
|
|
{
|
|
bool bRetCode = reg.GetValue(g_szEntryISPPhone, g_szISPPhone, sizeof(TCHAR)*MAX_REGSTRING);
|
|
_ASSERT(bRetCode);
|
|
}
|
|
|
|
return g_szISPPhone;
|
|
}
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// GetISPMessage
|
|
//-----------------------------------------------------------------------------
|
|
const TCHAR* GetISPMessage()
|
|
{
|
|
// If we already retrieved this then simply pass it back.
|
|
if (lstrlen(g_szISPMsg))
|
|
{
|
|
return g_szISPMsg;
|
|
}
|
|
|
|
CMcRegistry reg;
|
|
|
|
if (OpenIcwRmindKey(reg))
|
|
{
|
|
bool bRetCode = reg.GetValue(g_szEntryISPMsg, g_szISPMsg, sizeof(TCHAR)*MAX_ISPMSGSTRING);
|
|
_ASSERT(bRetCode);
|
|
}
|
|
|
|
return g_szISPMsg;
|
|
}
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// GetISPTrialDays
|
|
//-----------------------------------------------------------------------------
|
|
int GetISPTrialDays()
|
|
{
|
|
// If we already retrieved this then simply pass it back.
|
|
if (g_nISPTrialDays)
|
|
{
|
|
return g_nISPTrialDays;
|
|
}
|
|
|
|
CMcRegistry reg;
|
|
|
|
if (OpenIcwRmindKey(reg))
|
|
{
|
|
DWORD dwData = 0;
|
|
bool bRetCode = reg.GetValue(g_szEntryTrialDays, dwData);
|
|
_ASSERT(bRetCode);
|
|
|
|
if (bRetCode)
|
|
{
|
|
g_nISPTrialDays = (int) dwData;
|
|
}
|
|
}
|
|
|
|
return g_nISPTrialDays;
|
|
}
|
|
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// GetTrialStartDate
|
|
//-----------------------------------------------------------------------------
|
|
time_t GetTrialStartDate()
|
|
{
|
|
// If we already retrieved this then simply pass it back.
|
|
if (g_tStartDate)
|
|
{
|
|
return g_tStartDate;
|
|
}
|
|
|
|
// If the trial start date entry does not exist in the registry then
|
|
// this is the first we have been executed so the trial start date
|
|
// is today's date. Put this back in the registry.
|
|
CMcRegistry reg;
|
|
|
|
if (OpenIcwRmindKey(reg))
|
|
{
|
|
DWORD dwData = 0;
|
|
bool bRetCode = reg.GetValue(g_szEntryTrialStart, dwData);
|
|
|
|
if (bRetCode && 0 != dwData)
|
|
{
|
|
g_tStartDate = (time_t) dwData;
|
|
}
|
|
else
|
|
{
|
|
time_t tTime;
|
|
time(&tTime);
|
|
|
|
if (reg.SetValue(g_szEntryTrialStart, (DWORD) tTime))
|
|
{
|
|
g_tStartDate = tTime;
|
|
SetStartDateString(tTime);
|
|
}
|
|
}
|
|
}
|
|
|
|
return g_tStartDate;
|
|
}
|
|
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// OpenIcwRmindKey
|
|
//-----------------------------------------------------------------------------
|
|
bool OpenIcwRmindKey(CMcRegistry ®)
|
|
{
|
|
// This method will open the IcwRmind key in the registry. If the key
|
|
// does not exist it will be created here.
|
|
bool bRetCode = reg.OpenKey(HKEY_LOCAL_MACHINE, g_szKeyIcwRmind);
|
|
|
|
if (!bRetCode)
|
|
{
|
|
bRetCode = reg.CreateKey(HKEY_LOCAL_MACHINE, g_szKeyIcwRmind);
|
|
_ASSERT(bRetCode);
|
|
}
|
|
|
|
return bRetCode;
|
|
}
|
|
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// ClearCachedData
|
|
//-----------------------------------------------------------------------------
|
|
void ClearCachedData()
|
|
{
|
|
// Clear all the global data so that it will be reread out of the
|
|
// registry.
|
|
g_tStartDate = 0;
|
|
g_nISPTrialDays = 0;
|
|
g_dwDialogTimeOut = 0;
|
|
g_dwWakeupInterval = 0;
|
|
g_szISPName[0] = 0;
|
|
g_szISPMsg[0] = 0;
|
|
g_szISPPhone[0] = 0;
|
|
g_szSignupURL[0] = 0;
|
|
g_szSignupURLTrialOver[0] = 0;
|
|
g_szConnectoidName[0] = 0;
|
|
g_nTotalNotifications = -1;
|
|
}
|
|
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// ResetCachedData
|
|
//-----------------------------------------------------------------------------
|
|
void ResetCachedData()
|
|
{
|
|
// Clear all the global data so that it will be reread out of the
|
|
// registry.
|
|
g_tStartDate = 0;
|
|
g_nISPTrialDays = 0;
|
|
g_dwDialogTimeOut = 0;
|
|
g_dwWakeupInterval = 0;
|
|
g_szISPName[0] = 0;
|
|
g_szISPMsg[0] = 0;
|
|
g_szISPPhone[0] = 0;
|
|
g_szSignupURL[0] = 0;
|
|
g_szSignupURLTrialOver[0] = 0;
|
|
g_szConnectoidName[0] = 0;
|
|
g_nTotalNotifications = -1;
|
|
|
|
// We must also clear the start date and total notifications out
|
|
// of the registry.
|
|
CMcRegistry reg;
|
|
|
|
if (OpenIcwRmindKey(reg))
|
|
{
|
|
bool bRetCode = reg.SetValue(g_szEntryTrialStart, (DWORD) 0);
|
|
_ASSERT(bRetCode);
|
|
bRetCode = reg.SetValue(g_szEntryTotalNotifications, (DWORD) 0);
|
|
_ASSERT(bRetCode);
|
|
}
|
|
}
|
|
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// GetTotalNotifications
|
|
//-----------------------------------------------------------------------------
|
|
int GetTotalNotifications()
|
|
{
|
|
// This is the number of times we have notified the user and the user
|
|
// has responded to us. We will only notify them 3 times.
|
|
if (-1 != g_nTotalNotifications)
|
|
{
|
|
_ASSERT(g_nTotalNotifications <= 3);
|
|
return g_nTotalNotifications;
|
|
}
|
|
|
|
CMcRegistry reg;
|
|
|
|
if (OpenIcwRmindKey(reg))
|
|
{
|
|
DWORD dwData = 0;
|
|
bool bRetCode = reg.GetValue(g_szEntryTotalNotifications, dwData);
|
|
|
|
if (bRetCode)
|
|
{
|
|
g_nTotalNotifications = (int) dwData;
|
|
}
|
|
else
|
|
{
|
|
g_nTotalNotifications = 0;
|
|
}
|
|
}
|
|
|
|
return g_nTotalNotifications;
|
|
}
|
|
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// IncrementTotalNotifications
|
|
//-----------------------------------------------------------------------------
|
|
void IncrementTotalNotifications()
|
|
{
|
|
_ASSERT(g_nTotalNotifications < 3 && -1 != g_nTotalNotifications);
|
|
|
|
if (g_nTotalNotifications < 3 && -1 != g_nTotalNotifications)
|
|
{
|
|
++g_nTotalNotifications;
|
|
|
|
// Let's put it back into the registry now.
|
|
CMcRegistry reg;
|
|
|
|
if (OpenIcwRmindKey(reg))
|
|
{
|
|
DWORD dwData = 0;
|
|
bool bRetCode = reg.SetValue(g_szEntryTotalNotifications, (DWORD) g_nTotalNotifications);
|
|
_ASSERT(bRetCode);
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// ResetTrialStartDate
|
|
//-----------------------------------------------------------------------------
|
|
void ResetTrialStartDate(time_t timeNewStartDate)
|
|
{
|
|
CMcRegistry reg;
|
|
|
|
if (OpenIcwRmindKey(reg))
|
|
{
|
|
if (reg.SetValue(g_szEntryTrialStart, (DWORD) timeNewStartDate))
|
|
{
|
|
g_tStartDate = timeNewStartDate;
|
|
SetStartDateString(timeNewStartDate);
|
|
}
|
|
else
|
|
{
|
|
_ASSERT(false);
|
|
}
|
|
}
|
|
else
|
|
{
|
|
_ASSERT(false);
|
|
}
|
|
}
|
|
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// DeleteAllRegistryData
|
|
//-----------------------------------------------------------------------------
|
|
void DeleteAllRegistryData()
|
|
{
|
|
// Delete the Run Once data. We do this by setting the value
|
|
// to nothing.
|
|
CMcRegistry reg;
|
|
|
|
bool bRetCode = reg.OpenKey(HKEY_LOCAL_MACHINE, g_szKeyRunOnce);
|
|
_ASSERT(bRetCode);
|
|
|
|
if (bRetCode)
|
|
{
|
|
bRetCode = reg.SetValue(g_szEntryRunOnce, TEXT(""));
|
|
_ASSERT(bRetCode);
|
|
}
|
|
|
|
// Delete the Remind Key and all it's values.
|
|
RegDeleteKey(HKEY_LOCAL_MACHINE, g_szKeyIcwRmind);
|
|
}
|
|
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// IsSignupSuccessful
|
|
//-----------------------------------------------------------------------------
|
|
BOOL IsSignupSuccessful()
|
|
{
|
|
BOOL bSuccess = FALSE;
|
|
CMcRegistry reg;
|
|
|
|
// Do not cache this data. Some other app will write this entry
|
|
// once the user has successfully signed up.
|
|
if (OpenIcwRmindKey(reg))
|
|
{
|
|
DWORD dwData = 0;
|
|
bool bRetCode = reg.GetValue(g_szSignupSuccessfuly, dwData);
|
|
|
|
if (bRetCode)
|
|
{
|
|
bSuccess = (BOOL) dwData;
|
|
}
|
|
}
|
|
|
|
return bSuccess;
|
|
}
|
|
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// RemoveTrialConvertedFlag
|
|
//-----------------------------------------------------------------------------
|
|
void RemoveTrialConvertedFlag()
|
|
{
|
|
BOOL bSuccess = FALSE;
|
|
CMcRegistry reg;
|
|
|
|
if (OpenIcwRmindKey(reg))
|
|
{
|
|
bool bRetCode = reg.SetValue(g_szSignupSuccessfuly, (DWORD) 0);
|
|
_ASSERT(bRetCode);
|
|
}
|
|
}
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// SetStartDateString
|
|
//-----------------------------------------------------------------------------
|
|
void SetStartDateString(time_t timeStartDate)
|
|
{
|
|
CMcRegistry reg;
|
|
TCHAR buf[255];
|
|
|
|
wsprintf(buf, TEXT("%s"), ctime(&timeStartDate));
|
|
|
|
if (OpenIcwRmindKey(reg))
|
|
{
|
|
reg.SetValue(g_szEntryTrialStartString, buf);
|
|
}
|
|
}
|
|
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// SetIERunOnce
|
|
//-----------------------------------------------------------------------------
|
|
void SetIERunOnce()
|
|
{
|
|
CMcRegistry reg;
|
|
|
|
bool bRetCode = reg.OpenKey(HKEY_CURRENT_USER, g_szKeyIERunOnce);
|
|
|
|
// The html page for the IE run once is in the same directory as
|
|
// the IcwRmind exe. Create the full qualified path.
|
|
if (bRetCode)
|
|
{
|
|
TCHAR* pszBuf = new TCHAR[_MAX_PATH];
|
|
|
|
if (pszBuf)
|
|
{
|
|
if (GetModuleFileName(GetModuleHandle(NULL), pszBuf, _MAX_PATH))
|
|
{
|
|
TCHAR* pszBufPath = new TCHAR[_MAX_PATH];
|
|
|
|
if (pszBufPath)
|
|
{
|
|
TCHAR* pszDrive = new TCHAR[_MAX_DRIVE];
|
|
|
|
if (pszDrive)
|
|
{
|
|
_tsplitpath(pszBuf, pszDrive, pszBufPath, NULL, NULL);
|
|
lstrcpy(pszBuf, pszDrive);
|
|
lstrcat(pszBuf, pszBufPath);
|
|
lstrcat(pszBuf, g_szHtmlFile);
|
|
reg.SetValue(g_szEntryIERunOnce, pszBuf);
|
|
|
|
delete [] pszDrive;
|
|
}
|
|
|
|
delete [] pszBufPath;
|
|
}
|
|
}
|
|
|
|
delete [] pszBuf;
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// RemoveIERunOnce
|
|
//-----------------------------------------------------------------------------
|
|
void RemoveIERunOnce()
|
|
{
|
|
HKEY hkey;
|
|
long lErr = ::RegOpenKeyEx(HKEY_CURRENT_USER, g_szKeyIERunOnce, 0, KEY_READ | KEY_WRITE, &hkey);
|
|
|
|
if (ERROR_SUCCESS == lErr)
|
|
{
|
|
RegDeleteValue(hkey, g_szEntryIERunOnce);
|
|
RegCloseKey(hkey);
|
|
}
|
|
}
|