928 lines
29 KiB
C++
928 lines
29 KiB
C++
|
//*********************************************************************
|
||
|
//* Microsoft Windows **
|
||
|
//* Copyright(c) Microsoft Corp., 1994 **
|
||
|
//*********************************************************************
|
||
|
|
||
|
//
|
||
|
// INTROUI.C - Functions for introductory Wizard pages
|
||
|
//
|
||
|
|
||
|
// HISTORY:
|
||
|
//
|
||
|
// 12/22/94 jeremys Created.
|
||
|
// 96/03/07 markdu Use global modem enum object (gpEnumModem) for
|
||
|
// all modem stuff (only need to enum once unless we add a modem)
|
||
|
// 96/03/10 markdu Moved all references to modem name into RASENTRY.
|
||
|
// 96/03/11 markdu Check new CLIENTCONFIG flags before installing
|
||
|
// RNA and TCP.
|
||
|
// 96/03/16 markdu Use ReInit member function to re-enumerate modems.
|
||
|
// 96/03/22 markdu Work around problem with fInstallMail to allow the
|
||
|
// user to decide whether to install mail.
|
||
|
// 96/03/22 markdu Always display both modem and LAN options, regardless
|
||
|
// of what hardware is present.
|
||
|
// 96/03/22 markdu Remove IP setup from LAN path.
|
||
|
// 96/03/23 markdu Replaced CLIENTINFO references with CLIENTCONFIG.
|
||
|
// 96/03/24 markdu Return error values from EnumerateModems().
|
||
|
// 96/03/25 markdu If a fatal error occurs, set gfQuitWizard.
|
||
|
// 96/04/04 markdu Added pfNeedsRestart to WarnIfServerBound
|
||
|
// 96/04/06 markdu Moved CommitConfigurationChanges call to last page.
|
||
|
// 96/05/06 markdu NASH BUG 15637 Removed unused code.
|
||
|
// 96/05/06 markdu NASH BUG 21165 Reordered page logic.
|
||
|
// 96/05/14 markdu NASH BUG 21704 Do not install TCP/IP on LAN path.
|
||
|
// 96/05/20 markdu MSN BUG 8551 Check for reboot when installing
|
||
|
// PPPMAC and TCP/IP.
|
||
|
// 96/05/25 markdu Use ICFG_ flags for lpNeedDrivers and lpInstallDrivers.
|
||
|
// 96/05/27 markdu Use lpIcfgInstallInetComponents and lpIcfgNeedInetComponents.
|
||
|
// 96/09/13 valdonb Remove welcome dialog
|
||
|
//
|
||
|
|
||
|
#include "wizard.h"
|
||
|
#include "interwiz.h"
|
||
|
#include "icwextsn.h"
|
||
|
#include "icwaprtc.h"
|
||
|
#include "imnext.h"
|
||
|
|
||
|
UINT GetModemPage(HWND hDlg);
|
||
|
VOID EnableWizard(HWND hDlg,BOOL fEnable);
|
||
|
HRESULT EnumerateModems(HWND hwndParent, ENUM_MODEM** ppEnumModem);
|
||
|
BOOL IsMoreThanOneModemInstalled(ENUM_MODEM* pEnumModem);
|
||
|
BOOL IsModemInstalled(ENUM_MODEM* pEnumModem);
|
||
|
extern ICFGINSTALLSYSCOMPONENTS lpIcfgInstallInetComponents;
|
||
|
extern ICFGNEEDSYSCOMPONENTS lpIcfgNeedInetComponents;
|
||
|
extern ICFGGETLASTINSTALLERRORTEXT lpIcfgGetLastInstallErrorText;
|
||
|
BOOL FGetSystemShutdownPrivledge();
|
||
|
BOOL g_bSkipMultiModem = FALSE;
|
||
|
int nCurrentModemSel = 0;
|
||
|
|
||
|
// from commctrl defines...
|
||
|
#define IDD_BACK 0x3023
|
||
|
#define IDD_NEXT 0x3024
|
||
|
|
||
|
|
||
|
//*******************************************************************
|
||
|
//
|
||
|
// Function GetDeviceSelectedByUser
|
||
|
//
|
||
|
// Synopsis Get the name of the RAS device that the user had
|
||
|
// already picked
|
||
|
//
|
||
|
// Arguements szKey - name of sub key
|
||
|
// szBuf - pointer to buffer
|
||
|
// dwSize - size of buffer
|
||
|
//
|
||
|
// Return TRUE - success
|
||
|
//
|
||
|
// History 10/21/96 VYung Created
|
||
|
//*******************************************************************
|
||
|
BOOL GetDeviceSelectedByUser (LPTSTR szKey, LPTSTR szBuf, DWORD dwSize)
|
||
|
{
|
||
|
BOOL bRC = FALSE;
|
||
|
HKEY hkey = NULL;
|
||
|
DWORD dwType = 0;
|
||
|
|
||
|
if (ERROR_SUCCESS == RegOpenKey(HKEY_LOCAL_MACHINE,ISIGNUP_KEY,&hkey))
|
||
|
{
|
||
|
if (ERROR_SUCCESS == RegQueryValueEx(hkey,szKey,0,&dwType,
|
||
|
(LPBYTE)szBuf,&dwSize))
|
||
|
bRC = TRUE;
|
||
|
}
|
||
|
|
||
|
if (hkey)
|
||
|
RegCloseKey(hkey);
|
||
|
return bRC;
|
||
|
}
|
||
|
|
||
|
/*******************************************************************
|
||
|
|
||
|
NAME: HowToConnectInitProc
|
||
|
|
||
|
SYNOPSIS: Called when "How to Connect" 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 HowToConnectInitProc(HWND hDlg,BOOL fFirstInit)
|
||
|
{
|
||
|
// If we were started by inetwiz.exe, there is nothing to
|
||
|
// go back to, so only show the "next" button
|
||
|
// (actually, this will only disable the back button, not hide it.)
|
||
|
if (!(gpWizardState->dwRunFlags & (RSW_NOFREE | RSW_APPRENTICE) ))
|
||
|
PropSheet_SetWizButtons(GetParent(hDlg),PSWIZB_NEXT);
|
||
|
|
||
|
if (fFirstInit)
|
||
|
{
|
||
|
// initialize radio buttons
|
||
|
CheckDlgButton(hDlg,IDC_CONNECT_BY_PHONE,
|
||
|
CONNECT_RAS == gpUserInfo->uiConnectionType);
|
||
|
CheckDlgButton(hDlg,IDC_CONNECT_BY_LAN,
|
||
|
CONNECT_LAN == gpUserInfo->uiConnectionType);
|
||
|
CheckDlgButton(hDlg,IDC_CONNECT_MANUAL,
|
||
|
CONNECT_MANUAL == gpUserInfo->uiConnectionType);
|
||
|
|
||
|
// Normandy 11970 ChrisK - we need a different title if launched from
|
||
|
// mail or news configuration
|
||
|
if ( (gpWizardState->dwRunFlags & RSW_APPRENTICE))
|
||
|
{
|
||
|
if (!g_fIsExternalWizard97)
|
||
|
{
|
||
|
TCHAR szTitle[MAX_RES_LEN+1];
|
||
|
if (LoadSz(IDS_BEGINMANUAL_ALTERNATE,szTitle,sizeof(szTitle)))
|
||
|
SetWindowText (GetDlgItem(hDlg,IDC_LBLTITLE), szTitle);
|
||
|
}
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
// if we're not here via the apprentice interface, hide the
|
||
|
// manual connect option
|
||
|
ASSERT( CONNECT_MANUAL != gpUserInfo->uiConnectionType );
|
||
|
ShowWindow( GetDlgItem(hDlg,IDC_CONNECT_MANUAL), SW_HIDE);
|
||
|
}
|
||
|
|
||
|
// load in strings for the description paragraph
|
||
|
TCHAR szWhole[ (2 * MAX_RES_LEN) + 1] = TEXT("\0");
|
||
|
TCHAR szTemp[ MAX_RES_LEN + 1] = TEXT("nothing\0");
|
||
|
LoadSz(IDS_HOWTOCONNECT_DESC1,szTemp,sizeof(szTemp));
|
||
|
lstrcat( szWhole, szTemp );
|
||
|
LoadSz(IDS_HOWTOCONNECT_DESC2,szTemp,sizeof(szTemp));
|
||
|
lstrcat( szWhole, szTemp );
|
||
|
|
||
|
SetWindowText (GetDlgItem(hDlg,IDC_DESC), szWhole);
|
||
|
|
||
|
|
||
|
}
|
||
|
|
||
|
// 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_HOWTOCONNECT;
|
||
|
|
||
|
|
||
|
return TRUE;
|
||
|
}
|
||
|
|
||
|
/*******************************************************************
|
||
|
|
||
|
NAME: HowToConnectOKProc
|
||
|
|
||
|
SYNOPSIS: Called when Next or Back btns pressed from "How to
|
||
|
Connect" 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 HowToConnectOKProc(HWND hDlg,BOOL fForward,UINT * puNextPage,
|
||
|
BOOL * pfKeepHistory)
|
||
|
{
|
||
|
ASSERT(puNextPage);
|
||
|
|
||
|
// read radio button state
|
||
|
if( IsDlgButtonChecked(hDlg, IDC_CONNECT_BY_LAN) )
|
||
|
{
|
||
|
gpUserInfo->uiConnectionType = CONNECT_LAN;
|
||
|
}
|
||
|
else if( IsDlgButtonChecked(hDlg, IDC_CONNECT_BY_PHONE) )
|
||
|
{
|
||
|
gpUserInfo->uiConnectionType = CONNECT_RAS;
|
||
|
}
|
||
|
else if( IsDlgButtonChecked(hDlg, IDC_CONNECT_MANUAL) )
|
||
|
{
|
||
|
ASSERT( gpWizardState->dwRunFlags & RSW_APPRENTICE );
|
||
|
gpUserInfo->uiConnectionType = CONNECT_MANUAL;
|
||
|
}
|
||
|
|
||
|
if (!fForward)
|
||
|
{
|
||
|
if ( !(gpWizardState->dwRunFlags & RSW_APPRENTICE) )
|
||
|
{
|
||
|
// Hack to make back work...
|
||
|
gpWizardState->uPagesCompleted = 1;
|
||
|
gfUserBackedOut = TRUE;
|
||
|
gfQuitWizard = TRUE;
|
||
|
}
|
||
|
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
if ( (gpWizardState->dwRunFlags & RSW_APPRENTICE) && !g_fIsICW)
|
||
|
{
|
||
|
if ( !(CONNECT_RAS == gpUserInfo->uiConnectionType) )
|
||
|
{
|
||
|
// 12/20/96 jmazner Normandy #12945
|
||
|
// don't go through proxy options.
|
||
|
|
||
|
// we're about to jump back to the external wizard, and we don't want
|
||
|
// this page to show up in our history list
|
||
|
*pfKeepHistory = FALSE;
|
||
|
|
||
|
*puNextPage = g_uExternUINext;
|
||
|
|
||
|
//Notify the main Wizard that this was the last page
|
||
|
ASSERT( g_pExternalIICWExtension )
|
||
|
if (g_fIsExternalWizard97)
|
||
|
g_pExternalIICWExtension->SetFirstLastPage(0, IDD_PAGE_HOWTOCONNECT97);
|
||
|
else
|
||
|
g_pExternalIICWExtension->SetFirstLastPage(0, IDD_PAGE_HOWTOCONNECT);
|
||
|
|
||
|
g_fConnectionInfoValid = TRUE;
|
||
|
|
||
|
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
//
|
||
|
// 12/20/96 jmazner Normandy #12948
|
||
|
// Install a modem if neccesary
|
||
|
//
|
||
|
// 5/15/97 jmazner Olympus
|
||
|
//DWORD dwfInstallOptions = INETCFG_INSTALLMODEM;
|
||
|
DWORD dwfInstallOptions = (INETCFG_INSTALLRNA | INETCFG_INSTALLMODEM | INETCFG_INSTALLTCP);
|
||
|
EnableWindow(GetParent(hDlg), FALSE);
|
||
|
|
||
|
//
|
||
|
// save state of fNeedReboot, becasuse
|
||
|
// we might be calling InetCofigureSystem()
|
||
|
// again, and the ReBoot flag might get reset
|
||
|
// MKarki - Fix for Bug #404
|
||
|
//
|
||
|
BOOL bSaveState = gpWizardState->fNeedReboot;
|
||
|
|
||
|
HRESULT hr = InetConfigSystem(GetParent(hDlg),dwfInstallOptions,&gpWizardState->fNeedReboot);
|
||
|
|
||
|
//
|
||
|
// we should choose to reboot -MKarki Bug #404
|
||
|
//
|
||
|
gpWizardState->fNeedReboot =
|
||
|
bSaveState || gpWizardState->fNeedReboot;
|
||
|
|
||
|
EnableWindow(GetParent(hDlg), TRUE);
|
||
|
SetForegroundWindow(GetParent(hDlg));
|
||
|
|
||
|
if (hr == ERROR_CANCELLED)
|
||
|
{
|
||
|
// Stay on this page if the user cancelled
|
||
|
gpWizardState->fNeedReboot = FALSE;
|
||
|
return FALSE;
|
||
|
}
|
||
|
else if (hr != ERROR_SUCCESS)
|
||
|
{
|
||
|
MsgBox(GetParent(hDlg),IDS_CONFIGAPIFAILED,MB_ICONEXCLAMATION,MB_OK);
|
||
|
gpWizardState->fNeedReboot = FALSE;
|
||
|
gfQuitWizard = TRUE;
|
||
|
return FALSE;
|
||
|
}
|
||
|
else if (gpWizardState->fNeedReboot)
|
||
|
{
|
||
|
//
|
||
|
// 5/27/97 jmazner Olympus #1134 and IE #32717
|
||
|
// As per email from GeorgeH and GeoffR, force user to either
|
||
|
// cancel or quit at this point.
|
||
|
//
|
||
|
if (IDYES == MsgBox(GetParent(hDlg),IDS_WANTTOREBOOT,MB_ICONQUESTION, MB_YESNO | MB_DEFBUTTON2))
|
||
|
{
|
||
|
gpWizardState->fNeedReboot = TRUE;
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
gpWizardState->fNeedReboot = FALSE;
|
||
|
}
|
||
|
gfQuitWizard = TRUE;
|
||
|
return TRUE;
|
||
|
}
|
||
|
|
||
|
//
|
||
|
// 7/16/97 jmazner Olympus #9571
|
||
|
// if the configSystem call installed a modem for the first time on
|
||
|
// the user's machine, then the TAPI information we initially read
|
||
|
// in was bogus because the user had never filled it in.
|
||
|
// Therefore re initialize the fields to make sure we have accurate info
|
||
|
//
|
||
|
InitRasEntry( gpRasEntry );
|
||
|
|
||
|
|
||
|
*puNextPage = GetModemPage(hDlg);
|
||
|
}
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
//Normandy# 4575 install TCP/IP on LAN path
|
||
|
//Normandy# 8620 Do not install TCP/IP on LAN path
|
||
|
DWORD dwfInstallOptions = 0;
|
||
|
|
||
|
if (CONNECT_RAS == gpUserInfo->uiConnectionType)
|
||
|
dwfInstallOptions |= (INETCFG_INSTALLRNA | INETCFG_INSTALLMODEM | INETCFG_INSTALLTCP);
|
||
|
else if (CONNECT_LAN == gpUserInfo->uiConnectionType)
|
||
|
dwfInstallOptions |= INETCFG_INSTALLTCP;
|
||
|
|
||
|
//
|
||
|
// Install and configure TCP/IP and RNA
|
||
|
//
|
||
|
|
||
|
//
|
||
|
// save state of fNeedReboot, becasuse
|
||
|
// we might be calling InetCofigureSystem()
|
||
|
// again, and the ReBoot flag might get reset
|
||
|
// MKarki - Fix for Bug #404
|
||
|
//
|
||
|
BOOL bSaveState = gpWizardState->fNeedReboot;
|
||
|
|
||
|
HRESULT hr = InetConfigSystem(GetParent(hDlg),dwfInstallOptions,&gpWizardState->fNeedReboot);
|
||
|
|
||
|
//
|
||
|
// we should choose to reboot -MKarki Bug #404
|
||
|
//
|
||
|
gpWizardState->fNeedReboot =
|
||
|
bSaveState || gpWizardState->fNeedReboot;
|
||
|
|
||
|
SetForegroundWindow(GetParent(hDlg));
|
||
|
|
||
|
if (hr == ERROR_CANCELLED) {
|
||
|
// Stay on this page if the user cancelled
|
||
|
gpWizardState->fNeedReboot = FALSE;
|
||
|
if (g_fIsICW)
|
||
|
{
|
||
|
g_pExternalIICWExtension->ExternalCancel( CANCEL_PROMPT );
|
||
|
}
|
||
|
return FALSE;
|
||
|
} else if (hr != ERROR_SUCCESS) {
|
||
|
MsgBox(GetParent(hDlg),IDS_CONFIGAPIFAILED,MB_ICONEXCLAMATION,MB_OK);
|
||
|
gpWizardState->fNeedReboot = FALSE;
|
||
|
//gfQuitWizard = TRUE;
|
||
|
// 2/27/97 jmazner Olympus #299
|
||
|
// don't quit, give the user a chance to choose LAN
|
||
|
gpUserInfo->uiConnectionType = CONNECT_LAN;
|
||
|
CheckDlgButton(hDlg,IDC_CONNECT_BY_PHONE,FALSE);
|
||
|
CheckDlgButton(hDlg,IDC_CONNECT_BY_LAN,TRUE);
|
||
|
EnableWindow(GetDlgItem(hDlg,IDC_CONNECT_BY_PHONE),FALSE);
|
||
|
|
||
|
|
||
|
return FALSE;
|
||
|
} else if (ERROR_SUCCESS == hr && gpWizardState->fNeedReboot && IsNT()) {
|
||
|
|
||
|
//
|
||
|
// we will let the EXE that called us POP up the dialog
|
||
|
// box, asking users to reboot or not
|
||
|
// MKarki (2/5/97) - Fix for Bug #3111
|
||
|
//
|
||
|
g_bReboot = TRUE;
|
||
|
gfQuitWizard = TRUE;
|
||
|
if (!g_fIsICW)
|
||
|
{
|
||
|
PropSheet_PressButton(GetParent(hDlg),PSBTN_CANCEL);
|
||
|
SetPropSheetResult(hDlg,-1);
|
||
|
}
|
||
|
return (FALSE);
|
||
|
}
|
||
|
|
||
|
g_bRebootAtExit = gpWizardState->fNeedReboot;
|
||
|
|
||
|
//
|
||
|
// 7/16/97 jmazner Olympus #9571
|
||
|
// if the configSystem call installed a modem for the first time on
|
||
|
// the user's machine, then the TAPI information we initially read
|
||
|
// in was bogus because the user had never filled it in.
|
||
|
// Therefore re initialize the fields to make sure we have accurate info
|
||
|
//
|
||
|
InitRasEntry( gpRasEntry );
|
||
|
|
||
|
|
||
|
|
||
|
if (dwfInstallOptions & INETCFG_INSTALLRNA)
|
||
|
{
|
||
|
if (ERROR_SUCCESS != InetStartServices())
|
||
|
{
|
||
|
|
||
|
|
||
|
//
|
||
|
// condition when
|
||
|
// 1) user deliberately removes some file
|
||
|
// 2) Did not reboot after installing RAS
|
||
|
// MKarki - (5/7/97) - Fix for Bug #4004
|
||
|
//
|
||
|
MsgBox(
|
||
|
GetParent(hDlg),
|
||
|
IDS_SERVICEDISABLED,
|
||
|
MB_ICONEXCLAMATION,MB_OK
|
||
|
);
|
||
|
|
||
|
/*********
|
||
|
//
|
||
|
// Bug #12544 - VetriV
|
||
|
// Check if user wants to exit ICW
|
||
|
//
|
||
|
if( (MsgBox(GetParent(hDlg), IDS_QUERYCANCEL,
|
||
|
MB_APPLMODAL | MB_ICONQUESTION
|
||
|
| MB_SETFOREGROUND | MB_DEFBUTTON2,
|
||
|
MB_YESNO) == IDNO))
|
||
|
{
|
||
|
goto StartService;
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
gpWizardState->fNeedReboot = FALSE;
|
||
|
gfQuitWizard = TRUE;
|
||
|
****/
|
||
|
|
||
|
// 2/27/97 jmazner Olympus #299
|
||
|
// don't quit, give the user a chance to choose LAN
|
||
|
gpUserInfo->uiConnectionType = CONNECT_LAN;
|
||
|
CheckDlgButton(hDlg,IDC_CONNECT_BY_PHONE,FALSE);
|
||
|
CheckDlgButton(hDlg,IDC_CONNECT_BY_LAN,TRUE);
|
||
|
EnableWindow(GetDlgItem(hDlg,IDC_CONNECT_BY_PHONE),FALSE);
|
||
|
return FALSE;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// jmazner 11/11/96 Normandy #11320
|
||
|
// Note: we are explicitly deferring the reboot until after the wizard
|
||
|
// has completed.
|
||
|
//if( gpWizardState->fNeedReboot )
|
||
|
//{
|
||
|
// gfQuitWizard = TRUE;
|
||
|
// return TRUE;
|
||
|
//}
|
||
|
|
||
|
if (CONNECT_LAN == gpUserInfo->uiConnectionType)
|
||
|
{
|
||
|
// Skip the use proxy page
|
||
|
*puNextPage = ORD_PAGE_SETUP_PROXY;
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
// get the next page based on number of modems.
|
||
|
*puNextPage = GetModemPage(hDlg);
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
return TRUE;
|
||
|
}
|
||
|
|
||
|
|
||
|
/*******************************************************************
|
||
|
|
||
|
NAME: ChooseModemInitProc
|
||
|
|
||
|
SYNOPSIS: Called when "Choose Modem" 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 ChooseModemInitProc(HWND hDlg,BOOL fFirstInit)
|
||
|
{
|
||
|
ProcessDBCS(hDlg, IDC_MODEM);
|
||
|
|
||
|
gpWizardState->uCurrentPage = ORD_PAGE_CHOOSEMODEM;
|
||
|
|
||
|
// fill the combobox with available modems
|
||
|
DWORD dwRet = InitModemList(GetDlgItem(hDlg,IDC_MODEM));
|
||
|
if (ERROR_SUCCESS != dwRet)
|
||
|
{
|
||
|
DisplayErrorMessage(hDlg,IDS_ERREnumModem,dwRet,
|
||
|
ERRCLS_STANDARD,MB_ICONEXCLAMATION);
|
||
|
|
||
|
// set flag to indicate that wizard should exit now
|
||
|
gfQuitWizard = TRUE;
|
||
|
|
||
|
return FALSE;
|
||
|
}
|
||
|
if (-1 == ComboBox_SetCurSel(GetDlgItem(hDlg,IDC_MODEM), nCurrentModemSel))
|
||
|
ComboBox_SetCurSel(GetDlgItem(hDlg,IDC_MODEM), 0);
|
||
|
|
||
|
return TRUE;
|
||
|
}
|
||
|
|
||
|
/*******************************************************************
|
||
|
|
||
|
NAME: ChooseModemCmdProc
|
||
|
|
||
|
SYNOPSIS: Called when modem selected on page
|
||
|
|
||
|
ENTRY: hDlg - dialog window
|
||
|
|
||
|
********************************************************************/
|
||
|
BOOL CALLBACK ChooseModemCmdProc(HWND hDlg,WPARAM wParam,LPARAM lParam)
|
||
|
{
|
||
|
return TRUE;
|
||
|
}
|
||
|
|
||
|
/*******************************************************************
|
||
|
|
||
|
NAME: ChooseModemOKProc
|
||
|
|
||
|
SYNOPSIS: Called when Next or Back btns pressed from "Choose Modem"
|
||
|
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 ChooseModemOKProc(HWND hDlg,BOOL fForward,UINT * puNextPage,
|
||
|
BOOL * pfKeepHistory)
|
||
|
{
|
||
|
if (fForward)
|
||
|
{
|
||
|
// get modem name out of combo box
|
||
|
ComboBox_GetText(GetDlgItem(hDlg,IDC_MODEM),
|
||
|
gpRasEntry->szDeviceName,ARRAYSIZE(gpRasEntry->szDeviceName));
|
||
|
NULL_TERM_TCHARS(gpRasEntry->szDeviceName);
|
||
|
ASSERT(lstrlen(gpRasEntry->szDeviceName));
|
||
|
|
||
|
// set next page to go to
|
||
|
|
||
|
// jmazner 11/11/96 Normandy #8293
|
||
|
//*puNextPage = ORD_PAGE_CONNECTION;
|
||
|
|
||
|
|
||
|
// 10/05/98 Vincent Yung
|
||
|
// Connectoid page is removed.
|
||
|
/*
|
||
|
ENUM_CONNECTOID EnumConnectoid; // class object for enum
|
||
|
// 3/21/97 jmazner Olympus #1948
|
||
|
if( EnumConnectoid.NumEntries() )
|
||
|
{
|
||
|
*puNextPage = ORD_PAGE_CONNECTION;
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
// 5/8/97 jmazner Olympus #4108
|
||
|
// move connectionName to the end
|
||
|
//*puNextPage = ORD_PAGE_CONNECTIONNAME;
|
||
|
*puNextPage = ORD_PAGE_PHONENUMBER;
|
||
|
}*/
|
||
|
|
||
|
|
||
|
*puNextPage = ORD_PAGE_PHONENUMBER;
|
||
|
}
|
||
|
|
||
|
// Store modem selection
|
||
|
nCurrentModemSel = ComboBox_GetCurSel(GetDlgItem(hDlg,IDC_MODEM));
|
||
|
// clear the modem list
|
||
|
ComboBox_ResetContent(GetDlgItem(hDlg,IDC_MODEM));
|
||
|
|
||
|
return TRUE;
|
||
|
}
|
||
|
|
||
|
|
||
|
/*******************************************************************
|
||
|
|
||
|
NAME: EnableWizard
|
||
|
|
||
|
SYNOPSIS: Enables or disables the wizard buttons and the wizard
|
||
|
page itself (so it can't receive focus)
|
||
|
|
||
|
********************************************************************/
|
||
|
VOID EnableWizard(HWND hDlg,BOOL fEnable)
|
||
|
{
|
||
|
HWND hwndWiz = GetParent(hDlg);
|
||
|
|
||
|
// disable/enable back, next, cancel and help buttons
|
||
|
EnableWindow(GetDlgItem(hwndWiz,IDD_BACK),fEnable);
|
||
|
EnableWindow(GetDlgItem(hwndWiz,IDD_NEXT),fEnable);
|
||
|
EnableWindow(GetDlgItem(hwndWiz,IDCANCEL),fEnable);
|
||
|
EnableWindow(GetDlgItem(hwndWiz,IDHELP),fEnable);
|
||
|
|
||
|
// disable/enable wizard page
|
||
|
EnableWindow(hwndWiz,fEnable);
|
||
|
|
||
|
UpdateWindow(hwndWiz);
|
||
|
}
|
||
|
|
||
|
|
||
|
|
||
|
//*******************************************************************
|
||
|
//
|
||
|
// FUNCTION: GetModemPage
|
||
|
//
|
||
|
// PURPOSE: This is only called from a few places. This same logic
|
||
|
// would have otherwise had to be included several times, this
|
||
|
// centralizes the logic. The possible pages returned are the
|
||
|
// "Need Modem" page, the "Choose Modem" page, and "Has ISP".
|
||
|
//
|
||
|
// PARAMETERS: Parent window.
|
||
|
//
|
||
|
// RETURNS: returns the ordinal of the page to display next after
|
||
|
// initial questions are asked.
|
||
|
//
|
||
|
// HISTORY:
|
||
|
// 96/03/07 markdu Created.
|
||
|
// 96/11/11 jmazner updated to skip new/existing connectoid page
|
||
|
// if no connectoids exist.
|
||
|
//
|
||
|
//*******************************************************************
|
||
|
|
||
|
UINT GetModemPage(HWND hDlg)
|
||
|
{
|
||
|
|
||
|
/*** no reason to handle NT seperately -- jmazner
|
||
|
if (TRUE == IsNT())
|
||
|
{
|
||
|
//TODO: Add call to NT enum modems
|
||
|
return ORD_PAGE_CONNECTION;
|
||
|
}
|
||
|
***/
|
||
|
|
||
|
// Enumerate the modems
|
||
|
DWORD dwRet = EnumerateModems(hDlg, &gpEnumModem);
|
||
|
if (ERROR_SUCCESS != dwRet)
|
||
|
{
|
||
|
// set flag to indicate that wizard should exit now
|
||
|
gfQuitWizard = TRUE;
|
||
|
|
||
|
return FALSE;
|
||
|
}
|
||
|
|
||
|
if (IsMoreThanOneModemInstalled(gpEnumModem))
|
||
|
{
|
||
|
// Multiple modems installed.
|
||
|
TCHAR szDeviceName[RAS_MaxDeviceName + 1] = TEXT("\0");
|
||
|
TCHAR szDeviceType[RAS_MaxDeviceType + 1] = TEXT("\0"); // modems are installed
|
||
|
|
||
|
// If we want to skip the choose modem dlg.
|
||
|
// retrieve the device info from registry.
|
||
|
if (g_bSkipMultiModem &&
|
||
|
GetDeviceSelectedByUser(DEVICENAMEKEY, szDeviceName, sizeof(szDeviceName)) &&
|
||
|
GetDeviceSelectedByUser(DEVICETYPEKEY, szDeviceType, sizeof(szDeviceType)) )
|
||
|
{
|
||
|
lstrcpy(gpRasEntry->szDeviceName, szDeviceName);
|
||
|
lstrcpy(gpRasEntry->szDeviceType, szDeviceType);
|
||
|
return ORD_PAGE_PHONENUMBER;
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
return ORD_PAGE_CHOOSEMODEM;
|
||
|
}
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
// One modem installed.
|
||
|
// Note: this option will also be selected if modems could
|
||
|
// not be enumerated due to an error.
|
||
|
// connecting over modem and all drivers/files are in place, go
|
||
|
// to "existing ISP" page
|
||
|
// return ORD_PAGE_CONNECTION;
|
||
|
|
||
|
ENUM_CONNECTOID EnumConnectoid; // class object for enum
|
||
|
|
||
|
if( EnumConnectoid.NumEntries() )
|
||
|
{
|
||
|
return ORD_PAGE_CONNECTION;
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
// 5/8/97 jmazner Olympus #4108
|
||
|
// move connectionName to the end
|
||
|
//return ORD_PAGE_CONNECTIONNAME;
|
||
|
|
||
|
return ORD_PAGE_PHONENUMBER;
|
||
|
}
|
||
|
|
||
|
}
|
||
|
|
||
|
}
|
||
|
|
||
|
|
||
|
//*******************************************************************
|
||
|
//
|
||
|
// FUNCTION: EnumerateModems
|
||
|
//
|
||
|
// PURPOSE: This function assumes that RNA is installed,
|
||
|
// then it uses RNA to enumerate the devices.
|
||
|
// If an enum object exists, it is replaced.
|
||
|
//
|
||
|
// PARAMETERS: Pointer to current enum object, if one exists.
|
||
|
// In any case, must be a valid pointer.
|
||
|
// Parent window handle for displaying error message.
|
||
|
//
|
||
|
// RETURNS: HRESULT code (ERROR_SUCCESS if no error occurred).
|
||
|
//
|
||
|
// HISTORY:
|
||
|
// 96/03/07 markdu Created.
|
||
|
//
|
||
|
//*******************************************************************
|
||
|
|
||
|
HRESULT EnumerateModems(HWND hwndParent, ENUM_MODEM** ppEnumModem)
|
||
|
{
|
||
|
DWORD dwRet;
|
||
|
|
||
|
// Should only get here if we want to connect by modem/ISDN
|
||
|
ASSERT(CONNECT_RAS == gpUserInfo->uiConnectionType)
|
||
|
|
||
|
// Load RNA if not already loaded
|
||
|
dwRet = EnsureRNALoaded();
|
||
|
if (ERROR_SUCCESS != dwRet)
|
||
|
{
|
||
|
return dwRet;
|
||
|
}
|
||
|
|
||
|
ENUM_MODEM* pEnumModem = *ppEnumModem;
|
||
|
|
||
|
// Enumerate the modems.
|
||
|
if (pEnumModem)
|
||
|
{
|
||
|
// Re-enumerate the modems to be sure we have the most recent changes
|
||
|
dwRet = pEnumModem->ReInit();
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
// The object does not exist, so create it.
|
||
|
pEnumModem = new ENUM_MODEM;
|
||
|
if (pEnumModem)
|
||
|
{
|
||
|
dwRet = pEnumModem->GetError();
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
dwRet = ERROR_NOT_ENOUGH_MEMORY;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// Check for errors
|
||
|
if (ERROR_SUCCESS != dwRet)
|
||
|
{
|
||
|
DisplayErrorMessage(hwndParent,IDS_ERREnumModem,dwRet,
|
||
|
ERRCLS_STANDARD,MB_ICONEXCLAMATION);
|
||
|
|
||
|
// Clean up
|
||
|
if (pEnumModem)
|
||
|
{
|
||
|
delete pEnumModem;
|
||
|
}
|
||
|
pEnumModem = NULL;
|
||
|
}
|
||
|
|
||
|
*ppEnumModem = pEnumModem;
|
||
|
return dwRet;
|
||
|
}
|
||
|
|
||
|
|
||
|
//*******************************************************************
|
||
|
//
|
||
|
// FUNCTION: IsModemInstalled
|
||
|
//
|
||
|
// PURPOSE: This function validates the ENUM_MODEM object, then
|
||
|
// gets the modem count.
|
||
|
//
|
||
|
// PARAMETERS: Modem enum object to use for check.
|
||
|
//
|
||
|
// RETURNS: This function returns TRUE if there is at least one
|
||
|
// modem installed.
|
||
|
//
|
||
|
// HISTORY:
|
||
|
// 96/03/07 markdu Created.
|
||
|
//
|
||
|
//*******************************************************************
|
||
|
|
||
|
BOOL IsModemInstalled(ENUM_MODEM* pEnumModem)
|
||
|
{
|
||
|
if (TRUE == IsNT())
|
||
|
{
|
||
|
BOOL bNeedModem = FALSE;
|
||
|
DWORD dwRet;
|
||
|
|
||
|
if (NULL == lpIcfgNeedModem)
|
||
|
return FALSE;
|
||
|
|
||
|
dwRet = (*lpIcfgNeedModem)(0, &bNeedModem);
|
||
|
if (ERROR_SUCCESS == dwRet)
|
||
|
return !bNeedModem;
|
||
|
else
|
||
|
return FALSE;
|
||
|
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
if (pEnumModem && pEnumModem->GetNumDevices() > 0)
|
||
|
{
|
||
|
return TRUE;
|
||
|
}
|
||
|
|
||
|
return FALSE;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
|
||
|
//*******************************************************************
|
||
|
//
|
||
|
// FUNCTION: IsMoreThanOneModemInstalled
|
||
|
//
|
||
|
// PURPOSE: This function validates the ENUM_MODEM object, then
|
||
|
// gets the modem count.
|
||
|
//
|
||
|
// PARAMETERS: Modem enum object to use for check.
|
||
|
//
|
||
|
// RETURNS: This function returns TRUE if there is more than one
|
||
|
// modem installed.
|
||
|
//
|
||
|
// HISTORY:
|
||
|
// 96/03/07 markdu Created.
|
||
|
//
|
||
|
//*******************************************************************
|
||
|
|
||
|
BOOL IsMoreThanOneModemInstalled(ENUM_MODEM* pEnumModem)
|
||
|
{
|
||
|
if (IsNT4SP3Lower())
|
||
|
{
|
||
|
// TODO: DO NT thing here
|
||
|
return FALSE;
|
||
|
}
|
||
|
|
||
|
if (pEnumModem && pEnumModem->GetNumDevices() > 1)
|
||
|
{
|
||
|
return TRUE;
|
||
|
}
|
||
|
|
||
|
return FALSE;
|
||
|
}
|
||
|
|
||
|
|
||
|
//+----------------------------------------------------------------------------
|
||
|
//
|
||
|
// Function: FGetSystemShutdownPrivledge
|
||
|
//
|
||
|
// Synopsis: For windows NT the process must explicitly ask for permission
|
||
|
// to reboot the system.
|
||
|
//
|
||
|
// Arguements: none
|
||
|
//
|
||
|
// Return: TRUE - privledges granted
|
||
|
// FALSE - DENIED
|
||
|
//
|
||
|
// History: 8/14/96 ChrisK Created
|
||
|
//
|
||
|
// Note: BUGBUG for Win95 we are going to have to softlink to these
|
||
|
// entry points. Otherwise the app won't even load.
|
||
|
// Also, this code was originally lifted out of MSDN July96
|
||
|
// "Shutting down the system"
|
||
|
//-----------------------------------------------------------------------------
|
||
|
BOOL FGetSystemShutdownPrivledge()
|
||
|
{
|
||
|
HANDLE hToken = NULL;
|
||
|
TOKEN_PRIVILEGES tkp;
|
||
|
|
||
|
BOOL bRC = FALSE;
|
||
|
|
||
|
if (IsNT())
|
||
|
{
|
||
|
//
|
||
|
// Get the current process token handle
|
||
|
// so we can get shutdown privilege.
|
||
|
//
|
||
|
|
||
|
if (!OpenProcessToken(GetCurrentProcess(),
|
||
|
TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken))
|
||
|
goto FGetSystemShutdownPrivledgeExit;
|
||
|
|
||
|
//
|
||
|
// Get the LUID for shutdown privilege.
|
||
|
//
|
||
|
|
||
|
ZeroMemory(&tkp,sizeof(tkp));
|
||
|
LookupPrivilegeValue(NULL, SE_SHUTDOWN_NAME,
|
||
|
&tkp.Privileges[0].Luid);
|
||
|
|
||
|
tkp.PrivilegeCount = 1; /* one privilege to set */
|
||
|
tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
|
||
|
|
||
|
//
|
||
|
// Get shutdown privilege for this process.
|
||
|
//
|
||
|
|
||
|
AdjustTokenPrivileges(hToken, FALSE, &tkp, 0,
|
||
|
(PTOKEN_PRIVILEGES) NULL, 0);
|
||
|
|
||
|
if (ERROR_SUCCESS == GetLastError())
|
||
|
bRC = TRUE;
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
bRC = TRUE;
|
||
|
}
|
||
|
|
||
|
FGetSystemShutdownPrivledgeExit:
|
||
|
if (hToken) CloseHandle(hToken);
|
||
|
return bRC;
|
||
|
}
|