|
|
#include "stdafx.h"
#include <ole2.h>
#include "log.h"
#include <winnetwk.h>
extern int g_GlobalDebugLevelFlag; extern int g_GlobalDebugLevelFlag_WasSetByUnattendFile; extern int g_CheckIfMetabaseValueWasWritten; extern MyLogFile g_MyLogFile;
void Check_For_DebugServiceFlag(void) { INFCONTEXT Context; TSTR strSectionName( MAX_PATH ); TSTR strEntry( MAX_PATH );
// Do this only if unattended install
if (!g_pTheApp->m_fUnattended) { return; }
// The section name to look for in the unattended file
if ( !strSectionName.Copy( UNATTEND_FILE_SECTION ) || !strEntry.Copy( _T("") ) ) { return; }
//
// Look for our special setting
//
if ( SetupFindFirstLine(g_pTheApp->m_hUnattendFile, strSectionName.QueryStr(), _T("DebugService"), &Context) ) { SetupGetStringField(&Context, 1, strEntry.QueryStr(), strEntry.QuerySize(), NULL); if (0 == _tcsicmp(strEntry.QueryStr(), _T("1")) || 0 == _tcsicmp(strEntry.QueryStr(), _T("true")) ) { SetupSetStringId_Wrapper(g_pTheApp->m_hInfHandle, 34101, strEntry.QueryStr()); } } return; }
void Check_For_DebugLevel(void) { INFCONTEXT Context; TSTR strSectionName( MAX_PATH ); TSTR strEntry( MAX_PATH );
// Do this only if unattended install
if (!g_pTheApp->m_fUnattended) { return; }
// The section name to look for in the unattended file
if ( !strSectionName.Copy( UNATTEND_FILE_SECTION ) || !strEntry.Copy( _T("") ) ) { return; }
//
// Look for our special setting
//
if ( SetupFindFirstLine(g_pTheApp->m_hUnattendFile, strSectionName.QueryStr(), _T("DebugLevel"), &Context) ) { SetupGetStringField(&Context, 1, strEntry.QueryStr(), strEntry.QuerySize(), NULL);
if (IsValidNumber( strEntry.QueryStr() )) { g_GlobalDebugLevelFlag = _ttoi( strEntry.QueryStr() ); g_GlobalDebugLevelFlag_WasSetByUnattendFile = TRUE;
iisDebugOut((LOG_TYPE_PROGRAM_FLOW, _T("DebugLevel=%d."),g_GlobalDebugLevelFlag)); }
if (g_GlobalDebugLevelFlag >= LOG_TYPE_TRACE_WIN32_API ) { g_CheckIfMetabaseValueWasWritten = TRUE; } }
return; }
void Check_Custom_IIS_INF(void) { INFCONTEXT Context; TSTR strSectionName( MAX_PATH ); TSTR_PATH strFullPath( MAX_PATH );
// Do this only if unattended install
if (!g_pTheApp->m_fUnattended) { return; }
// The section name to look for in the unattended file
if ( !strSectionName.Copy( UNATTEND_FILE_SECTION ) ) { return; }
//
// Look for our special setting
//
if ( SetupFindFirstLine(g_pTheApp->m_hUnattendFile, strSectionName.QueryStr(), _T("AlternateIISINF"), &Context) && SetupGetStringField(&Context, 1, strFullPath.QueryStr(), strFullPath.QuerySize(), NULL) && strFullPath.ExpandEnvironmentVariables() ) { if (!IsFileExist( strFullPath.QueryStr() )) { iisDebugOut((LOG_TYPE_WARN, _T("Check_Custom_IIS_INF:AlternateIISINF=%s.Not Valid.ignoring unattend value. WARNING.\n"), strFullPath.QueryStr() )); return; }
g_pTheApp->m_hInfHandleAlternate = SetupOpenInfFile( strFullPath.QueryStr(), NULL, INF_STYLE_WIN4, NULL);
if ( !g_pTheApp->m_hInfHandleAlternate || ( g_pTheApp->m_hInfHandleAlternate == INVALID_HANDLE_VALUE ) ) { iisDebugOut((LOG_TYPE_WARN, _T("Check_Custom_IIS_INF: SetupOpenInfFile failed on file: %s.\n"), strFullPath.QueryStr() )); return; }
iisDebugOut((LOG_TYPE_PROGRAM_FLOW, _T("Check_Custom_IIS_INF:AlternateIISINF=%s\n"), strFullPath.QueryStr() )); } }
void Check_Custom_WWW_or_FTP_Path(void) { INFCONTEXT Context; TSTR strSectionName( MAX_PATH ); TSTR_PATH strPath( MAX_PATH );
// Do this only if unattended install
if (!g_pTheApp->m_fUnattended) { return; }
//iisDebugOut((LOG_TYPE_TRACE, _T("Check_Custom_WWW_or_FTP_Path:start\n")));
// The section name to look for in the unattended file
if ( !strSectionName.Copy( UNATTEND_FILE_SECTION ) ) { return; }
//
// FTP
//
if ( SetupFindFirstLine_Wrapped(g_pTheApp->m_hUnattendFile, strSectionName.QueryStr(), _T("PathFTPRoot"), &Context) && SetupGetStringField(&Context, 1, strPath.QueryStr(), strPath.QuerySize(), NULL) && strPath.ExpandEnvironmentVariables() ) { if (IsValidDirectoryName( strPath.QueryStr() )) { iisDebugOut((LOG_TYPE_TRACE, _T("Check_Custom_WWW_or_FTP_Path:Unattendfilepath:PathFTPRoot=%s\n"), strPath.QueryStr() )); CustomFTPRoot( strPath.QueryStr() ); g_pTheApp->dwUnattendConfig |= USER_SPECIFIED_INFO_PATH_FTP; } else { iisDebugOut((LOG_TYPE_WARN, _T("Check_Custom_WWW_or_FTP_Path:Unattendfilepath:PathFTPRoot=%s.Not Valid.ignoring unattend value. WARNING.\n"), strPath.QueryStr() )); } }
//
// WWW
//
if ( SetupFindFirstLine_Wrapped(g_pTheApp->m_hUnattendFile, strSectionName.QueryStr(), _T("PathWWWRoot"), &Context) && SetupGetStringField(&Context, 1, strPath.QueryStr(), strPath.QuerySize(), NULL) && strPath.ExpandEnvironmentVariables() ) { if (IsValidDirectoryName( strPath.QueryStr() )) { iisDebugOut((LOG_TYPE_TRACE, _T("Check_Custom_WWW_or_FTP_Path:Unattendfilepath:PathFTPRoot=%s\n"), strPath.QueryStr() )); CustomWWWRoot( strPath.QueryStr() ); g_pTheApp->dwUnattendConfig |= USER_SPECIFIED_INFO_PATH_FTP; } else { iisDebugOut((LOG_TYPE_WARN, _T("Check_Custom_WWW_or_FTP_Path:Unattendfilepath:PathFTPRoot=%s.Not Valid.ignoring unattend value. WARNING.\n"), strPath.QueryStr() )); } }
//iisDebugOut((LOG_TYPE_TRACE, _T("Check_Custom_WWW_or_FTP_Path:end\n")));
return; }
CInitApp::CInitApp() { m_err = 0; m_hInfHandle = NULL; m_hInfHandleAlternate = NULL; m_bAllowMessageBoxPopups = TRUE; m_bThereWereErrorsChkLogfile = FALSE; m_bThereWereErrorsFromMTS = FALSE; m_bWin95Migration = FALSE;
m_bIISAdminWasDisabled = FALSE;
// Product name and application name
m_csAppName = _T(""); m_csIISGroupName = _T("");
// account + passwd for anonymous user
m_csGuestName = _T(""); m_csGuestPassword = _T(""); m_csWAMAccountName = _T(""); m_csWAMAccountPassword = _T(""); m_csWWWAnonyName = _T(""); m_csWWWAnonyPassword = _T(""); m_csFTPAnonyName = _T(""); m_csFTPAnonyPassword = _T("");
dwUnattendConfig = 0;
m_csWAMAccountName_Unattend = _T(""); m_csWAMAccountPassword_Unattend = _T(""); m_csWWWAnonyName_Unattend = _T(""); m_csWWWAnonyPassword_Unattend = _T(""); m_csFTPAnonyName_Unattend = _T(""); m_csFTPAnonyPassword_Unattend = _T("");
m_csWAMAccountName_Remove = _T(""); m_csWWWAnonyName_Remove = _T(""); m_csFTPAnonyName_Remove = _T("");
// machine status
m_csMachineName = _T(""); m_csUsersDomain = _T(""); m_csUsersAccount = _T("");
m_fUninstallMapList_Dirty = FALSE;
m_csWinDir = _T(""); m_csSysDir = _T(""); m_csSysDrive = _T("");
m_csPathSource = _T(""); m_csPathOldInetsrv = _T(""); // the primary destination used by previous iis/pws products
m_csPathInetsrv = _T(""); // the primary destination defaults to m_csSysDir\inetsrv
m_csPathInetpub = _T(""); m_csPathFTPRoot = _T(""); m_csPathWWWRoot = _T(""); m_csPathWebPub = _T(""); m_csPathProgramFiles = _T(""); m_csPathIISSamples = _T(""); m_csPathScripts = _T(""); m_csPathASPSamp = _T(""); m_csPathAdvWorks = _T(""); m_csPathIASDocs = _T(""); m_csPathOldPWSFiles = _T(""); m_csPathOldPWSSystemFiles = _T("");
m_dwOSServicePack = 0; m_eOS = OS_OTHERS; // OS_W95, OS_NT, OS_OTHERS
m_fNT5 = FALSE; m_fW95 = FALSE; // TRUE if Win95 (build xxx) or greater
m_eNTOSType = OT_NT_UNKNOWN; // OT_PDC, OT_SAM, OT_BDC, OT_NTS, OT_NTW
m_csPlatform = _T("");
m_fTCPIP = FALSE; // TRUE if TCP/IP is installed
m_eUpgradeType = UT_NONE; // UT_NONE, UT_10, UT_20, etc.
m_bUpgradeTypeHasMetabaseFlag = FALSE; m_eInstallMode = IM_FRESH; // IM_FRESH, IM_MAINTENANCE, IM_UPGRADE
m_dwSetupMode = SETUPMODE_CUSTOM; m_bRefreshSettings = FALSE; m_bPleaseDoNotInstallByDefault = FALSE;
m_fNTOperationFlags=0; m_fNTGuiMode=0; m_fNtWorkstation=0; m_fInvokedByNT = 0;
m_fUnattended = FALSE; m_csUnattendFile = _T(""); m_hUnattendFile = NULL;
m_fEULA = FALSE;
// TRUE if m_csPathOldInetsrv != m_csPathInetsrv, which means,
// we need to migrate the old inetsrv to the new one that is system32\inetsrv.
m_fMoveInetsrv = FALSE;
m_csPathSrcDir = _T(""); m_csMissingFile = _T(""); m_csMissingFilePath = _T(""); m_fWebDownload = FALSE; }
CInitApp::~CInitApp() { }
// function: IsUpgrade
//
// Return whether this is an upgrade or not
//
BOOL CInitApp::IsUpgrade() { return ( m_eUpgradeType != UT_NONE ); }
// function: GetUpgradeVersion
//
// Return the version that we are upgrading from
//
DWORD CInitApp::GetUpgradeVersion() { DWORD dwVer = 0;
if ( !IsUpgrade() ) { // This is not an upgrade, so return 0
return 0; }
switch ( m_eUpgradeType ) { case UT_351: case UT_10_W95: case UT_10: return 1; break; case UT_20: dwVer = 2; break; case UT_30: dwVer = 3; break; case UT_40: dwVer = 4; break; case UT_50: case UT_51: dwVer = 5; break; case UT_60: dwVer = 6; break; case UT_NONE: default: dwVer = 0; }
return dwVer; }
// The one and only CInitApp object <Global variable>
// --------------------------------------------------
BOOL CInitApp::GetMachineName() { TCHAR buf[ CNLEN + 10 ]; DWORD dwLen = CNLEN + 10;
m_csMachineName = _T("");
// Get computername
if ( GetComputerName( buf, &dwLen )) { if ( buf[0] != _T('\\') ) { m_csMachineName = _T("\\"); m_csMachineName += _T("\\"); } m_csMachineName += buf; } else { m_err = IDS_CANNOT_GET_MACHINE_NAME; }
return ( !(m_csMachineName.IsEmpty()) ); }
// Return TRUE, if NT or Win95
// --------------------------------------------------
BOOL CInitApp::GetOS() { OSVERSIONINFO VerInfo; VerInfo.dwOSVersionInfoSize = sizeof( OSVERSIONINFO ); GetVersionEx( &VerInfo );
switch (VerInfo.dwPlatformId) { case VER_PLATFORM_WIN32_NT: m_eOS = OS_NT; break; case VER_PLATFORM_WIN32_WINDOWS: m_eOS = OS_W95; break; default: m_eOS = OS_OTHERS; break; }
if ( m_eOS == OS_OTHERS ) {m_err = IDS_OS_NOT_SUPPORT;} return (m_eOS != OS_OTHERS); }
// Support NT 4.0 (SP3) or greater
// --------------------------------------------------
BOOL CInitApp::GetOSVersion() /*++
Routine Description:
This function detects OS version. NT5 or greater is required to run this setup.
Arguments:
None
Return Value:
BOOL return FALSE, if we fails to detect the OS version, or it is a NT version which is smaller than v5.0
--*/ { BOOL fReturn = FALSE;
if ( m_eOS == OS_NT ) { OSVERSIONINFO vInfo;
vInfo.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);
if ( GetVersionEx(&vInfo) ) { // NT5 or greater is required.
if ( vInfo.dwMajorVersion < 5 ) { m_err = IDS_NT5_NEEDED; return FALSE; }
// Start allowing NT 6 for Longhorn builds
if ( ( vInfo.dwMajorVersion == 5 ) || ( vInfo.dwMajorVersion == 6 ) ) { m_fNT5 = TRUE; fReturn = TRUE; } } }
// this line may be used for win98
if (m_eOS == OS_W95) { fReturn = TRUE; }
if ( !fReturn ) { m_err = IDS_OS_VERSION_NOT_SUPPORTED; }
return (fReturn); }
// find out it's a NTS, PDC, BDC, NTW, SAM(PDC)
// --------------------------------------------------
BOOL CInitApp::GetOSType() { BOOL fReturn = TRUE;
if ( m_eOS == OS_NT ) { // If we are in NT guimode setup
// then the registry key stuff is not yet setup
// use the passed in ocmanage.dll stuff to determine
// what we are installing upon.
if (g_pTheApp->m_fNTGuiMode) { if (g_pTheApp->m_fNtWorkstation) {m_eNTOSType = OT_NTW;} else {m_eNTOSType = OT_NTS;} } else {
m_eNTOSType = OT_NTS; // default to stand-alone NTS
CRegKey regProductPath( HKEY_LOCAL_MACHINE, REG_PRODUCTOPTIONS, KEY_READ); if ( (HKEY)regProductPath ) { CString strProductType; LONG lReturnedErrCode = regProductPath.QueryValue( _T("ProductType"), strProductType ); if (lReturnedErrCode == ERROR_SUCCESS) { strProductType.MakeUpper();
// ToDo: Sam ?
if (strProductType == _T("WINNT")) { m_eNTOSType = OT_NTW; } else if (strProductType == _T("SERVERNT")) { m_eNTOSType = OT_NTS; } else if (strProductType == _T("LANMANNT")) { m_eNTOSType = OT_PDC_OR_BDC; } else { iisDebugOutSafeParams((LOG_TYPE_ERROR, _T("ProductType=%1!s! (UnKnown). FAILER to detect ProductType\n"), strProductType)); fReturn = FALSE; } } else { // Shoot, we can't get the registry key,
// let's try using the ocmanage.dll passed in stuff.
if (g_pTheApp->m_fNTGuiMode) { if (g_pTheApp->m_fNtWorkstation) {m_eNTOSType = OT_NTW;} else {m_eNTOSType = OT_NTS;} } else { GetErrorMsg(lReturnedErrCode, REG_PRODUCTOPTIONS); m_eNTOSType = OT_NTS; // default to stand-alone NTS
} } } else { // Shoot, we can't get the registry key,
// let's try using the ocmanage.dll passed in stuff.
if (g_pTheApp->m_fNTGuiMode) { if (g_pTheApp->m_fNtWorkstation) {m_eNTOSType = OT_NTW;} else {m_eNTOSType = OT_NTS;} } else { GetErrorMsg(ERROR_CANTOPEN, REG_PRODUCTOPTIONS); } } } }
if ( !fReturn ) m_err = IDS_CANNOT_DETECT_OS_TYPE;
return(fReturn); }
// Get WinDir and SysDir of the machine
// WinDir = C:\winnt SysDir = C:\Winnt\system32
// --------------------------------------------------
BOOL CInitApp::GetSysDirs() { BOOL fReturn = TRUE; TCHAR buf[_MAX_PATH];
m_csWinDir = _T(""); m_csSysDir = _T("");
if ( !GetWindowsDirectory( buf, _MAX_PATH ) ) { return FALSE; } m_csWinDir = buf;
if ( !GetSystemDirectory( buf, _MAX_PATH ) ) { return FALSE; }
m_csSysDir = buf;
if ( _tcslen( buf ) <= 2 ) { return FALSE; }
buf[2] = _T('\0'); // now buf contains the system drive letter
m_csSysDrive = buf;
return fReturn; }
BOOL CInitApp::IsTCPIPInstalled() /*++
Routine Description:
This function detects whether TCP/IP is installed, and set m_fTCPIP appropriately.
Arguments:
None
Return Value:
BOOL set m_fTCPIP appropriately, and always return TRUE here. m_fTCPIP will be used later.
--*/ { // NT 5.0 STUFF
m_fTCPIP = TCPIP_Check_Temp_Hack();
return TRUE; }
BOOL CInitApp::SetInstallMode() { BOOL fReturn = TRUE; int iTempInstallFreshNT = TRUE; m_eInstallMode = IM_FRESH; m_eUpgradeType = UT_NONE; m_bUpgradeTypeHasMetabaseFlag = FALSE;
// -----------------------------------
// Get the install mode from NT setup (g_pTheApp->m_fNTUpgrade_Mode)
// Can either be:
// 1. SETUPMODE_FRESH. user clicked on fresh option and wants to install NT5 fresh
// a. install iis fresh. do not attempt to upgrade the old iis stuff.
// 2. SETUPMODE_UPGRADE. user clicked on upgrade option and wants to upgrade to NT5
// a. upgrade any iis installations
// b. if no old iis detected, then do not install iis
// 3. SETUPMODE_MAINTENANCE. user is running setup from the control panel add/remove.
// -----------------------------------
if (!m_fInvokedByNT) { // if we are not guimode or in add/remove
// then we must be running standalone.
// if we are running standalone, then everything is
// either fresh or maintenance.
m_eInstallMode = IM_FRESH; m_eUpgradeType = UT_NONE; if (TRUE == AreWeCurrentlyInstalled()) { m_eInstallMode = IM_MAINTENANCE; m_eUpgradeType = UT_NONE; m_bUpgradeTypeHasMetabaseFlag = TRUE; } else { CRegKey regINetStp( HKEY_LOCAL_MACHINE, REG_INETSTP, KEY_READ); if ((HKEY) regINetStp) { // This must be an upgrade....
if (SetUpgradeType() == TRUE) { iisDebugOut((LOG_TYPE_TRACE, _T("SetInstallMode=SETUPMODE_UPGRADE.Upgrading.\n"))); } else { iisDebugOut((LOG_TYPE_TRACE, _T("SetInstallMode=SETUPMODE_UPGRADE.NothingToUpgrade.\n"))); } } }
goto SetInstallMode_Exit; }
// --------------------------------
// Check if we are in the ADD/REMOVE mode...
// --------------------------------
if (g_pTheApp->m_fNTOperationFlags & SETUPOP_STANDALONE) { //
// We are in add remove...
//
iisDebugOut((LOG_TYPE_TRACE, _T("SetInstallMode=IM_MAINTENANCE\n"))); m_eInstallMode = IM_MAINTENANCE; m_eUpgradeType = UT_NONE; m_bUpgradeTypeHasMetabaseFlag = FALSE; goto SetInstallMode_Exit; }
// --------------------------------
//
// FRESH IIS install
//
// if we are not in NT upgrade
// then set everything to do a fresh!
//
// --------------------------------
iTempInstallFreshNT = TRUE; if (g_pTheApp->m_fNTOperationFlags & SETUPOP_WIN31UPGRADE){iTempInstallFreshNT = FALSE;} if (g_pTheApp->m_fNTOperationFlags & SETUPOP_WIN95UPGRADE){iTempInstallFreshNT = FALSE;} if (g_pTheApp->m_fNTOperationFlags & SETUPOP_NTUPGRADE){iTempInstallFreshNT = FALSE;} if (iTempInstallFreshNT) { iisDebugOut((LOG_TYPE_TRACE, _T("SetInstallMode=IM_FRESH\n"))); m_eInstallMode = IM_FRESH; m_eUpgradeType = UT_NONE; m_bUpgradeTypeHasMetabaseFlag = FALSE; goto SetInstallMode_Exit; } // --------------------------------
//
// UPGRADE iis install
//
// if we get here then the user checked the "upgrade" button and
// is trying to upgrade from an earlier WIN95/NT351/NT4/NT5 installation.
//
// --------------------------------
//
// Set Upgrade ONLY if there are iis components to upgrade!
// do not install if there is nothing to upgrade
ProcessSection(g_pTheApp->m_hInfHandle, _T("Set_Upgrade_Type_chk"));
// if we processed the upgrade section from the inf and
// we are still in a fresh install, then call this other
// function to make sure we catch known iis upgrade types.
if (g_pTheApp->m_eUpgradeType == UT_NONE) {SetUpgradeType();}
SetInstallMode_Exit: if (m_fInvokedByNT){DefineSetupModeOnNT();} return fReturn; }
void CInitApp::DefineSetupModeOnNT() /*++
Routine Description:
This function defines IIS setup mode when invoked by NT5.
NOTE: Since IIS setup does not run as a standalone program on NT5, user won't see buttons like Minimum, Typical, Custom, AddRemove, Reinstall, RemoveAll, UpgradeOnly, UpgradePlus any more. Hence, we have a totally different way to decide what mode the setup is running in.
Arguments:
none
Return Value:
set m_dwSetupMode appropriately.
--*/ { if (m_fInvokedByNT) { switch (m_eInstallMode) { case IM_FRESH: m_dwSetupMode = SETUPMODE_CUSTOM; break; case IM_MAINTENANCE: if (m_fNTGuiMode) { // invoked in NT GUI mode setup
// treat minor os upgrade like a reinstall
m_dwSetupMode = SETUPMODE_REINSTALL; m_bRefreshSettings = TRUE; } else { // invoked by ControlPanel\AddRemoveApplet
m_dwSetupMode = SETUPMODE_ADDREMOVE; } break; case IM_UPGRADE: m_dwSetupMode = SETUPMODE_ADDEXTRACOMPS; break; default: break; } }
return; }
void GetVRootValue( CString strRegPath, CString csName, LPTSTR szRegName, CString &csRegValue) { CString csRegName;
strRegPath +=_T("\\Parameters\\Virtual Roots"); CRegKey regVR( HKEY_LOCAL_MACHINE, strRegPath, KEY_READ);
csRegName = szRegName;
if ( (HKEY) regVR ) { regVR.m_iDisplayWarnings = FALSE;
csRegName = csName; if ( regVR.QueryValue( csName, csRegValue ) != ERROR_SUCCESS ) { csName += _T(","); if ( regVR.QueryValue(csName, csRegValue) != ERROR_SUCCESS ) { // well, we need to scan all the keys
CRegValueIter regEnum( regVR ); CString strName; DWORD dwType; int nLen = csName.GetLength();
while ( regEnum.Next( &strName, &dwType ) == ERROR_SUCCESS ) { CString strLeft = strName.Left(nLen); if ( strLeft.CompareNoCase(csName) == 0) { csRegName = strName; regVR.QueryValue( strName, csRegValue ); break; } } } } // remove the ending ",,something"
int cPos = csRegValue.Find(_T(',')); if ( cPos != (-1)) { csRegValue = csRegValue.Left( cPos ); } } }
void CInitApp::DeriveInetpubFromWWWRoot(void) { TSTR strParentDir( MAX_PATH );
if ( !strParentDir.Resize( _tcslen( m_csPathWWWRoot.GetBuffer(0) ) ) ) { // String is too long to deal with
return; }
// Try to figure out InetPub Root
// ------------------------------
// Get inetpub dir from wwwroot
// take the m_csPathWWWRoot and back off one dir to find it.
InetGetFilePath(m_csPathWWWRoot, strParentDir.QueryStr() ); if ((IsFileExist( strParentDir.QueryStr() ))) { m_csPathInetpub = strParentDir.QueryStr(); iisDebugOutSafeParams((LOG_TYPE_TRACE, _T("Old InetPub='%1!s!'. Exists. so we'll use it.\n"), m_csPathInetpub)); } else { iisDebugOutSafeParams((LOG_TYPE_WARN, _T("Old InetPub='%1!s!'. Does not exist. we'll use the default. WARNING.\n"), strParentDir.QueryStr())); }
return; }
void CInitApp::GetOldInetSrvDir(void) { CRegKey regINetStp( HKEY_LOCAL_MACHINE, REG_INETSTP, KEY_READ);
// Get old InetSrv dir
// -------------------
m_csPathOldInetsrv = m_csPathInetsrv; if ((HKEY)regINetStp) { // Get the old inetsrv dir, and check if it's different
regINetStp.m_iDisplayWarnings = FALSE; regINetStp.QueryValue( _T("InstallPath"), m_csPathOldInetsrv); if (-1 != m_csPathOldInetsrv.Find(_T('%')) ) { // there is a '%' in the string
TSTR_PATH strTempDir;
if ( !strTempDir.Copy( m_csPathOldInetsrv.GetBuffer(0) ) || !strTempDir.ExpandEnvironmentVariables() ) { return; }
m_csPathOldInetsrv = strTempDir.QueryStr(); } m_fMoveInetsrv = (m_csPathOldInetsrv.CompareNoCase(m_csPathInetsrv) != 0); }
return; }
void CInitApp::GetOldWWWRootDir(void) { CString csOldWWWRoot; //
// Try to get it from the old iis2,3,4 setup location if it's there.
//
CRegKey regINetStp( HKEY_LOCAL_MACHINE, REG_INETSTP, KEY_READ); if ((HKEY) regINetStp) { //
// get the old wwwroot from the registry if there.
//
regINetStp.m_iDisplayWarnings = FALSE; regINetStp.QueryValue(_T("PathWWWRoot"), csOldWWWRoot); if (-1 != csOldWWWRoot.Find(_T('%')) ) { TSTR_PATH strTempDir;
if ( !strTempDir.Copy( csOldWWWRoot.GetBuffer(0) ) && !strTempDir.ExpandEnvironmentVariables() ) { return; }
csOldWWWRoot = strTempDir.QueryStr(); }
// The old wwwRoot may be a network drive.
// what to do then?
// at least check if we can access it!
if ((IsFileExist(csOldWWWRoot))) { iisDebugOutSafeParams((LOG_TYPE_TRACE, _T("Old WWWRoot='%1!s!'. Exists. so we'll use it.\n"), csOldWWWRoot)); m_csPathWWWRoot = csOldWWWRoot; } else { iisDebugOutSafeParams((LOG_TYPE_WARN, _T("OldWWWRoot='%1!s!'. Does not exist. we'll use the default. WARNING.\n"), csOldWWWRoot)); } }
//
// Try to get it from the old iis2,3,4 Actual W3svc Service location if it's there.
// and overwrite anything that we got from setup -- since w3svc is what is actually used!
//
GetVRootValue(REG_W3SVC, _T("/"), _T("/"), m_csPathWWWRoot);
return; }
void CInitApp::GetOldIISSamplesLocation(void) { //
// Try to get it from the old iis2,3,4 setup location if it's there.
//
CRegKey regINetStp( HKEY_LOCAL_MACHINE, REG_INETSTP, KEY_READ); if ((HKEY)regINetStp) { //
// Get the location of the where the samples were installed.
//
m_csPathIISSamples.Empty(); regINetStp.m_iDisplayWarnings = FALSE; regINetStp.QueryValue( _T("/IISSamples"), m_csPathIISSamples ); if (-1 != m_csPathIISSamples.Find(_T('%')) ) { TSTR_PATH strTempDir;
if ( !strTempDir.Copy( m_csPathIISSamples.GetBuffer(0) ) && !strTempDir.ExpandEnvironmentVariables() ) { return; }
m_csPathIISSamples = strTempDir.QueryStr(); } if ( m_csPathIISSamples.IsEmpty()) { //
// if Samples path is empty then this an Upgrade,
// Guess where to put Sample Site
//
TSTR strParentDir( MAX_PATH ); TSTR strDir( MAX_PATH );
if ( !strParentDir.Resize( _tcslen( m_csPathWWWRoot.GetBuffer(0) ) ) || !strDir.Resize( _tcslen( m_csPathWWWRoot.GetBuffer(0) ) + _tcslen( _T("iissamples" ) ) ) ) { return; }
//
// Get the parent Dir path
//
InetGetFilePath((LPCTSTR)m_csPathWWWRoot, strParentDir.QueryStr() ); //
// Append the samples dir to parent path
//
AppendDir(strParentDir.QueryStr(), _T("iissamples"), strDir.QueryStr() ); m_csPathIISSamples = strDir.QueryStr(); } }
if (m_eUpgradeType == UT_10_W95) { TSTR strParentDir( MAX_PATH ); TSTR strDir( MAX_PATH );
if ( !strParentDir.Resize( _tcslen( m_csPathWWWRoot.GetBuffer(0) ) + _tcslen( _T("iissamples") ) ) || !strDir.Resize( _tcslen( m_csPathWWWRoot.GetBuffer(0) ) + _tcslen( _T("webpub") ) ) ) { return; }
InetGetFilePath(m_csPathWWWRoot, strParentDir.QueryStr() ); AppendDir(strParentDir.QueryStr() , _T("iissamples"), strDir.QueryStr() ); m_csPathIISSamples = strDir.QueryStr() ; AppendDir(strParentDir.QueryStr() , _T("webpub"), strDir.QueryStr() ); m_csPathWebPub = strDir.QueryStr() ; }
return; }
void CInitApp::GetOldIISDirs(void) { CRegKey regINetStp( HKEY_LOCAL_MACHINE, REG_INETSTP, KEY_READ); //
// get values from the previous setup for II2/4 upgrade
//
// Try to get old WWW Root from the service itself
// -----------------------
GetOldWWWRootDir(); // Set Inetpub from whatever we got from www root
DeriveInetpubFromWWWRoot();
// Reset Vars relying on Inetpub
// -----------------------------
m_csPathFTPRoot = m_csPathInetpub + _T("\\ftproot"); m_csPathIISSamples = m_csPathInetpub + _T("\\iissamples"); m_csPathScripts = m_csPathInetpub + _T("\\Scripts"); m_csPathWebPub = m_csPathInetpub + _T("\\webpub"); m_csPathASPSamp = m_csPathInetpub + _T("\\ASPSamp"); m_csPathAdvWorks = m_csPathInetpub + _T("\\ASPSamp\\AdvWorks");
// Try to get old FTP Root from the service itself
// -----------------------
GetVRootValue(REG_MSFTPSVC, _T("/"), _T("/"), m_csPathFTPRoot);
// Get old iis samples location
// ----------------------------
GetOldIISSamplesLocation();
// Get iis 3.0 locations.
// ----------------------
GetVRootValue(REG_W3SVC, _T("/Scripts"), _T("/Scripts"), m_csPathScripts); GetVRootValue(REG_W3SVC, _T("/ASPSamp"), _T("/ASPSamp"), m_csPathASPSamp); GetVRootValue(REG_W3SVC, _T("/AdvWorks"), _T("/AdvWorks"), m_csPathAdvWorks); GetVRootValue(REG_W3SVC, _T("/IASDocs"), _T("/IASDocs"), m_csPathIASDocs);
// Get old InetSrv dir
// -------------------
GetOldInetSrvDir();
return; }
void CInitApp::SetInetpubDerivatives() { m_csPathFTPRoot = m_csPathInetpub + _T("\\ftproot"); m_csPathWWWRoot = m_csPathInetpub + _T("\\wwwroot"); m_csPathWebPub = m_csPathInetpub + _T("\\webpub"); m_csPathIISSamples = m_csPathInetpub + _T("\\iissamples"); m_csPathScripts = m_csPathInetpub + _T("\\scripts"); m_csPathASPSamp = m_csPathInetpub + _T("\\ASPSamp"); m_csPathAdvWorks = m_csPathInetpub + _T("\\ASPSamp\\AdvWorks");
switch (m_eInstallMode) { case IM_DEGRADE: case IM_FRESH: // use the initialized values
break; case IM_UPGRADE: case IM_MAINTENANCE: { // override, what ever we just set above!
GetOldIISDirs(); break; } } }
void CInitApp::SetInetpubDir() { m_csPathInetpub = m_csSysDrive + _T("\\Inetpub"); // Check if the user wants to override this with a unattend setting
Check_Custom_InetPub(); }
void CInitApp::ResetWAMPassword() { LPTSTR pszPassword = NULL; // create a iwam password
pszPassword = CreatePassword(LM20_PWLEN+1); if (pszPassword) { m_csWAMAccountPassword = pszPassword; GlobalFree(pszPassword);pszPassword = NULL; } }
// Init/Set m_csGuestName, m_csGuestPassword, destinations
// -------------------------------------------------------
void CInitApp::SetSetupParams() { // check if the debug level is set in the unattend file
// ----------------------------------------------------
Check_For_DebugLevel();
// init m_csGuestName as IUSR_MachineName, init m_csGuestPassword as a random password
TCHAR szGuestName[UNLEN+1]; memset( (PVOID)szGuestName, 0, sizeof(szGuestName));
CString csMachineName; csMachineName = m_csMachineName; csMachineName = csMachineName.Right(csMachineName.GetLength() - 2); LPTSTR pszPassword = NULL;
// create a default guest name
CString strDefGuest; MyLoadString( IDS_GUEST_NAME, strDefGuest); strDefGuest += csMachineName; _tcsncpy( szGuestName, (LPCTSTR) strDefGuest, LM20_UNLEN+1); m_csGuestName = szGuestName; // create a default guest password
pszPassword = CreatePassword(LM20_PWLEN+1); if (pszPassword) { m_csGuestPassword = pszPassword; GlobalFree(pszPassword);pszPassword = NULL; }
// Set the ftp/www users to use this default specified one...
m_csWWWAnonyName = m_csGuestName; m_csWWWAnonyPassword = m_csGuestPassword; m_csFTPAnonyName = m_csGuestName; m_csFTPAnonyPassword = m_csGuestPassword;
// init all 4 destinations
m_csPathInetsrv = m_csSysDir + _T("\\inetsrv");
m_csPathIASDocs = m_csPathInetsrv + _T("\\Docs"); m_csPathProgramFiles = m_csSysDrive + _T("\\Program Files"); CRegKey regCurrentVersion(HKEY_LOCAL_MACHINE, _T("Software\\Microsoft\\Windows\\CurrentVersion"), KEY_READ); if ( (HKEY)regCurrentVersion ) { if (regCurrentVersion.QueryValue(_T("ProgramFilesDir"), m_csPathProgramFiles) != 0) {m_csPathProgramFiles = m_csSysDrive + _T("\\Program Files");} else { if (-1 != m_csPathProgramFiles.Find(_T('%')) ) { // there is a '%' in the string
TCHAR szTempDir[_MAX_PATH]; _tcscpy(szTempDir, m_csPathProgramFiles); if (ExpandEnvironmentStrings( (LPCTSTR)m_csPathProgramFiles, szTempDir, sizeof(szTempDir)/sizeof(TCHAR))) { m_csPathProgramFiles = szTempDir; } } } }
CRegKey regCurrentVersionSetup(HKEY_LOCAL_MACHINE, _T("Software\\Microsoft\\Windows\\CurrentVersion\\Setup"), KEY_READ); if ( (HKEY)regCurrentVersionSetup ) { // Get NT installation path
if (regCurrentVersionSetup.QueryValue(_T("SourcePath"), m_csPathNTSrcDir) != 0) {m_csPathNTSrcDir = m_csSysDrive + _T("\\$WIN_NT$.~LS");} else { if (-1 != m_csPathNTSrcDir.Find(_T('%')) ) { // there is a '%' in the string
TCHAR szTempDir[_MAX_PATH]; _tcscpy(szTempDir, m_csPathNTSrcDir); if (ExpandEnvironmentStrings( (LPCTSTR)m_csPathNTSrcDir, szTempDir, sizeof(szTempDir)/sizeof(TCHAR))) { m_csPathNTSrcDir = szTempDir; } } } }
//#ifdef _CHICAGO_
if (m_eUpgradeType == UT_10_W95) { BOOL bOSR2 = TRUE; CRegKey regVersion(HKEY_LOCAL_MACHINE, _T("SOFTWARE\\Microsoft\\Windows\\CurrentVersion"), KEY_READ); if ((HKEY)regVersion) { CString csString; // VersionNumber for OSR2 is 4.00.1111
// VersionNumber for the original win95 is 4.00.950
if (regVersion.QueryValue(_T("VersionNumber"), csString) == ERROR_SUCCESS) { if (csString.Compare(_T("4.00.950")) == 0) bOSR2 = FALSE; } }
if (!bOSR2) { g_pTheApp->m_csPathOldPWSFiles = m_csPathProgramFiles + _T("\\WebSvr"); g_pTheApp->m_csPathOldPWSSystemFiles = m_csPathProgramFiles + _T("\\WebSvr\\System"); } else { g_pTheApp->m_csPathOldPWSFiles = m_csPathProgramFiles + _T("\\Personal Web Server"); g_pTheApp->m_csPathOldPWSSystemFiles = m_csPathProgramFiles + _T("\\Personal Web Server\\WebServer"); } } //#endif //_CHICAGO
return; }
// Get Platform info
void CInitApp::GetPlatform() { if ( m_eOS == OS_NT) { SYSTEM_INFO si; GetSystemInfo( &si ); m_csPlatform = _T("x86"); if (si.wProcessorArchitecture == PROCESSOR_ARCHITECTURE_INTEL) {m_csPlatform = _T("x86");} if (si.wProcessorArchitecture == PROCESSOR_ARCHITECTURE_IA64) {m_csPlatform = _T("IA64");} if (si.wProcessorArchitecture == PROCESSOR_ARCHITECTURE_AMD64) {m_csPlatform = _T("AMD64");} if (si.wProcessorArchitecture == PROCESSOR_ARCHITECTURE_UNKNOWN) {m_csPlatform = _T("UNKNOWN");}
// save the number of processors for this machine.
m_dwNumberOfProcessors = si.dwNumberOfProcessors;
/* old
TCHAR *p = _tgetenv(_T("PROCESSOR_ARCHITECTURE")); if ( p ) {m_csPlatform = p;} else {m_csPlatform = _T("x86");} */ } return; }
BOOL CInitApp::GetMachineStatus() { if ( ( !GetMachineName() ) || // m_csMachineName
( !GetOS() ) || // m_fOSNT
( !GetOSVersion() ) || // NT 4.0 (Build 1381) or greater
( !GetOSType() ) || // m_eOSType = NT_SRV or NT_WKS
( !GetSysDirs() ) || // m_csWinDir. m_csSysDir
( !IsTCPIPInstalled()) || // errmsg: if NO TCPIP is installed
( !SetInstallMode()) ) // errmsg: if down grade the product
{ return FALSE; }
SetSetupParams(); // Guest account, destinations
ReGetMachineAndAccountNames(); ResetWAMPassword(); SetInetpubDir(); SetInetpubDerivatives(); UnInstallList_RegRead(); // Get Uninstall information
UnInstallList_SetVars(); // set member variables for uninstall info
// check for any unattend file\custom settings.
Check_Unattend_Settings();
GetPlatform();
GetUserDomain();
return TRUE; }
int CInitApp::MsgBox(HWND hWnd, int iID, UINT nType, BOOL bGlobalTitle) { if (iID == -1) {return IDOK;}
CString csMsg, csTitle; MyLoadString(iID, csMsg); csTitle = m_csAppName; iisDebugOutSafeParams((LOG_TYPE_WARN, _T("CInitApp::MsgBox('%1!s!')\n"), csMsg));
return (::MessageBoxEx(NULL, (LPCTSTR)csMsg, csTitle, nType | MB_SETFOREGROUND, MAKELANGID(LANG_NEUTRAL, SUBLANG_SYS_DEFAULT))); }
int CInitApp::MsgBox2(HWND hWnd, int iID,CString csInsertionString,UINT nType) { if (iID == -1) {return IDOK;} CString csFormat, csMsg, csTitle; MyLoadString(iID, csFormat); csMsg.Format(csFormat, csInsertionString); csTitle = m_csAppName; iisDebugOutSafeParams((LOG_TYPE_WARN, _T("CInitApp::MsgBox2('%1!s!')\n"), csMsg));
return (::MessageBoxEx(NULL, (LPCTSTR)csMsg, csTitle, nType | MB_SETFOREGROUND, MAKELANGID(LANG_NEUTRAL, SUBLANG_SYS_DEFAULT))); }
BOOL CInitApp::InitApplication() // Return Value:
// TRUE: application is initiliazed correctly, continue processing
// FALSE: application is missing some required parameters, like the correct OS, TCPIP, etc.
// setup should be terminated.
{ BOOL fReturn = FALSE;
do { // Get Machine Status:
// m_eInstallMode(Fresh, Maintenance, Upgrade, Degrade),
// m_eUpgradeType(PROD 2.0, PROD 3.0)
if ( !GetMachineStatus() ) { CString csMsg; MyLoadString(m_err, csMsg); ::MessageBoxEx(NULL, (LPCTSTR)csMsg, (LPCTSTR) g_pTheApp->m_csAppName , MB_SETFOREGROUND, MAKELANGID(LANG_NEUTRAL, SUBLANG_SYS_DEFAULT));
iisDebugOutSafeParams((LOG_TYPE_ERROR, _T("GetMachineStatus(); MessageBoxEx('%1!s!') FAILER\n"), csMsg)); break; }
if ( g_pTheApp->m_eInstallMode == IM_MAINTENANCE ) {g_pTheApp->m_fEULA = TRUE;}
fReturn = TRUE;
} while (0);
return fReturn; }
// open the tcp/ip registry key
// if it's there then tcp/ip is installed
int TCPIP_Check_Temp_Hack(void) { int TheReturn = FALSE;
CRegKey regTheKey(HKEY_LOCAL_MACHINE,_T("System\\CurrentControlSet\\Services\\Tcpip"),KEY_READ); if ((HKEY) regTheKey) { TheReturn = TRUE; }
if (FALSE == TheReturn) { iisDebugOut((LOG_TYPE_TRACE_WIN32_API, _T("DETECT:TCPIP not Installed (yet), but we'll proceed as if it were."))); TheReturn = TRUE; } return TheReturn; }
void GetUserDomain(void) { HANDLE hProcess, hAccessToken; TCHAR InfoBuffer[1000],szAccountName[200], szDomainName[200]; PTOKEN_USER pTokenUser = (PTOKEN_USER)InfoBuffer; DWORD dwInfoBufferSize; DWORD dwAccountSize = sizeof(szAccountName)/sizeof(szAccountName[0]); DWORD dwDomainSize = sizeof(szDomainName)/sizeof(szDomainName[0]); SID_NAME_USE snu;
hProcess = GetCurrentProcess(); OpenProcessToken(hProcess,TOKEN_READ,&hAccessToken); GetTokenInformation(hAccessToken,TokenUser,InfoBuffer,1000, &dwInfoBufferSize); if (LookupAccountSid(NULL, pTokenUser->User.Sid, szAccountName,&dwAccountSize,szDomainName, &dwDomainSize, &snu)) { if (dwDomainSize) { g_pTheApp->m_csUsersDomain = szDomainName; //_tcscpy(g_szUsersDomain, szDomainName);
} else { g_pTheApp->m_csUsersDomain = _T(" "); //_tcscpy(g_szUsersDomain, _T(" "));
}
if (dwDomainSize) { g_pTheApp->m_csUsersAccount = szAccountName; //_tcscpy(g_szUsersAccount, szAccountName);
} else { g_pTheApp->m_csUsersAccount = _T(" "); } } }
// This function should only be called in FRESH NT5 setup.
void CInitApp::ReGetMachineAndAccountNames() { GetMachineName();
// re-calculate the IUSR_ and IWAM_ account names
TCHAR szGuestName[UNLEN+1]; memset( (PVOID)szGuestName, 0, sizeof(szGuestName));
CString csMachineName; csMachineName = m_csMachineName; csMachineName = csMachineName.Right(csMachineName.GetLength() - 2); CString strDefGuest;
MyLoadString( IDS_GUEST_NAME, strDefGuest); strDefGuest += csMachineName; _tcsncpy( szGuestName, (LPCTSTR) strDefGuest, LM20_UNLEN+1); m_csGuestName = szGuestName;
MyLoadString( IDS_WAM_ACCOUNT_NAME, strDefGuest); strDefGuest += csMachineName; _tcsncpy( szGuestName, (LPCTSTR) strDefGuest, LM20_UNLEN+1); m_csWAMAccountName = szGuestName; }
void CInitApp::DumpAppVars(void) { int iDoOnlyInThisMode = LOG_TYPE_TRACE;
// only do this if the debug mode is trace.
if (g_GlobalDebugLevelFlag >= iDoOnlyInThisMode) {
iisDebugOut((iDoOnlyInThisMode, _T("=======================\n"))); // machine status
iisDebugOutSafeParams((iDoOnlyInThisMode, _T("m_csMachineName=%1!s!\n"), m_csMachineName)); iisDebugOutSafeParams((iDoOnlyInThisMode, _T("m_csUsersDomain=%1!s!\n"), m_csUsersDomain)); iisDebugOutSafeParams((iDoOnlyInThisMode, _T("m_csUsersAccount=%1!s!\n"), m_csUsersAccount));
iisDebugOutSafeParams((iDoOnlyInThisMode, _T("m_csWinDir=%1!s!\n"), m_csWinDir));; iisDebugOutSafeParams((iDoOnlyInThisMode, _T("m_csSysDir=%1!s!\n"), m_csSysDir));; iisDebugOutSafeParams((iDoOnlyInThisMode, _T("m_csSysDrive=%1!s!\n"), m_csSysDrive));;
iisDebugOutSafeParams((iDoOnlyInThisMode, _T("m_csPathNTSrcDir=%1!s!\n"), m_csPathNTSrcDir));; iisDebugOutSafeParams((iDoOnlyInThisMode, _T("m_csPathSource=%1!s!\n"), m_csPathSource));; iisDebugOutSafeParams((iDoOnlyInThisMode, _T("m_csPathOldInetsrv=%1!s!\n"), m_csPathOldInetsrv));; iisDebugOutSafeParams((iDoOnlyInThisMode, _T("m_csPathInetsrv=%1!s!\n"), m_csPathInetsrv));; iisDebugOutSafeParams((iDoOnlyInThisMode, _T("m_csPathInetpub=%1!s!\n"), m_csPathInetpub));; iisDebugOutSafeParams((iDoOnlyInThisMode, _T("m_csPathFTPRoot=%1!s!\n"), m_csPathFTPRoot));; iisDebugOutSafeParams((iDoOnlyInThisMode, _T("m_csPathWWWRoot=%1!s!\n"), m_csPathWWWRoot));; iisDebugOutSafeParams((iDoOnlyInThisMode, _T("m_csPathWebPub=%1!s!\n"), m_csPathWebPub));; iisDebugOutSafeParams((iDoOnlyInThisMode, _T("m_csPathProgramFiles=%1!s!\n"), m_csPathProgramFiles));; iisDebugOutSafeParams((iDoOnlyInThisMode, _T("m_csPathIISSamples=%1!s!\n"), m_csPathIISSamples));; iisDebugOutSafeParams((iDoOnlyInThisMode, _T("m_csPathScripts=%1!s!\n"), m_csPathScripts));; iisDebugOutSafeParams((iDoOnlyInThisMode, _T("m_csPathASPSamp=%1!s!\n"), m_csPathASPSamp));; iisDebugOutSafeParams((iDoOnlyInThisMode, _T("m_csPathAdvWorks=%1!s!\n"), m_csPathAdvWorks));; iisDebugOutSafeParams((iDoOnlyInThisMode, _T("m_csPathIASDocs=%1!s!\n"), m_csPathIASDocs));; iisDebugOutSafeParams((iDoOnlyInThisMode, _T("m_csPathOldPWSFiles=%1!s!\n"), m_csPathOldPWSFiles));; iisDebugOutSafeParams((iDoOnlyInThisMode, _T("m_csPathOldPWSSystemFiles=%1!s!\n"), m_csPathOldPWSSystemFiles));; if (m_eOS == OS_NT) {iisDebugOut((iDoOnlyInThisMode, _T("OS=NT\n")));} if (m_eOS == OS_W95) {iisDebugOut((iDoOnlyInThisMode, _T("OS=W95\n")));} if (m_eOS == OS_OTHERS) {iisDebugOut((iDoOnlyInThisMode, _T("OS=OTHER\n")));}
if (m_eNTOSType == OT_NTW){iisDebugOut((iDoOnlyInThisMode, _T("m_eNTOSType=OT_NTW (Workstation)\n")));} if (m_eNTOSType == OT_NTS){iisDebugOut((iDoOnlyInThisMode, _T("m_eNTOSType=OT_NTS (Server)\n")));} if (m_eNTOSType == OT_PDC_OR_BDC){iisDebugOut((iDoOnlyInThisMode, _T("m_eNTOSType=OT_PDC_OR_BDC (Primary/Backup Domain Controller)\n")));}
iisDebugOutSafeParams((iDoOnlyInThisMode, _T("m_csPlatform=%1!s!\n"), m_csPlatform));; iisDebugOutSafeParams((iDoOnlyInThisMode, _T("m_dwNumberOfProcessors=%1!d!\n"), m_dwNumberOfProcessors));;
if (m_fNT5) {iisDebugOut((iDoOnlyInThisMode, _T("OSVersion=5\n")));} if (m_fW95) {iisDebugOut((iDoOnlyInThisMode, _T("OSVersion=Win95\n")));} iisDebugOut((iDoOnlyInThisMode, _T("m_dwOSBuild=%d\n"), m_dwOSBuild)); iisDebugOut((iDoOnlyInThisMode, _T("m_dwOSServicePack=0x%x\n"), m_dwOSServicePack)); iisDebugOut((iDoOnlyInThisMode, _T("m_fTCPIP Exists=%d\n"), m_fTCPIP));
if (m_eUpgradeType == UT_NONE){iisDebugOut((iDoOnlyInThisMode, _T("m_eUpgradeType=UT_NONE\n")));} if (m_eUpgradeType == UT_10_W95){iisDebugOut((iDoOnlyInThisMode, _T("m_eUpgradeType=UT_10_W95\n")));} if (m_eUpgradeType == UT_351){iisDebugOut((iDoOnlyInThisMode, _T("m_eUpgradeType=UT_351\n")));} if (m_eUpgradeType == UT_10){iisDebugOut((iDoOnlyInThisMode, _T("m_eUpgradeType=UT_10\n")));} if (m_eUpgradeType == UT_20){iisDebugOut((iDoOnlyInThisMode, _T("m_eUpgradeType=UT_20\n")));} if (m_eUpgradeType == UT_30){iisDebugOut((iDoOnlyInThisMode, _T("m_eUpgradeType=UT_30\n")));} if (m_eUpgradeType == UT_40){iisDebugOut((iDoOnlyInThisMode, _T("m_eUpgradeType=UT_40\n")));} if (m_eUpgradeType == UT_50){iisDebugOut((iDoOnlyInThisMode, _T("m_eUpgradeType=UT_50\n")));} if (m_eUpgradeType == UT_51){iisDebugOut((iDoOnlyInThisMode, _T("m_eUpgradeType=UT_51\n")));} if (m_eUpgradeType == UT_60){iisDebugOut((iDoOnlyInThisMode, _T("m_eUpgradeType=UT_60\n")));}
if (m_eInstallMode == IM_FRESH){iisDebugOut((iDoOnlyInThisMode, _T("m_eInstallMode=IM_FRESH\n")));} if (m_eInstallMode == IM_UPGRADE){iisDebugOut((iDoOnlyInThisMode, _T("m_eInstallMode=IM_UPGRADE\n")));} if (m_eInstallMode == IM_MAINTENANCE){iisDebugOut((iDoOnlyInThisMode, _T("m_eInstallMode=IM_MAINTENANCE\n")));} if (m_eInstallMode == IM_DEGRADE){iisDebugOut((iDoOnlyInThisMode, _T("m_eInstallMode=IM_DEGRADE\n")));}
if (m_dwSetupMode & SETUPMODE_UPGRADE){iisDebugOut((iDoOnlyInThisMode, _T("m_dwSetupMode=SETUPMODE_UPGRADE\n")));} if (m_dwSetupMode == SETUPMODE_UPGRADEONLY){iisDebugOut((iDoOnlyInThisMode, _T("m_dwSetupMode=SETUPMODE_UPGRADE | SETUPMODE_UPGRADEONLY\n")));} if (m_dwSetupMode == SETUPMODE_ADDEXTRACOMPS){iisDebugOut((iDoOnlyInThisMode, _T("m_dwSetupMode=SETUPMODE_UPGRADE | SETUPMODE_ADDEXTRACOMPS\n")));} if (m_dwSetupMode & SETUPMODE_UPGRADE){iisDebugOut((iDoOnlyInThisMode, _T("m_bUpgradeTypeHasMetabaseFlag=%d\n"),m_bUpgradeTypeHasMetabaseFlag));}
if (m_dwSetupMode & SETUPMODE_MAINTENANCE){iisDebugOut((iDoOnlyInThisMode, _T("m_dwSetupMode=SETUPMODE_MAINTENANCE\n")));} if (m_dwSetupMode == SETUPMODE_ADDREMOVE){iisDebugOut((iDoOnlyInThisMode, _T("m_dwSetupMode=SETUPMODE_MAINTENANCE | SETUPMODE_ADDREMOVE\n")));} if (m_dwSetupMode == SETUPMODE_REINSTALL){iisDebugOut((iDoOnlyInThisMode, _T("m_dwSetupMode=SETUPMODE_MAINTENANCE | SETUPMODE_REINSTALL\n")));} if (m_dwSetupMode == SETUPMODE_REMOVEALL){iisDebugOut((iDoOnlyInThisMode, _T("m_dwSetupMode=SETUPMODE_MAINTENANCE | SETUPMODE_REMOVEALL\n")));}
if (m_dwSetupMode & SETUPMODE_FRESH){iisDebugOut((iDoOnlyInThisMode, _T("m_dwSetupMode=SETUPMODE_FRESH\n")));} if (m_dwSetupMode == SETUPMODE_MINIMAL){iisDebugOut((iDoOnlyInThisMode, _T("m_dwSetupMode=SETUPMODE_FRESH | SETUPMODE_MINIMAL\n")));} if (m_dwSetupMode == SETUPMODE_TYPICAL){iisDebugOut((iDoOnlyInThisMode, _T("m_dwSetupMode=SETUPMODE_FRESH | SETUPMODE_TYPICAL\n")));} if (m_dwSetupMode == SETUPMODE_CUSTOM){iisDebugOut((iDoOnlyInThisMode, _T("m_dwSetupMode=SETUPMODE_FRESH | SETUPMODE_CUSTOM\n")));}
iisDebugOut((iDoOnlyInThisMode, _T("m_bPleaseDoNotInstallByDefault=%d\n"), m_bPleaseDoNotInstallByDefault)); //if (m_bRefreshSettings == TRUE){iisDebugOut((iDoOnlyInThisMode, _T("m_bRefreshSettings=refresh files + refresh all settings\n")));}
//if (m_bRefreshSettings == FALSE){iisDebugOut((iDoOnlyInThisMode, _T("m_bRefreshSettings=refresh files only\n")));}
if (m_eAction == AT_DO_NOTHING){iisDebugOut((iDoOnlyInThisMode, _T("m_eAction=AT_DO_NOTHING\n")));} if (m_eAction == AT_REMOVE){iisDebugOut((iDoOnlyInThisMode, _T("m_eAction=AT_REMOVE\n")));} if (m_eAction == AT_INSTALL_FRESH){iisDebugOut((iDoOnlyInThisMode, _T("m_eAction=AT_INSTALL_FRESH\n")));} if (m_eAction == AT_INSTALL_UPGRADE){iisDebugOut((iDoOnlyInThisMode, _T("m_eAction=AT_INSTALL_UPGRADE\n")));} if (m_eAction == AT_INSTALL_REINSTALL){iisDebugOut((iDoOnlyInThisMode, _T("m_eAction=AT_INSTALL_REINSTALL\n")));}
iisDebugOut((iDoOnlyInThisMode, _T("m_fNTOperationFlags=0x%x\n"), m_fNTOperationFlags)); iisDebugOut((iDoOnlyInThisMode, _T("m_fNTGuiMode=%d\n"), m_fNTGuiMode)); iisDebugOut((iDoOnlyInThisMode, _T("m_fInvokedByNT=%d\n"), m_fInvokedByNT)); iisDebugOut((iDoOnlyInThisMode, _T("m_fNtWorkstation=%d\n"), m_fNtWorkstation));
iisDebugOut((iDoOnlyInThisMode, _T("m_fUnattended=%d\n"), m_fUnattended)); iisDebugOut((iDoOnlyInThisMode, _T("m_csUnattendFile=%s\n"), m_csUnattendFile));; iisDebugOutSafeParams((iDoOnlyInThisMode, _T("m_csPathSrcDir=%1!s!\n"), m_csPathSrcDir));; iisDebugOut((iDoOnlyInThisMode, _T("=======================\n")));
} return; }
int AreWeCurrentlyInstalled() { int iReturn = FALSE; DWORD dwMajorVersion = 0;
CRegKey regINetStp( HKEY_LOCAL_MACHINE, REG_INETSTP, KEY_READ); if ((HKEY) regINetStp) { LONG lReturnedErrCode = regINetStp.QueryValue(_T("MajorVersion"), dwMajorVersion); if (lReturnedErrCode == ERROR_SUCCESS) { if (dwMajorVersion == 5) { iReturn = TRUE; } } } return iReturn; }
#define sz_PreviousIISVersion_string _T("PreviousIISVersion")
int CInitApp::SetUpgradeType(void) { int iReturn = FALSE; DWORD dwMajorVersion = 0; DWORD dwMinorVersion = 0; CString csFrontPage;
m_eInstallMode = IM_UPGRADE; m_eUpgradeType = UT_NONE; m_bUpgradeTypeHasMetabaseFlag = FALSE; m_bPleaseDoNotInstallByDefault = TRUE;
CRegKey regINetStp( HKEY_LOCAL_MACHINE, REG_INETSTP, KEY_READ); if ((HKEY) regINetStp) { LONG lReturnedErrCode = regINetStp.QueryValue(_T("MajorVersion"), dwMajorVersion); if (lReturnedErrCode == ERROR_SUCCESS) { if (dwMajorVersion <= 1) { m_eUpgradeType = UT_10; m_eInstallMode = IM_UPGRADE; m_bUpgradeTypeHasMetabaseFlag = FALSE; m_bPleaseDoNotInstallByDefault = FALSE; iReturn = TRUE; iisDebugOut((LOG_TYPE_TRACE, _T("%s=0x%x.\n"),sz_PreviousIISVersion_string, dwMajorVersion)); goto SetUpgradeType_Exit; } if (dwMajorVersion == 2) { m_eUpgradeType = UT_20; m_eInstallMode = IM_UPGRADE; m_bUpgradeTypeHasMetabaseFlag = FALSE; m_bPleaseDoNotInstallByDefault = FALSE; iReturn = TRUE; iisDebugOut((LOG_TYPE_TRACE, _T("%s=0x%x.\n"),sz_PreviousIISVersion_string, dwMajorVersion)); goto SetUpgradeType_Exit; } if (dwMajorVersion == 3) { m_eUpgradeType = UT_30; m_eInstallMode = IM_UPGRADE; m_bUpgradeTypeHasMetabaseFlag = FALSE; m_bPleaseDoNotInstallByDefault = FALSE; iReturn = TRUE; iisDebugOut((LOG_TYPE_TRACE, _T("%s=0x%x.\n"),sz_PreviousIISVersion_string, dwMajorVersion)); goto SetUpgradeType_Exit; } if (dwMajorVersion == 4) { CString csSetupString; m_eUpgradeType = UT_40; m_eInstallMode = IM_UPGRADE; m_bUpgradeTypeHasMetabaseFlag = TRUE; m_bPleaseDoNotInstallByDefault = FALSE; iReturn = TRUE; regINetStp.m_iDisplayWarnings = FALSE; if (regINetStp.QueryValue(_T("SetupString"), csSetupString) == NERR_Success) { if (csSetupString.CompareNoCase(_T("K2 RTM")) != 0) { // Error: upgrade not supported on K2 Beta versions
// Do a fresh if it's k2 beta2!!!!
m_eInstallMode = IM_FRESH; m_eUpgradeType = UT_NONE; m_bUpgradeTypeHasMetabaseFlag = FALSE; m_bPleaseDoNotInstallByDefault = FALSE; iReturn = FALSE; iisDebugOut((LOG_TYPE_TRACE, _T("%s=0x%x.Beta2.\n"),sz_PreviousIISVersion_string, dwMajorVersion)); goto SetUpgradeType_Exit; } } iisDebugOut((LOG_TYPE_TRACE, _T("%s=0x%x.\n"),sz_PreviousIISVersion_string, dwMajorVersion)); goto SetUpgradeType_Exit; } if (dwMajorVersion == 5) { // There is a previous version of iis5 on the machine...
// Could be they are upgrading from nt5Workstation to and nt5Server machine!
// or from and server to a workstation! what a nightmare!!!
//m_eInstallMode = IM_FRESH;
m_eUpgradeType = UT_50; m_eInstallMode = IM_UPGRADE; m_bUpgradeTypeHasMetabaseFlag = TRUE; m_bPleaseDoNotInstallByDefault = FALSE;
regINetStp.m_iDisplayWarnings = FALSE; if (regINetStp.QueryValue(_T("MinorVersion"), dwMinorVersion) == NERR_Success) { if (dwMinorVersion >= 1) { m_eUpgradeType = UT_51; m_eInstallMode = IM_UPGRADE; m_bUpgradeTypeHasMetabaseFlag = TRUE; m_bPleaseDoNotInstallByDefault = FALSE; } } iReturn = TRUE; iisDebugOut((LOG_TYPE_TRACE, _T("%s=0x%x.0x%x\n"),sz_PreviousIISVersion_string, dwMajorVersion,dwMinorVersion)); goto SetUpgradeType_Exit; } if (dwMajorVersion == 6) { // There is a previous version of iis5 on the machine...
// Could be they are upgrading from nt5Workstation to and nt5Server machine!
// or from and server to a workstation! what a nightmare!!!
//m_eInstallMode = IM_FRESH;
m_eUpgradeType = UT_60; m_eInstallMode = IM_UPGRADE; m_bUpgradeTypeHasMetabaseFlag = TRUE; m_bPleaseDoNotInstallByDefault = FALSE; iReturn = TRUE; iisDebugOut((LOG_TYPE_TRACE, _T("%s=0x%x.0x%x\n"),sz_PreviousIISVersion_string, dwMajorVersion,dwMinorVersion)); goto SetUpgradeType_Exit; }
if (dwMajorVersion > 6) { m_eInstallMode = IM_UPGRADE; m_eUpgradeType = UT_60; m_bUpgradeTypeHasMetabaseFlag = FALSE; m_bPleaseDoNotInstallByDefault = TRUE; iReturn = TRUE; iisDebugOut((LOG_TYPE_TRACE, _T("%s=0x%x.0x%x\n"),sz_PreviousIISVersion_string, dwMajorVersion,dwMinorVersion)); goto SetUpgradeType_Exit; }
// if we get here, then that means
// that we found a version like 7.0 or something
// which we should not upgrade since it is newer than us.
// but hey we're in upgrade mode, so we should set something
m_eInstallMode = IM_UPGRADE; m_eUpgradeType = UT_NONE; m_bUpgradeTypeHasMetabaseFlag = FALSE; m_bPleaseDoNotInstallByDefault = TRUE; iReturn = FALSE; iisDebugOut((LOG_TYPE_TRACE, _T("%s=some other iis version\n"),sz_PreviousIISVersion_string)); } }
// -----------------------------------
//
// Check for other Rogue versions of IIS
//
// win95 pws 1.0
// win95 fontpage installed pws 1.0 (actually totally different from pws 1.0)
//
// on NT5 we are able to upgrade from:
// Win95 pws 1.0
// Win95 pws 4.0
// on win95 pws 1.0, there was no inetstp dir
// so we must check other things.
// -----------------------------------
{ CRegKey regW3SVC(HKEY_LOCAL_MACHINE, REG_WWWPARAMETERS, KEY_READ); if ((HKEY)regW3SVC) { CByteArray baMajorVersion; regW3SVC.m_iDisplayWarnings = FALSE; if (regW3SVC.QueryValue(_T("MajorVersion"), baMajorVersion) == NERR_Success) { // Check if we can read the MajorVersion value should be set to '\0' if pws 1.0
if (baMajorVersion[0] == '\0') { m_eUpgradeType = UT_10_W95; m_eInstallMode = IM_UPGRADE; m_bUpgradeTypeHasMetabaseFlag = FALSE; m_bPleaseDoNotInstallByDefault = FALSE; iReturn = TRUE; iisDebugOut((LOG_TYPE_TRACE, _T("%s=1.\n"),sz_PreviousIISVersion_string)); goto SetUpgradeType_Exit; } } } }
//
// on win 95 there could be an
// installation of frontpg pws version 1.0
// we don't support upgrading this, so we'll do a fresh if we ever get here.
//
csFrontPage = g_pTheApp->m_csSysDir + _T("\\frontpg.ini"); if (IsFileExist(csFrontPage)) { TCHAR buf[_MAX_PATH]; GetPrivateProfileString(_T("FrontPage 1.1"), _T("PWSRoot"), _T(""), buf, _MAX_PATH, csFrontPage); if (*buf && IsFileExist(buf)) { m_eInstallMode = IM_FRESH; m_eUpgradeType = UT_NONE; m_bUpgradeTypeHasMetabaseFlag = FALSE; m_bPleaseDoNotInstallByDefault = FALSE; iReturn = TRUE; iisDebugOut((LOG_TYPE_TRACE, _T("%s=1.FrontPage Installation.\n"),sz_PreviousIISVersion_string)); goto SetUpgradeType_Exit; } }
//
// This could be an upgrade from WinNT 3.51
// which could have an FTPSVC installed.
// if it's here then install ftp.
// Software\Microsoft\FTPSVC
//
{ CRegKey regNT351FTP(HKEY_LOCAL_MACHINE, _T("Software\\Microsoft\\FTPSVC"), KEY_READ); if ((HKEY) regNT351FTP) { m_eUpgradeType = UT_351; m_eInstallMode = IM_UPGRADE; m_bUpgradeTypeHasMetabaseFlag = FALSE; m_bPleaseDoNotInstallByDefault = FALSE; iReturn = TRUE; iisDebugOut((LOG_TYPE_TRACE, _T("%s=NT351.ftp.\n"),sz_PreviousIISVersion_string)); goto SetUpgradeType_Exit; } }
// if we get here...then
// 1. we were not able to open the inetsrv reg
// 2. did not find an old pws 1.0 installation
// 3. did not find an old frontpg pws installation.
// 4. did not find nt 3.51 FTPSVC installed.
// since this is supposed to set the upgrade type, and there is nothing to upgrade...
// then we will Not install.....
//iisDebugOut((LOG_TYPE_PROGRAM_FLOW, _T("FRESH FRESH FRESH\n")));
m_eInstallMode = IM_UPGRADE; m_eUpgradeType = UT_NONE; m_bUpgradeTypeHasMetabaseFlag = FALSE; m_bPleaseDoNotInstallByDefault = TRUE; iisDebugOut((LOG_TYPE_TRACE, _T("%s=None.\n"),sz_PreviousIISVersion_string)); iReturn = FALSE;
SetUpgradeType_Exit: return iReturn; }
int CInitApp::Check_Custom_InetPub(void) { int iReturn = FALSE; INFCONTEXT Context; TSTR strSectionName( MAX_PATH ); TSTR_PATH strCustomInetpub( MAX_PATH );
// Do this only if unattended install
if (!g_pTheApp->m_fUnattended) { return iReturn; }
// The section name to look for in the unattended file
if ( !strSectionName.Copy( UNATTEND_FILE_SECTION ) ) { return iReturn; }
//
// InetPub
//
if ( SetupFindFirstLine_Wrapped(g_pTheApp->m_hUnattendFile, strSectionName.QueryStr(), _T("PathInetpub"), &Context) && SetupGetStringField(&Context, 1, strCustomInetpub.QueryStr() , strCustomInetpub.QuerySize(), NULL) && strCustomInetpub.ExpandEnvironmentVariables() ) { if (IsValidDirectoryName(strCustomInetpub.QueryStr())) { iisDebugOut((LOG_TYPE_TRACE, _T("Check_Custom_InetPub:PathInetpub=%s\n"), strCustomInetpub.QueryStr() )); m_csPathInetpub = strCustomInetpub.QueryStr(); iReturn = TRUE; g_pTheApp->dwUnattendConfig |= USER_SPECIFIED_INFO_PATH_INETPUB; } else { iisDebugOut((LOG_TYPE_WARN, _T("Check_Custom_InetPub:PathInetpub=%s.Not Valid.ignoring unattend value. WARNING.\n"),strCustomInetpub.QueryStr())); } }
return iReturn; }
void CInitApp::Check_Unattend_Settings(void) { // if there are unattended values specified for the ftp or www root,
// then set them here.
Check_Custom_WWW_or_FTP_Path(); DeriveInetpubFromWWWRoot();
// Check if there is an alternate iis.inf specified in the unattend file.
// this way the user can change sections in the iis.inf file without changing the iis.inf file itself
Check_Custom_IIS_INF();
// Check if the user wants to use a specific iusr\iwam name.
Check_Custom_Users();
// Check if the user wants to not automatically start WWW and/or FTP services
Check_SvcManualStart();
// Check if user wants applications setup in inprocess by default (not pooled out of process)
return; }
void Check_SvcManualStart() { // Unattend flag format
// SvcManualStart=WWW,FTP
INFCONTEXT Context; TCHAR szSectionName[_MAX_PATH]; TCHAR szValue[_MAX_PATH] = _T("");
// Do this only if unattended install
if ( !g_pTheApp->m_fUnattended ) return;
// The section name to look for in the unattended file
_tcscpy(szSectionName, UNATTEND_FILE_SECTION);
if ( !SetupFindFirstLine_Wrapped( g_pTheApp->m_hUnattendFile, szSectionName, _T("SvcManualStart"), &Context) ) { // No such line
return; }
int i = 1; // This is the specific part of the line ( www, ftp )
while( SetupGetStringField( &Context, i++, szValue, _MAX_PATH, NULL ) ) { if ( *szValue ) { if ( ::_tcsicmp( szValue, _T("WWW") ) == 0 ) { g_pTheApp->dwUnattendConfig |= USER_SPECIFIED_INFO_MANUAL_START_WWW; iisDebugOut((LOG_TYPE_TRACE, _T("(unattend) Manual start requested for WWW service\n"))); } else if ( ::_tcsicmp( szValue, _T("FTP") ) == 0 ) { g_pTheApp->dwUnattendConfig |= USER_SPECIFIED_INFO_MANUAL_START_FTP; iisDebugOut((LOG_TYPE_TRACE, _T("(unattend) Manual start requested for FTP service\n"))); } } } }
void Check_Custom_Users(void) { INFCONTEXT Context; TSTR strSectionName( MAX_PATH ); TSTR_PATH strValue( MAX_PATH );
// Do this only if unattended install
if (!g_pTheApp->m_fUnattended) { return; }
// The section name to look for in the unattended file
if ( !strSectionName.Copy( UNATTEND_FILE_SECTION ) ) { return; }
//
// IUSR: BOTH FTP AND WWW
//
if ( SetupFindFirstLine_Wrapped(g_pTheApp->m_hUnattendFile, strSectionName.QueryStr(), _T("IUSR"), &Context) && SetupGetStringField(&Context, 1, strValue.QueryStr() , strValue.QuerySize(), NULL) && strValue.ExpandEnvironmentVariables() ) { if (_tcsicmp(strValue.QueryStr(), _T("")) != 0) { // assign it to the appropriate member variables.
g_pTheApp->m_csWWWAnonyName_Unattend = strValue.QueryStr(); g_pTheApp->m_csFTPAnonyName_Unattend = strValue.QueryStr();
g_pTheApp->dwUnattendConfig |= USER_SPECIFIED_INFO_WWW_USER_NAME; g_pTheApp->dwUnattendConfig |= USER_SPECIFIED_INFO_FTP_USER_NAME;
iisDebugOut((LOG_TYPE_TRACE, _T("(unattend) Custom iusr specified for ftp/www\n"))); } }
//
// IUSR: BOTH FTP AND WWW password
//
if ( SetupFindFirstLine_Wrapped(g_pTheApp->m_hUnattendFile, strSectionName.QueryStr(), _T("IUSR_PASS"), &Context) && SetupGetStringField(&Context, 1, strValue.QueryStr() , strValue.QuerySize(), NULL) && strValue.ExpandEnvironmentVariables() ) { // assign it to the appropriate member variables.
if (_tcsicmp(strValue.QueryStr(), _T("")) != 0) { g_pTheApp->m_csWWWAnonyPassword_Unattend = strValue.QueryStr(); g_pTheApp->m_csFTPAnonyPassword_Unattend = strValue.QueryStr();
g_pTheApp->dwUnattendConfig |= USER_SPECIFIED_INFO_WWW_USER_PASS; g_pTheApp->dwUnattendConfig |= USER_SPECIFIED_INFO_FTP_USER_PASS;
iisDebugOut((LOG_TYPE_TRACE, _T("(unattend) Custom iusr pass specified for ftp/www\n"))); } }
//
// IUSR: FTP
// If there a value specified here, then it will override the one taken from "IUSR"
//
if ( SetupFindFirstLine_Wrapped(g_pTheApp->m_hUnattendFile, strSectionName.QueryStr(), _T("IUSR_FTP"), &Context) && SetupGetStringField(&Context, 1, strValue.QueryStr() , strValue.QuerySize(), NULL) && strValue.ExpandEnvironmentVariables() ) { if (_tcsicmp(strValue.QueryStr(), _T("")) != 0) { // assign it to the appropriate member variables.
g_pTheApp->m_csFTPAnonyName_Unattend = strValue.QueryStr();
g_pTheApp->dwUnattendConfig |= USER_SPECIFIED_INFO_FTP_USER_NAME;
iisDebugOut((LOG_TYPE_TRACE, _T("(unattend) Custom iusr specified for ftp\n"))); } }
//
// IUSR: FTP password
//
if ( SetupFindFirstLine_Wrapped(g_pTheApp->m_hUnattendFile, strSectionName.QueryStr(), _T("IUSR_FTP_PASS"), &Context) && SetupGetStringField(&Context, 1, strValue.QueryStr() , strValue.QuerySize(), NULL) && strValue.ExpandEnvironmentVariables() ) { if (_tcsicmp(strValue.QueryStr(), _T("")) != 0) { // assign it to the appropriate member variables.
g_pTheApp->m_csFTPAnonyPassword_Unattend = strValue.QueryStr(); g_pTheApp->dwUnattendConfig |= USER_SPECIFIED_INFO_FTP_USER_PASS;
iisDebugOut((LOG_TYPE_TRACE, _T("(unattend) Custom iusr pass specified for ftp\n"))); }
}
//
// IUSR: WWW
// If there a value specified here, then it will override the one taken from "IUSR"
//
if ( SetupFindFirstLine_Wrapped(g_pTheApp->m_hUnattendFile, strSectionName.QueryStr(), _T("IUSR_WWW"), &Context) && SetupGetStringField(&Context, 1, strValue.QueryStr() , strValue.QuerySize(), NULL) && strValue.ExpandEnvironmentVariables() ) { // assign it to the appropriate member variables.
g_pTheApp->m_csWWWAnonyName_Unattend = strValue.QueryStr(); g_pTheApp->dwUnattendConfig |= USER_SPECIFIED_INFO_WWW_USER_NAME; //g_pTheApp->m_csWWWAnonyPassword_Unattend = _T("");
iisDebugOut((LOG_TYPE_TRACE, _T("(unattend) Custom iusr specified for www\n"))); }
//
// IUSR: WWW password
// If there a value specified here, then it will override the one taken from "IUSR"
//
if ( SetupFindFirstLine_Wrapped(g_pTheApp->m_hUnattendFile, strSectionName.QueryStr(), _T("IUSR_WWW_PASS"), &Context) && SetupGetStringField(&Context, 1, strValue.QueryStr() , strValue.QuerySize(), NULL) && strValue.ExpandEnvironmentVariables() ) { if (_tcsicmp(strValue.QueryStr(), _T("")) != 0) { // assign it to the appropriate member variables.
g_pTheApp->m_csWWWAnonyPassword_Unattend = strValue.QueryStr(); g_pTheApp->dwUnattendConfig |= USER_SPECIFIED_INFO_WWW_USER_PASS;
iisDebugOut((LOG_TYPE_TRACE, _T("(unattend) Custom iusr pass specified for www\n"))); } }
//
// IWAM: WWW
//
if ( SetupFindFirstLine_Wrapped(g_pTheApp->m_hUnattendFile, strSectionName.QueryStr(), _T("IWAM"), &Context) && SetupGetStringField(&Context, 1, strValue.QueryStr() , strValue.QuerySize(), NULL) && strValue.ExpandEnvironmentVariables() ) { // assign it to the appropriate member variables.
g_pTheApp->m_csWAMAccountName_Unattend = strValue.QueryStr(); g_pTheApp->dwUnattendConfig |= USER_SPECIFIED_INFO_WAM_USER_NAME;
iisDebugOut((LOG_TYPE_TRACE, _T("(unattend) Custom iwam specified\n"))); }
//
// IWAM: WWW password
//
if ( SetupFindFirstLine_Wrapped(g_pTheApp->m_hUnattendFile, strSectionName.QueryStr(), _T("IWAM_PASS"), &Context) && SetupGetStringField(&Context, 1, strValue.QueryStr() , strValue.QuerySize(), NULL) && strValue.ExpandEnvironmentVariables() ) { if (_tcsicmp(strValue.QueryStr(), _T("")) != 0) { // assign it to the appropriate member variables.
g_pTheApp->m_csWAMAccountPassword_Unattend = strValue.QueryStr(); g_pTheApp->dwUnattendConfig |= USER_SPECIFIED_INFO_WAM_USER_PASS;
iisDebugOut((LOG_TYPE_TRACE, _T("(unattend) Custom iwam pass specified\n"))); } }
return; }
// reads the registry and fills up the list
void CInitApp::UnInstallList_RegRead() { int iGetOut = FALSE; CString csBoth; CString csKey; CString csData;
CRegKey regInetstp( HKEY_LOCAL_MACHINE, REG_INETSTP, KEY_READ); if ((HKEY) regInetstp) { int iPosition1; int iLength; CString csUninstallInfo; LONG lReturnedErrCode = regInetstp.QueryValue( REG_SETUP_UNINSTALLINFO, csUninstallInfo); if (lReturnedErrCode == ERROR_SUCCESS) { // add a "," to the end for parsing...
iLength = csUninstallInfo.GetLength(); if (iLength == 0) { goto UnInstallList_RegRead_Exit; } csUninstallInfo += _T(",");
iPosition1 = 0; #ifdef _CHICAGO_
// quick fix so that it compiles under ansi
// i guess Find(parm1,parm2) under ansi doesn't take 2 parms
#else
int iPosition2; int iPosition3;
iPosition1 = 0; iPosition2 = csUninstallInfo.Find(_T(','),iPosition1); iPosition3 = csUninstallInfo.Find(_T(','),iPosition2+1); if (-1 == iPosition3){iPosition3 = iLength + 1;} // loop thru and add to our list!
iGetOut = FALSE; while (iGetOut == FALSE) { csKey = csUninstallInfo.Mid(iPosition1, iPosition2 - iPosition1); csData = csUninstallInfo.Mid(iPosition2+1, iPosition3 - (iPosition2 + 1)); csKey.MakeUpper(); // uppercase the key
//iisDebugOut((LOG_TYPE_TRACE, _T(" UnInstallList_RegRead: %s=%s\n"),csKey,csData));
// add to our list
m_cmssUninstallMapList.SetAt(csKey, csData);
iPosition1 = iPosition3+1; iPosition2 = csUninstallInfo.Find(_T(','),iPosition1); if (-1 == iPosition2){iGetOut = TRUE;} iPosition3 = csUninstallInfo.Find(_T(','),iPosition2+1); if (-1 == iPosition3) { iPosition3 = iLength + 1; iGetOut = TRUE; } } #endif
} } UnInstallList_RegRead_Exit: m_fUninstallMapList_Dirty = FALSE; return; }
void CInitApp::UnInstallList_RegWrite() { int i = 0; POSITION pos; CString csKey; CString csData; CString csAllData; csAllData = _T("");
if (TRUE == m_fUninstallMapList_Dirty) { // loop thru the list to see if, we already have this entry
if (m_cmssUninstallMapList.IsEmpty()) { CRegKey regInetstp(REG_INETSTP,HKEY_LOCAL_MACHINE); if ((HKEY) regInetstp) {regInetstp.DeleteValue(REG_SETUP_UNINSTALLINFO);} //iisDebugOut((LOG_TYPE_TRACE, _T(" UnInstallList_RegWrite: empty\n")));
} else { pos = m_cmssUninstallMapList.GetStartPosition(); while (pos) { i++; csKey.Empty(); csData.Empty(); m_cmssUninstallMapList.GetNextAssoc(pos, csKey, csData); if (i > 1) { csAllData += _T(","); } csAllData += csKey; csAllData += _T(","); csAllData += csData; } // write out csAllData
CRegKey regInetstp(REG_INETSTP,HKEY_LOCAL_MACHINE); if ((HKEY) regInetstp) { regInetstp.SetValue(REG_SETUP_UNINSTALLINFO,csAllData); } else { iisDebugOut((LOG_TYPE_TRACE, _T("UnInstallList_RegWrite: failed! not writen!!!\n"))); } } } }
void CInitApp::UnInstallList_Add(CString csItemUniqueKeyName,CString csDataToAdd) { CString csGottenValue;
csItemUniqueKeyName.MakeUpper(); // uppercase the key
if (TRUE == m_cmssUninstallMapList.Lookup(csItemUniqueKeyName, csGottenValue)) { // found the key, replace the value
m_cmssUninstallMapList.SetAt(csItemUniqueKeyName, csDataToAdd); } else { // add the key and value pair
m_cmssUninstallMapList.SetAt(csItemUniqueKeyName, csDataToAdd); }
iisDebugOut((LOG_TYPE_TRACE, _T("UnInstallList_Add:please addkey=%s,%s\n"),csItemUniqueKeyName,csDataToAdd)); m_fUninstallMapList_Dirty = TRUE; }
void CInitApp::UnInstallList_DelKey(CString csItemUniqueKeyName) { iisDebugOut((LOG_TYPE_TRACE, _T("UnInstallList_DelKey:please delkey=%s\n"),csItemUniqueKeyName)); csItemUniqueKeyName.MakeUpper(); // uppercase the key
m_cmssUninstallMapList.RemoveKey(csItemUniqueKeyName); m_fUninstallMapList_Dirty = TRUE; }
void CInitApp::UnInstallList_DelData(CString csDataValue) { POSITION pos; CString csKey; CString csData; // loop thru the list to see if, we already have this entry
if (m_cmssUninstallMapList.IsEmpty()) { } else { pos = m_cmssUninstallMapList.GetStartPosition(); while (pos) { csKey.Empty(); csData.Empty(); m_cmssUninstallMapList.GetNextAssoc(pos, csKey, csData); if ( _tcsicmp(csData, csDataValue) == 0) { UnInstallList_DelKey(csKey); } } } }
void CInitApp::UnInstallList_Dump() { POSITION pos; CString csKey; CString csData; // loop thru the list to see if, we already have this entry
if (m_cmssUninstallMapList.IsEmpty()) { //iisDebugOut((LOG_TYPE_TRACE, _T(" UnInstallList_Dump: empty\n")));
} else { pos = m_cmssUninstallMapList.GetStartPosition(); while (pos) { csKey.Empty(); csData.Empty(); m_cmssUninstallMapList.GetNextAssoc(pos, csKey, csData); iisDebugOut((LOG_TYPE_TRACE_WIN32_API, _T(" UnInstallList_Dump: %s=%s\n"), csKey, csData)); } } }
// Get values from list into our Variables!
void CInitApp::UnInstallList_SetVars() { POSITION pos; CString csKey; CString csData; // loop thru the list to see if, we already have this entry
if (m_cmssUninstallMapList.IsEmpty()) { //iisDebugOut((LOG_TYPE_TRACE, _T(" UnInstallList_Dump: empty\n")));
} else { pos = m_cmssUninstallMapList.GetStartPosition(); while (pos) { csKey.Empty(); csData.Empty(); m_cmssUninstallMapList.GetNextAssoc(pos, csKey, csData);
if ( _tcsicmp(csKey, _T("IUSR_WAM")) == 0) { m_csWAMAccountName_Remove = csData; iisDebugOut((LOG_TYPE_TRACE_WIN32_API, _T("UnInstallList_SetVars: m_csWAMAccountName_Remove=%s\n"), m_csWAMAccountName_Remove)); } else if ( _tcsicmp(csKey, _T("IUSR_WWW")) == 0) { m_csWWWAnonyName_Remove = csData; iisDebugOut((LOG_TYPE_TRACE_WIN32_API, _T("UnInstallList_SetVars: m_csWWWAnonyName_Remove=%s\n"), m_csWWWAnonyName_Remove)); } else if ( _tcsicmp(csKey, _T("IUSR_FTP")) == 0) { m_csFTPAnonyName_Remove = csData; iisDebugOut((LOG_TYPE_TRACE_WIN32_API, _T("UnInstallList_SetVars: m_csFTPAnonyName_Remove=%s\n"), m_csFTPAnonyName_Remove)); } } } }
CString CInitApp::UnInstallList_QueryKey(CString csItemUniqueKeyName) { CString csGottenValue; csGottenValue.Empty();
csItemUniqueKeyName.MakeUpper(); // uppercase the key
m_cmssUninstallMapList.Lookup(csItemUniqueKeyName, csGottenValue);
return csGottenValue; }
// InitApplicationforSysPrep
//
// Do the initialization work necessary for sysprep to work
//
BOOL CInitApp::InitApplicationforSysPrep() { if ( !GetSysDirs() ) { return FALSE; }
// Speficy this, so that it thinks it is an upgrade, and
// we will set the current IUSR_ and IWAM_ correctly
// later on
m_eUpgradeType = UT_60;
SetInetpubDir(); SetInetpubDerivatives();
return TRUE; }
|