314 lines
11 KiB
C++
314 lines
11 KiB
C++
//*********************************************************************
|
|
//* Microsoft Windows **
|
|
//* Copyright(c) Microsoft Corp., 1994 **
|
|
//*********************************************************************
|
|
|
|
//
|
|
// ENDUI.C - Functions for Wizard closing pages and internet tour
|
|
//
|
|
//
|
|
|
|
// HISTORY:
|
|
//
|
|
// 1/12/95 jeremys Created.
|
|
// 96/03/09 markdu Added LPRASENTRY parameter to CreateConnectoid()
|
|
// 96/03/09 markdu Moved all references to 'need terminal window after
|
|
// dial' into RASENTRY.dwfOptions.
|
|
// 96/03/10 markdu Moved all references to modem name into RASENTRY.
|
|
// 96/03/10 markdu Moved all references to phone number into RASENTRY.
|
|
// 96/03/10 markdu Made all TCP/IP stuff be per-connectoid.
|
|
// 96/03/23 markdu Removed unused TCP/IP code.
|
|
// 96/03/24 markdu Replaced memset with ZeroMemory for consistency.
|
|
// 96/04/04 markdu Added phonebook name param to CreateConnectoid.
|
|
// 96/04/06 markdu NASH BUG 15369 Enable finish AND back button on last page,
|
|
// and create the connectoid only after finish has been pressed.
|
|
// 96/04/06 markdu NASH BUG 15653 Use exported autodial API.
|
|
// 96/05/02 markdu NASH BUG 17333 Write out IE news settings.
|
|
// 96/05/06 markdu NASH BUG 21139 Turn off proxy server if connecting
|
|
// over modem.
|
|
// 96/05/14 markdu NASH BUG 22681 Took out mail and news pages.
|
|
//
|
|
|
|
#include "wizard.h"
|
|
#include "icwextsn.h"
|
|
#include "imnext.h"
|
|
|
|
typedef HRESULT (APIENTRY *PFNSETDEFAULTMAILHANDLER)(VOID);
|
|
typedef HRESULT (APIENTRY *PFNSETDEFAULTNEWSHANDLER)(VOID);
|
|
|
|
#define REGKEY_NDC TEXT("Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Advanced")
|
|
#define REGKEY_NDC_ENTRY TEXT("CascadeNetworkConnections")
|
|
#define REGKEY_NDC_VALUE TEXT("YES")
|
|
|
|
BOOL CommitConfigurationChanges(HWND hDlg);
|
|
|
|
/*******************************************************************
|
|
|
|
NAME: ConnectedOKInitProc
|
|
|
|
SYNOPSIS: Called when "Your are connected" page is displayed
|
|
|
|
ENTRY: hDlg - dialog window
|
|
fFirstInit - TRUE if this is the first time the dialog
|
|
is initialized, FALSE if this InitProc has been called
|
|
before (e.g. went past this page and backed up)
|
|
|
|
********************************************************************/
|
|
BOOL CALLBACK ConnectedOKInitProc(HWND hDlg,BOOL fFirstInit)
|
|
{
|
|
// enable "finish" button instead of "next"
|
|
PropSheet_SetWizButtons(GetParent(hDlg),PSWIZB_FINISH | PSWIZB_BACK);
|
|
|
|
// if we've travelled through external apprentice pages,
|
|
// it's easy for our current page pointer to get munged,
|
|
// so reset it here for sanity's sake.
|
|
gpWizardState->uCurrentPage = ORD_PAGE_CONNECTEDOK;
|
|
|
|
return TRUE;
|
|
}
|
|
|
|
/*******************************************************************
|
|
|
|
NAME: ConnectedOKOKProc
|
|
|
|
SYNOPSIS: Called when Next or Back btns pressed from page
|
|
|
|
ENTRY: hDlg - dialog window
|
|
fForward - TRUE if 'Next' was pressed, FALSE if 'Back'
|
|
puNextPage - if 'Next' was pressed,
|
|
proc can fill this in with next page to go to. This
|
|
parameter is ingored if 'Back' was pressed.
|
|
pfKeepHistory - page will not be kept in history if
|
|
proc fills this in with FALSE.
|
|
|
|
EXIT: returns TRUE to allow page to be turned, FALSE
|
|
to keep the same page.
|
|
|
|
********************************************************************/
|
|
BOOL CALLBACK ConnectedOKOKProc(HWND hDlg,BOOL fForward,UINT * puNextPage,
|
|
BOOL * pfKeepHistory)
|
|
{
|
|
|
|
if (fForward)
|
|
{
|
|
if (CONNECT_RAS == gpUserInfo->uiConnectionType)
|
|
{
|
|
HKEY hKey = NULL;
|
|
|
|
RegOpenKeyEx(HKEY_CURRENT_USER, REGKEY_NDC, 0, KEY_WRITE, &hKey);
|
|
if (hKey)
|
|
{
|
|
RegSetValueEx(hKey, REGKEY_NDC_ENTRY, 0, REG_SZ, (LPBYTE)REGKEY_NDC_VALUE, sizeof(REGKEY_NDC_VALUE));
|
|
CloseHandle(hKey);
|
|
}
|
|
}
|
|
|
|
// set flag to indicate that the user completed the wizard
|
|
gfUserFinished = TRUE;
|
|
|
|
// go configure mail, RNA
|
|
if (!CommitConfigurationChanges(hDlg))
|
|
{
|
|
// set flag to indicate that wizard should exit now
|
|
gfQuitWizard = TRUE;
|
|
|
|
return FALSE;
|
|
}
|
|
}
|
|
|
|
return TRUE;
|
|
}
|
|
|
|
/*******************************************************************
|
|
|
|
NAME: CommitConfigurationChanges
|
|
|
|
SYNOPSIS: Performs the following as appropriate:
|
|
Mail configuration, RNA connectoid creation
|
|
|
|
ENTRY: hDlg - handle of parent window
|
|
|
|
EXIT: returns TRUE if successful or partially successful,
|
|
FALSE if unsuccessful
|
|
|
|
NOTES: Displays its own error messages. This function will
|
|
continue as far as it can, if one item fails it will
|
|
try to commit the rest.
|
|
|
|
********************************************************************/
|
|
BOOL CommitConfigurationChanges(HWND hDlg)
|
|
{
|
|
HRESULT hr;
|
|
FARPROC fpSetDefault;
|
|
HKEY hKey;
|
|
TCHAR szBuf[MAX_PATH+1];
|
|
DWORD size;
|
|
|
|
|
|
// if connecting over modem, create a connectoid with
|
|
// ISP name and phone number
|
|
if ( CONNECT_RAS == gpUserInfo->uiConnectionType )
|
|
{
|
|
DWORD dwRet;
|
|
|
|
// Only create the connectoid if it is new or has been modified
|
|
if (gpUserInfo->fNewConnection || gpUserInfo->fModifyConnection)
|
|
{
|
|
DEBUGMSG("Creating/modifying connectoid %s", gpUserInfo->szISPName);
|
|
dwRet = CreateConnectoid(NULL, gpUserInfo->szISPName, gpRasEntry,
|
|
gpUserInfo->szAccountName,gpUserInfo->szPassword);
|
|
|
|
if (dwRet != ERROR_SUCCESS)
|
|
{
|
|
DisplayErrorMessage(hDlg,IDS_ERRCreateConnectoid,
|
|
dwRet,ERRCLS_RNA,MB_ICONEXCLAMATION);
|
|
return FALSE;
|
|
}
|
|
}
|
|
|
|
// Only change the defaults if we are not just setting
|
|
// up a new mail or news account.
|
|
if ( !(gpWizardState->dwRunFlags & RSW_APPRENTICE) )
|
|
{
|
|
// 96/05/06 markdu NASH BUG 21139 Turn off proxy server if connecting
|
|
// over modem.
|
|
gpUserInfo->fProxyEnable = FALSE;
|
|
|
|
// set the name of this connectoid in registry as the connectoid
|
|
// to use for autodialing
|
|
// 96/04/06 markdu NASH BUG 15653 Use exported autodial API.
|
|
InetSetAutodial(TRUE, gpUserInfo->szISPName);
|
|
|
|
// clear any old backup number
|
|
SetBackupInternetConnectoid(NULL);
|
|
}
|
|
}
|
|
else if ( !(gpWizardState->dwRunFlags & RSW_APPRENTICE) )
|
|
{
|
|
// disable autodialing in registry because user is using LAN
|
|
// 96/04/06 markdu NASH BUG 15653 Use exported autodial API.
|
|
InetSetAutodial(FALSE, NULL);
|
|
}
|
|
|
|
|
|
if ( !(gpWizardState->dwRunFlags & RSW_APPRENTICE) )
|
|
{
|
|
if (CONNECT_LAN == gpUserInfo->uiConnectionType)
|
|
{
|
|
// write out proxy server config information
|
|
hr = InetSetProxyEx(gpUserInfo->fProxyEnable,
|
|
NULL,
|
|
gpUserInfo->szProxyServer,
|
|
gpUserInfo->szProxyOverride);
|
|
if (ERROR_SUCCESS != hr)
|
|
{
|
|
DisplayErrorMessage(hDlg,IDS_ERRConfigureProxy,
|
|
(DWORD) hr,ERRCLS_STANDARD,MB_ICONEXCLAMATION);
|
|
return FALSE;
|
|
}
|
|
}
|
|
|
|
// make sure "The Internet" icon on desktop points to web browser
|
|
// (it may initially be pointing at internet wizard)
|
|
|
|
// //10/24/96 jmazner Normandy 6968
|
|
// //No longer neccessary thanks to Valdon's hooks for invoking ICW.
|
|
// 11/21/96 jmazner Normandy 11812
|
|
// oops, it _is_ neccessary, since if user downgrades from IE 4 to IE 3,
|
|
// ICW 1.1 needs to morph the IE 3 icon.
|
|
|
|
SetDesktopInternetIconToBrowser();
|
|
|
|
// set notation in registry whether user selected modem or LAN access,
|
|
// for future reference...
|
|
RegEntry re(szRegPathInternetSettings,HKEY_LOCAL_MACHINE);
|
|
if (re.GetError() == ERROR_SUCCESS)
|
|
{
|
|
re.SetValue(szRegValAccessMedium,(DWORD)
|
|
(CONNECT_LAN == gpUserInfo->uiConnectionType) ? USERPREF_LAN : USERPREF_MODEM);
|
|
ASSERT(re.GetError() == ERROR_SUCCESS);
|
|
|
|
re.SetValue(szRegValAccessType, (DWORD) ACCESSTYPE_OTHER_ISP);
|
|
ASSERT(re.GetError() == ERROR_SUCCESS);
|
|
}
|
|
|
|
// set the username as the DNS host name, if there is no host name already
|
|
// This is because some ISPs use the DNS host name for security for
|
|
// access to mail, etc. (Go figure!)
|
|
RegEntry reTcp(szTCPGlobalKeyName,HKEY_LOCAL_MACHINE);
|
|
ASSERT(reTcp.GetError() == ERROR_SUCCESS);
|
|
if (reTcp.GetError() == ERROR_SUCCESS)
|
|
{
|
|
TCHAR szHostName[SMALL_BUF_LEN+1]=TEXT("");
|
|
// set DNS host name, but only if there's not a host name already set
|
|
if (!reTcp.GetString(szRegValHostName,szHostName,sizeof(szHostName))
|
|
|| !lstrlen(szHostName))
|
|
reTcp.SetValue(szRegValHostName,gpUserInfo->szAccountName);
|
|
}
|
|
|
|
// If DNS is set globally, clear it out so the per-connectoid settings
|
|
// will be saved.
|
|
BOOL fTemp;
|
|
DoDNSCheck(hDlg,&fTemp);
|
|
if (TRUE == fTemp)
|
|
{
|
|
gpWizardState->fNeedReboot = TRUE;
|
|
}
|
|
}
|
|
|
|
DWORD dwSaveErr = 0;
|
|
|
|
if ( g_fAcctMgrUILoaded && gpImnApprentice )
|
|
{
|
|
CONNECTINFO myConnectInfo;
|
|
myConnectInfo.cbSize = sizeof( CONNECTINFO );
|
|
|
|
#ifdef UNICODE
|
|
wcstombs(myConnectInfo.szConnectoid, TEXT("Uninitialized\0"), MAX_PATH);
|
|
#else
|
|
lstrcpy( myConnectInfo.szConnectoid, TEXT("Uninitialized\0"));
|
|
#endif
|
|
|
|
myConnectInfo.type = gpUserInfo->uiConnectionType;
|
|
|
|
if( CONNECT_RAS == myConnectInfo.type )
|
|
{
|
|
#ifdef UNICODE
|
|
wcstombs(myConnectInfo.szConnectoid, gpUserInfo->szISPName, MAX_PATH);
|
|
#else
|
|
lstrcpy( myConnectInfo.szConnectoid, gpUserInfo->szISPName);
|
|
#endif
|
|
}
|
|
|
|
|
|
gpImnApprentice->SetConnectionInformation( &myConnectInfo );
|
|
gpImnApprentice->Save( g_pCICWExtension->m_hWizardHWND, &dwSaveErr );
|
|
|
|
if( ERR_MAIL_ACCT & dwSaveErr )
|
|
{
|
|
DEBUGMSG(TEXT("gpImnApprentice->Save returned with ERR_MAIL_ACCT!"));
|
|
}
|
|
if( ERR_NEWS_ACCT & dwSaveErr )
|
|
{
|
|
DEBUGMSG(TEXT("gpImnApprentice->Save returned with ERR_NEWS_ACCT!"));
|
|
}
|
|
if( ERR_DIRSERV_ACCT & dwSaveErr )
|
|
{
|
|
DEBUGMSG("gpImnApprentice->Save returned with ERR_DIR_SERV_ACCT!");
|
|
}
|
|
}
|
|
|
|
|
|
// If we just completed the manual path (not just mail or news) then
|
|
// set the registry key saying that we completed ICW.
|
|
if ( !(gpWizardState->dwRunFlags & RSW_APPRENTICE) )
|
|
{
|
|
RegEntry re(szRegPathICWSettings,HKEY_CURRENT_USER);
|
|
if (ERROR_SUCCESS == re.GetError())
|
|
re.SetValue(szRegValICWCompleted, (DWORD)1);
|
|
}
|
|
|
|
return TRUE;
|
|
}
|
|
|