//********************************************************************* //* 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; }