Leaked source code of windows server 2003
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.
 
 
 
 
 
 

274 lines
7.5 KiB

//----------------------------------------------------------------------------
//
// Copyright (c) 1997-1999 Microsoft Corporation
// All rights reserved.
//
// File Name:
// product.c
//
// Description:
// This is the dlgproc for the Product page IDD_PRODUCT. It asks
// if your installing unattended/remote_install etc...
//
//----------------------------------------------------------------------------
#include "pch.h"
#include "resource.h"
//----------------------------------------------------------------------------
//
// Function: SetDistFolderNames
//
// Purpose: Sets the values for the distribution folder name and share name
// in the global variables depending on the product selection.
//
// Arguments: INT nProductToInstall
//
// Returns: VOID
//
//----------------------------------------------------------------------------
static VOID
SetDistFolderNames( INT nProductToInstall ) {
INT iNumberOfCharsCopied;
TCHAR chSystemDrive;
TCHAR szWindowsPath[MAX_PATH] = _T("");
TCHAR szDistFolderPath[MAX_PATH] = _T("");
HRESULT hrCat;
iNumberOfCharsCopied = GetWindowsDirectory( szWindowsPath, MAX_PATH );
if( iNumberOfCharsCopied != 0 ) {
szDistFolderPath[0] = szWindowsPath[0];
szDistFolderPath[1] = _T('\0');
}
else {
//
// Just guess it is the C drive if the GetWindowsDirectory function
// failed
//
szDistFolderPath[0] = _T('C');
szDistFolderPath[1] = _T('\0');
}
if( nProductToInstall == PRODUCT_SYSPREP )
{
hrCat=StringCchCat( szDistFolderPath, AS(szDistFolderPath), _T(":\\sysprep\\i386") );
}
else {
hrCat=StringCchCat( szDistFolderPath, AS(szDistFolderPath), _T(":\\windist") );
}
//
// Only set the dist folders if they haven't been already set, like on an
// edit on an unattend.txt
//
if( WizGlobals.DistFolder[0] == _T('\0') ) {
lstrcpyn( WizGlobals.DistFolder, szDistFolderPath, AS(WizGlobals.DistFolder) );
}
if( WizGlobals.DistShareName[0] == _T('\0') ) {
lstrcpyn( WizGlobals.DistShareName, _T("windist"), AS(WizGlobals.DistShareName) );
}
}
//----------------------------------------------------------------------------
//
// Function: OnSetActiveProduct
//
// Purpose: Called at SETACTIVE time.
//
//----------------------------------------------------------------------------
VOID OnSetActiveProduct(HWND hwnd)
{
int nButtonId = IDC_UNATTENED_INSTALL;
//
// Select the proper radio button
//
switch( WizGlobals.iProductInstall ) {
case PRODUCT_UNATTENDED_INSTALL:
nButtonId = IDC_UNATTENED_INSTALL;
break;
case PRODUCT_SYSPREP:
nButtonId = IDC_SYSPREP;
break;
case PRODUCT_REMOTEINSTALL:
nButtonId = IDC_REMOTEINSTALL;
break;
default:
AssertMsg( FALSE,
"Invalid value for WizGlobals.iProductInstall" );
break;
}
CheckRadioButton( hwnd,
IDC_UNATTENED_INSTALL,
IDC_SYSPREP,
nButtonId );
WIZ_BUTTONS(hwnd, PSWIZB_BACK | PSWIZB_NEXT);
}
//----------------------------------------------------------------------------
//
// Function: OnWizNextProduct
//
// Purpose: Store the radio button setting in the appropriate global variable
// and set the dist folder path depending on the option they chose.
//
//----------------------------------------------------------------------------
VOID
OnWizNextProduct( HWND hwnd ) {
INT iNewProductInstall;
if( IsDlgButtonChecked(hwnd, IDC_UNATTENED_INSTALL) )
{
iNewProductInstall = PRODUCT_UNATTENDED_INSTALL;
}
else if( IsDlgButtonChecked(hwnd, IDC_SYSPREP) )
{
iNewProductInstall = PRODUCT_SYSPREP;
}
else if( IsDlgButtonChecked(hwnd, IDC_REMOTEINSTALL) )
{
iNewProductInstall = PRODUCT_REMOTEINSTALL;
}
else
{
iNewProductInstall = IDC_UNATTENED_INSTALL;
}
//
// If they picked a new product and the new product is sysprep then we
// have to delete all the computer names because sysprep only supports
// one computer name.
//
if( WizGlobals.iProductInstall != iNewProductInstall )
{
if( iNewProductInstall == PRODUCT_SYSPREP )
{
ResetNameList( &GenSettings.ComputerNames );
}
}
WizGlobals.iProductInstall = iNewProductInstall;
//
// Set the dist folder names based on product selection
//
SetDistFolderNames( WizGlobals.iProductInstall );
}
//----------------------------------------------------------------------------
//
// Function: OnRadioButtonProduct
//
// Purpose: Called when a radio button is pushed.
//
//----------------------------------------------------------------------------
VOID OnRadioButtonProduct(HWND hwnd, int nButtonId)
{
CheckRadioButton(hwnd,
IDC_UNATTENED_INSTALL,
IDC_SYSPREP,
nButtonId);
}
//----------------------------------------------------------------------------
//
// Function: DlgProductPage
//
// Purpose: This is the dialog procedure the Product page.
//
//----------------------------------------------------------------------------
INT_PTR CALLBACK DlgProductPage(
IN HWND hwnd,
IN UINT uMsg,
IN WPARAM wParam,
IN LPARAM lParam)
{
BOOL bStatus = TRUE;
switch (uMsg) {
case WM_COMMAND:
{
int nButtonId;
switch ( nButtonId = LOWORD(wParam) ) {
case IDC_UNATTENED_INSTALL:
case IDC_REMOTEINSTALL:
case IDC_SYSPREP:
if ( HIWORD(wParam) == BN_CLICKED )
OnRadioButtonProduct(hwnd, LOWORD(wParam));
break;
default:
bStatus = FALSE;
break;
}
}
break;
case WM_NOTIFY:
{
LPNMHDR pnmh = (LPNMHDR)lParam;
switch( pnmh->code ) {
case PSN_QUERYCANCEL:
WIZ_CANCEL(hwnd);
break;
case PSN_SETACTIVE:
g_App.dwCurrentHelp = IDH_PROD_INST;
// Set this flag so we get a prompt when user wants to cancel
//
SET_FLAG(OPK_EXIT, FALSE);
SET_FLAG(OPK_CREATED, TRUE);
OnSetActiveProduct(hwnd);
break;
case PSN_WIZNEXT:
OnWizNextProduct( hwnd );
bStatus = FALSE;
break;
case PSN_HELP:
WIZ_HELP();
break;
default:
bStatus = FALSE;
break;
}
}
break;
default:
bStatus = FALSE;
break;
}
return bStatus;
}