mirror of https://github.com/lianthony/NT4.0
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
662 lines
16 KiB
662 lines
16 KiB
//----------------------------------------------------------------------------
|
|
//
|
|
// File: WNetType.cpp
|
|
//
|
|
// Contents: This file contains the wizard page for internet server
|
|
//
|
|
//
|
|
// Notes:
|
|
//
|
|
// History:
|
|
// July 8, 1995 MikeMi - Created
|
|
//
|
|
//
|
|
//----------------------------------------------------------------------------
|
|
|
|
#include "pch.hxx"
|
|
#pragma hdrstop
|
|
|
|
static BOOL g_fProcessed = FALSE;
|
|
|
|
//-------------------------------------------------------------------
|
|
//
|
|
// Function:
|
|
//
|
|
// Synopsis:
|
|
//
|
|
// Arguments:
|
|
// hwndDlg [in] - handle of Dialog window
|
|
//
|
|
// Return;
|
|
//
|
|
// Notes:
|
|
//
|
|
// History:
|
|
// August 23, 1995 MikeMi - Created
|
|
//
|
|
//
|
|
//-------------------------------------------------------------------
|
|
|
|
PWSTR AppendCommand( PWSTR pszCommandLine, PCWSTR pszKey, PCWSTR pszValue, BOOL fQuotes = FALSE )
|
|
{
|
|
PWSTR pszNew;
|
|
INT cchNewSize;
|
|
|
|
if (NULL != pszCommandLine)
|
|
{
|
|
cchNewSize = lstrlen( pszCommandLine );
|
|
}
|
|
else
|
|
{
|
|
cchNewSize = 0;
|
|
}
|
|
if (NULL != pszKey)
|
|
{
|
|
cchNewSize += lstrlen( pszKey );
|
|
}
|
|
if (NULL != pszValue)
|
|
{
|
|
cchNewSize += lstrlen( pszValue );
|
|
}
|
|
|
|
if (fQuotes)
|
|
{
|
|
cchNewSize += 2; // quotes around value
|
|
}
|
|
cchNewSize += 2; // begining space and null terminator
|
|
|
|
pszNew = new WCHAR[cchNewSize];
|
|
if (NULL != pszCommandLine)
|
|
{
|
|
lstrcpy( pszNew, pszCommandLine );
|
|
}
|
|
else
|
|
{
|
|
lstrcpy( pszNew, L"" );
|
|
}
|
|
lstrcat( pszNew, L" " );
|
|
if (NULL != pszKey)
|
|
{
|
|
lstrcat( pszNew, pszKey );
|
|
}
|
|
if (fQuotes)
|
|
{
|
|
lstrcat( pszNew, L"\"" );
|
|
}
|
|
if (NULL != pszValue)
|
|
{
|
|
lstrcat( pszNew, pszValue );
|
|
}
|
|
|
|
if (fQuotes)
|
|
{
|
|
lstrcat( pszNew, L"\"" );
|
|
}
|
|
if (NULL != pszCommandLine)
|
|
{
|
|
delete [] pszCommandLine;
|
|
}
|
|
return( pszNew );
|
|
|
|
}
|
|
|
|
//-------------------------------------------------------------------
|
|
//
|
|
// Function:
|
|
//
|
|
// Synopsis:
|
|
//
|
|
// Arguments:
|
|
// hwndDlg [in] - handle of Dialog window
|
|
//
|
|
// Return;
|
|
//
|
|
// Notes:
|
|
//
|
|
// History:
|
|
// August 23, 1995 MikeMi - Created
|
|
//
|
|
//
|
|
//-------------------------------------------------------------------
|
|
|
|
BOOL InstallInternetServer( HWND hwnd, PINTERNAL_SETUP_DATA psp )
|
|
{
|
|
// if requested to install or upgrade, go ahead an call the install
|
|
//
|
|
if ((psp->OperationFlags & SETUPOPER_INTERNETSERVER) ||
|
|
(psp->OperationFlags & SETUPOPER_NTUPGRADE))
|
|
{
|
|
|
|
WCHAR pszSection[LTEMPSTR_SIZE] = L"";
|
|
DWORD cchBuffer = LTEMPSTR_SIZE - 1;
|
|
DWORD cchRequired;
|
|
BOOL frt = FALSE;
|
|
PWSTR pszCommandLine = NULL;
|
|
WCHAR pszCurrDir[MAX_PATH+1];
|
|
WCHAR pszPrevCurrDir[MAX_PATH+1];
|
|
|
|
// build the working and current directory
|
|
//
|
|
lstrcpy( pszCurrDir, psp->LegacySourcePath );
|
|
lstrcat( pszCurrDir, L"\\inetsrv");
|
|
|
|
//
|
|
// called from main install
|
|
//
|
|
pszCommandLine = AppendCommand( pszCommandLine, NULL, L"/N" );
|
|
|
|
//
|
|
// unattended, install
|
|
//
|
|
if (!(SETUPOPER_NTUPGRADE & psp->OperationFlags) &&
|
|
(SETUPOPER_BATCH & psp->OperationFlags) )
|
|
{
|
|
UINT iErrorLine;
|
|
HINF hinfInstall;
|
|
|
|
// open the unattended file
|
|
hinfInstall = SetupOpenInfFile( psp->UnattendFile, NULL, INF_STYLE_OLDNT, &iErrorLine );
|
|
if (INVALID_HANDLE_VALUE != hinfInstall)
|
|
{
|
|
INFCONTEXT infc;
|
|
BOOL fIncludeSection = TRUE;
|
|
|
|
if (SetupFindFirstLine( hinfInstall, PSZ_SECTION_NETWORK, PSZ_KEY_INTERNETSERVER, &infc ))
|
|
{
|
|
// retrieve the install section
|
|
frt = SetupGetStringField(&infc, 1, pszSection, cchBuffer, &cchRequired );
|
|
|
|
}
|
|
else
|
|
{
|
|
// IIS install key not found
|
|
// if server product then install with no section name
|
|
//
|
|
if (PRODUCT_WORKSTATION != psp->ProductType)
|
|
{
|
|
frt = TRUE;
|
|
fIncludeSection = FALSE;
|
|
}
|
|
}
|
|
|
|
if (frt)
|
|
{
|
|
pszCommandLine = AppendCommand( pszCommandLine, L"/B ", psp->UnattendFile );
|
|
// only include the section param if the section name has a value
|
|
//
|
|
if (fIncludeSection)
|
|
{
|
|
pszCommandLine = AppendCommand( pszCommandLine, L"/Z ", pszSection );
|
|
}
|
|
}
|
|
else
|
|
{
|
|
MessagePopup( hwnd,
|
|
IDS_NS_INVALIDUNATTEND,
|
|
MB_OK | MB_ICONERROR,
|
|
IDS_POPUPTITLE_ERROR,
|
|
PSZ_KEY_INTERNETSERVER );
|
|
|
|
}
|
|
SetupCloseInfFile( hinfInstall );
|
|
}
|
|
}
|
|
|
|
//
|
|
// upgrade
|
|
//
|
|
if (SETUPOPER_NTUPGRADE & psp->OperationFlags)
|
|
{
|
|
pszCommandLine = AppendCommand( pszCommandLine, L"/U", NULL );
|
|
|
|
// unattended upgrade
|
|
//
|
|
if (SETUPOPER_BATCH & psp->OperationFlags)
|
|
{
|
|
pszCommandLine = AppendCommand( pszCommandLine, L"/W", NULL );
|
|
}
|
|
}
|
|
|
|
|
|
STARTUPINFO sui;
|
|
PROCESS_INFORMATION pi;
|
|
|
|
// define the startup info
|
|
sui.cb = sizeof( STARTUPINFO );
|
|
sui.lpReserved = NULL;
|
|
sui.lpDesktop = NULL;
|
|
sui.lpTitle = NULL;
|
|
sui.dwFlags = 0;
|
|
sui.cbReserved2 = 0;
|
|
sui.lpReserved2 = NULL;
|
|
|
|
::GetCurrentDirectory( MAX_PATH, pszPrevCurrDir );
|
|
|
|
::SetCurrentDirectory( pszCurrDir );
|
|
|
|
if (::CreateProcess( L"inetstp.exe",
|
|
pszCommandLine,
|
|
NULL,
|
|
NULL,
|
|
FALSE,
|
|
DETACHED_PROCESS,
|
|
NULL,
|
|
pszCurrDir,
|
|
&sui,
|
|
&pi ))
|
|
{
|
|
WaitForSingleObject( pi.hProcess, INFINITE );
|
|
CloseHandle( pi.hThread );
|
|
CloseHandle( pi.hProcess );
|
|
}
|
|
::SetCurrentDirectory( pszPrevCurrDir );
|
|
}
|
|
else
|
|
{
|
|
|
|
// on server product, if the IIS is not installed,
|
|
// then add icons to the desktop so that it can be
|
|
// installed
|
|
//
|
|
if (PRODUCT_WORKSTATION != psp->ProductType)
|
|
{
|
|
|
|
APIERR err;
|
|
WCHAR pszDescription[MAX_PATH+1];
|
|
|
|
LoadString( g_hinst, IDS_NS_IIS_ICONTITLE, pszDescription, MAX_PATH );
|
|
|
|
err = AddDesktopItem( TRUE, // common item
|
|
pszDescription,
|
|
L"inetins.exe",
|
|
NULL, // icon path, NULL will use command program
|
|
0, // Icon Index
|
|
NULL, // working directory (NULL will defualt to home)
|
|
0, // hot key
|
|
SW_SHOWNORMAL); // command show
|
|
|
|
}
|
|
}
|
|
return( TRUE );
|
|
}
|
|
|
|
|
|
//-------------------------------------------------------------------
|
|
//
|
|
// Function:
|
|
//
|
|
// Synopsis:
|
|
//
|
|
// Arguments:
|
|
// hwndDlg [in] - handle of Dialog window
|
|
//
|
|
// Return;
|
|
//
|
|
// Notes:
|
|
//
|
|
// History:
|
|
// August 23, 1995 MikeMi - Created
|
|
//
|
|
//
|
|
//-------------------------------------------------------------------
|
|
|
|
static BOOL OnClick( HWND hwndDlg, INT idCtl, HWND hwndCtl, NETPAGESINFO* pgp )
|
|
{
|
|
BOOL frt = TRUE;
|
|
|
|
switch (idCtl)
|
|
{
|
|
case IDC_INTERNETSERVER:
|
|
{
|
|
BOOL fChecked = IsDlgButtonChecked( hwndDlg, IDC_INTERNETSERVER);
|
|
|
|
IncludeComponent( PSZ_TCPIP_OPTION,
|
|
pgp->dlinfUIProtocols,
|
|
pgp->dlinfAllProtocols,
|
|
fChecked );
|
|
IncludeComponent( PSZ_IIS_OPTION,
|
|
pgp->dlinfUIServices,
|
|
pgp->dlinfAllServices,
|
|
fChecked,
|
|
TRUE );
|
|
}
|
|
break;
|
|
|
|
default:
|
|
frt = FALSE;
|
|
break;
|
|
}
|
|
return( frt );
|
|
}
|
|
|
|
//-------------------------------------------------------------------
|
|
//
|
|
// Function: OnDialogInit
|
|
//
|
|
// Synopsis: initialization of the dialog
|
|
//
|
|
// Arguments:
|
|
// hwndDlg [in] - handle of Dialog window
|
|
//
|
|
// Return;
|
|
// TRUE - let Windows assign focus to a control
|
|
// FALSE - we want to set the focus
|
|
//
|
|
// Notes:
|
|
//
|
|
// History:
|
|
// July 8, 1995 MikeMi - Created
|
|
//
|
|
//
|
|
//-------------------------------------------------------------------
|
|
|
|
static BOOL OnDialogInit( HWND hwndDlg, NETPAGESINFO* pgp )
|
|
{
|
|
|
|
HBITMAP hbm;
|
|
HWND hwndImage;
|
|
RECT rc;
|
|
|
|
SetRect( &rc, 0,0, WIZ_CXBMP, WIZ_CYDLG + 20 );
|
|
MapDialogRect( hwndDlg, &rc );
|
|
|
|
hwndImage = CreateWindowEx(
|
|
WS_EX_STATICEDGE,
|
|
L"STATIC",
|
|
L"",
|
|
SS_BITMAP | SS_CENTERIMAGE | WS_VISIBLE | WS_CHILD,
|
|
0,
|
|
0,
|
|
rc.right,
|
|
rc.bottom,
|
|
hwndDlg,
|
|
(HMENU)IDC_IMAGE,
|
|
g_hinst,
|
|
NULL );
|
|
|
|
SendMessage( hwndImage, STM_SETIMAGE, (WPARAM)IMAGE_BITMAP, (LPARAM)g_hbmWizInternet );
|
|
|
|
|
|
// default to install internet server, if not unattended
|
|
//
|
|
if (!(SETUPOPER_BATCH & pgp->psp->OperationFlags))
|
|
{
|
|
IncludeComponent( PSZ_TCPIP_OPTION,
|
|
pgp->dlinfUIProtocols,
|
|
pgp->dlinfAllProtocols,
|
|
TRUE );
|
|
IncludeComponent( PSZ_IIS_OPTION,
|
|
pgp->dlinfUIServices,
|
|
pgp->dlinfAllServices,
|
|
TRUE,
|
|
TRUE );
|
|
CheckDlgButton( hwndDlg, IDC_INTERNETSERVER, BST_CHECKED );
|
|
}
|
|
|
|
|
|
return( TRUE ); // let windows set focus
|
|
}
|
|
|
|
|
|
//-------------------------------------------------------------------
|
|
//
|
|
// Function:
|
|
//
|
|
// Synopsis:
|
|
//
|
|
// Arguments:
|
|
// hwndDlg [in] - handle of Dialog window
|
|
//
|
|
// Return;
|
|
//
|
|
// Notes:
|
|
//
|
|
// History:
|
|
// August 23, 1995 MikeMi - Created
|
|
//
|
|
//
|
|
//-------------------------------------------------------------------
|
|
|
|
static BOOL OnWizNext( HWND hwndDlg, NETPAGESINFO* pgp )
|
|
{
|
|
INT nPageId = 0;
|
|
|
|
if ((pgp->nwtInstall & SPNT_LOCAL) ||
|
|
((pgp->nwtInstall & SPNT_REMOTE) && (SETUPMODE_CUSTOM == pgp->psp->SetupMode) ) )
|
|
{
|
|
// goto netcards page if the user selected wired to a network or
|
|
// remote access and custom mode install
|
|
nPageId = IDD_NETWORKCARDS;
|
|
}
|
|
else
|
|
{
|
|
// remote access only, and not a custom install
|
|
nPageId = IDD_NETWORKPROTOCOLS;
|
|
}
|
|
|
|
|
|
PropSheet_SetCurSelByID( GetParent( hwndDlg ), nPageId );
|
|
SetWindowLong( hwndDlg, DWL_MSGRESULT, -1 );
|
|
return( -1 );
|
|
}
|
|
|
|
//-------------------------------------------------------------------
|
|
//
|
|
// Function:
|
|
//
|
|
// Synopsis:
|
|
//
|
|
// Arguments:
|
|
// hwndDlg [in] - handle of Dialog window
|
|
//
|
|
// Return;
|
|
//
|
|
// Notes:
|
|
//
|
|
// History:
|
|
//
|
|
//-------------------------------------------------------------------
|
|
|
|
static BOOL OnPageActivate( HWND hwndDlg, NETPAGESINFO* pgp )
|
|
{
|
|
BOOL frt = TRUE;
|
|
//
|
|
// set the wizard title, since it does not support letting the
|
|
// caller of PropertySheet do it.
|
|
//
|
|
PropSheet_SetTitle(GetParent(hwndDlg), 0, pgp->psp->WizardTitle );
|
|
|
|
// ok to gain being active
|
|
SetWindowLong( hwndDlg, DWL_MSGRESULT, 0 );
|
|
|
|
// unattended install
|
|
//
|
|
if (!g_fProcessed && SETUPOPER_BATCH & pgp->psp->OperationFlags)
|
|
{
|
|
UINT iErrorLine;
|
|
INFCONTEXT infc;
|
|
|
|
PropSheet_SetWizButtons( GetParent( hwndDlg ), 0 );
|
|
|
|
|
|
if (SetupFindFirstLine( pgp->hinfInstall, PSZ_SECTION_NETWORK, PSZ_KEY_NOINTERNETSERVER, &infc ))
|
|
{
|
|
// the no install internet server key was found, so we won't install it
|
|
}
|
|
else
|
|
{
|
|
BOOL fInstallIIS = FALSE;
|
|
|
|
// was the key to install IIS found?
|
|
if (SetupFindFirstLine( pgp->hinfInstall, PSZ_SECTION_NETWORK, PSZ_KEY_INTERNETSERVER, &infc ))
|
|
{
|
|
fInstallIIS = TRUE;
|
|
}
|
|
else
|
|
{
|
|
// on server product, if no key to install or not to install, then
|
|
// degfault to install
|
|
if (PRODUCT_WORKSTATION != pgp->psp->ProductType)
|
|
{
|
|
fInstallIIS = TRUE;
|
|
}
|
|
}
|
|
|
|
if (fInstallIIS)
|
|
{
|
|
IncludeComponent( PSZ_IIS_OPTION,
|
|
pgp->dlinfUIServices,
|
|
pgp->dlinfAllServices,
|
|
TRUE,
|
|
TRUE );
|
|
CheckDlgButton( hwndDlg, IDC_INTERNETSERVER, BST_CHECKED );
|
|
}
|
|
}
|
|
g_fProcessed = TRUE;
|
|
PostMessage( GetParent( hwndDlg ), PSM_PRESSBUTTON, (WPARAM)(PSBTN_NEXT), 0 );
|
|
}
|
|
|
|
// enable all buttons
|
|
PropSheet_SetWizButtons( GetParent( hwndDlg ), (PSWIZB_NEXT | PSWIZB_BACK) );
|
|
// set the focus to the correct control
|
|
// SetFocus( GetDlgItem( GetParent( hwndDlg ), IDC_WIZBNEXT ));
|
|
|
|
return( frt );
|
|
}
|
|
|
|
|
|
//-------------------------------------------------------------------
|
|
//
|
|
// Function: dlgprocInternetServer
|
|
//
|
|
// Synopsis: the dialog proc for the internet server page
|
|
//
|
|
// Arguments:
|
|
// hwndDlg [in] - handle of Dialog window
|
|
// uMsg [in] - message
|
|
// lParam1 [in] - first message parameter
|
|
// lParam2 [in] - second message parameter
|
|
//
|
|
// Return;
|
|
// message dependant
|
|
//
|
|
// Notes:
|
|
//
|
|
// History:
|
|
// July 8, 1995 MikeMi - Created
|
|
//
|
|
//
|
|
//-------------------------------------------------------------------
|
|
|
|
BOOL CALLBACK dlgprocInternetServer( HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam )
|
|
{
|
|
BOOL frt = FALSE;
|
|
static NETPAGESINFO* pgp = NULL;
|
|
static INT crefHourGlass = 0;
|
|
|
|
switch (uMsg)
|
|
{
|
|
case WM_INITDIALOG:
|
|
{
|
|
PROPSHEETPAGE* psp = (PROPSHEETPAGE*)lParam;
|
|
pgp = (NETPAGESINFO*)psp->lParam;
|
|
}
|
|
frt = OnDialogInit( hwndDlg, pgp );
|
|
break;
|
|
|
|
case WM_COMMAND:
|
|
switch (HIWORD(wParam))
|
|
{
|
|
case BN_CLICKED:
|
|
frt = OnClick( hwndDlg, LOWORD(wParam), (HWND) lParam, pgp );
|
|
break;
|
|
|
|
default:
|
|
frt = FALSE;
|
|
break;
|
|
}
|
|
break;
|
|
|
|
case WM_NOTIFY:
|
|
{
|
|
LPNMHDR pnmh = (LPNMHDR)lParam;
|
|
|
|
switch (pnmh->code)
|
|
{
|
|
// propsheet notification
|
|
case PSN_HELP:
|
|
break;
|
|
|
|
case PSN_SETACTIVE:
|
|
frt = OnPageActivate( hwndDlg, pgp );
|
|
|
|
break;
|
|
|
|
case PSN_KILLACTIVE:
|
|
// ok to loose being active
|
|
SetWindowLong( hwndDlg, DWL_MSGRESULT, FALSE );
|
|
frt = TRUE;
|
|
break;
|
|
|
|
case PSN_WIZNEXT:
|
|
frt = OnWizNext( hwndDlg, pgp );
|
|
break;
|
|
|
|
default:
|
|
frt = FALSE;
|
|
break;
|
|
}
|
|
}
|
|
break;
|
|
|
|
case PWM_CURSORWAIT:
|
|
frt = HandleCursorWait( hwndDlg, (BOOL)lParam, crefHourGlass );
|
|
break;
|
|
|
|
case WM_SETCURSOR:
|
|
frt = HandleSetCursor( hwndDlg, LOWORD(lParam), crefHourGlass );
|
|
break;
|
|
default:
|
|
frt = FALSE;
|
|
break;
|
|
}
|
|
return( frt );
|
|
}
|
|
|
|
|
|
//-------------------------------------------------------------------
|
|
//
|
|
// Function: GetInterntNetServerHPage
|
|
//
|
|
// Synopsis: This will create a handle to property sheet for the
|
|
// internet server page.
|
|
//
|
|
// Arguments:
|
|
//
|
|
// Returns:
|
|
// a handle to a newly created propertysheet; NULL if error
|
|
//
|
|
// Notes:
|
|
//
|
|
// History:
|
|
// April 27, 1995 MikeMi - Created
|
|
//
|
|
//
|
|
//-------------------------------------------------------------------
|
|
|
|
HPROPSHEETPAGE GetInterntNetServerHPage( NETPAGESINFO* pgp )
|
|
{
|
|
HPROPSHEETPAGE hpsp;
|
|
PROPSHEETPAGE psp;
|
|
|
|
psp.dwSize = sizeof( PROPSHEETPAGE );
|
|
psp.dwFlags = 0;
|
|
psp.hInstance = g_hinst;
|
|
psp.pszTemplate = MAKEINTRESOURCE( IDD_INTERNETSERVER );
|
|
psp.hIcon = NULL;
|
|
psp.pfnDlgProc = dlgprocInternetServer;
|
|
psp.lParam = (LONG)pgp;
|
|
|
|
hpsp = CreatePropertySheetPage( &psp );
|
|
return( hpsp );
|
|
}
|