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.
321 lines
8.5 KiB
321 lines
8.5 KiB
#include "pch.h"
|
|
#pragma hdrstop
|
|
#include "ncreg.h"
|
|
#include "ncsvc.h"
|
|
#include "nslog.h"
|
|
#include "wizard.h"
|
|
|
|
|
|
|
|
// Setup Wizard Global - Only used during setup.
|
|
extern CWizard * g_pSetupWizard;
|
|
|
|
BOOL FSetupRequestWizardPages(HPROPSHEETPAGE* pahpsp,
|
|
UINT* pcPages,
|
|
PINTERNAL_SETUP_DATA psp);
|
|
BOOL FSetupFreeWizardPages();
|
|
BOOL FNetSetupPrepareSysPrep();
|
|
#if !defined(WIN64) && !defined(_WIN64)
|
|
BOOL FDoIcsUpgradeIfNecessary();
|
|
#endif // !defined(WIN64) && !defined(_WIN64)
|
|
|
|
//+---------------------------------------------------------------------------
|
|
//
|
|
// Function: DoInitialCleanup
|
|
//
|
|
// Purpose: Called from syssetup before any device is installed.
|
|
//
|
|
// Arguments:
|
|
// hwnd [in] parent window
|
|
// pisd [in] setup data
|
|
//
|
|
// Returns: TRUE or FALSE
|
|
//
|
|
// Author: kumarp 3 Dec 1997
|
|
//
|
|
// Notes: This must have the signature of NETSETUPINSTALLSOFTWAREPROC
|
|
// defined in syssetup.h
|
|
//
|
|
// DoInitialCleanup is called from syssetup during installs before
|
|
// any device is installed.
|
|
// If you want something to happen before any PnP / wizard
|
|
// stuff happens, this function is the best place to put that code.
|
|
//
|
|
//
|
|
BOOL
|
|
WINAPI
|
|
DoInitialCleanup (
|
|
HWND hwnd,
|
|
PINTERNAL_SETUP_DATA pisd)
|
|
{
|
|
TraceFileFunc(ttidGuiModeSetup);
|
|
|
|
Assert(pisd);
|
|
|
|
#if DBG
|
|
RtlValidateProcessHeaps ();
|
|
#endif
|
|
|
|
NetSetupLogStatusV (LogSevInformation,
|
|
SzLoadIds (IDS_SETUP_MODE_STATUS),
|
|
pisd->SetupMode,
|
|
pisd->ProductType,
|
|
pisd->OperationFlags);
|
|
|
|
if (pisd->OperationFlags & SETUPOPER_NTUPGRADE)
|
|
{
|
|
extern HRESULT HrEnableServicesDisabledDuringUpgrade();
|
|
|
|
// Delete the old NT4 legacy network key. Valid items will be
|
|
// rewritten on each device install.
|
|
//
|
|
extern const WCHAR c_szRegKeyNt4Adapters[];
|
|
(VOID) HrRegDeleteKeyTree (HKEY_LOCAL_MACHINE, c_szRegKeyNt4Adapters);
|
|
}
|
|
|
|
extern HRESULT HrRunAnswerFileCleanSection(IN PCWSTR pszAnswerFileName);
|
|
extern HRESULT HrProcessInfToRunBeforeInstall(IN HWND hwndParent,
|
|
IN PCWSTR szAnswerFileName);
|
|
extern HRESULT HrNetSetupCopyOemInfs(IN PCWSTR szAnswerFileName);
|
|
|
|
// Run the [Clean] section in the answerfile
|
|
//
|
|
if (pisd->OperationFlags & SETUPOPER_BATCH)
|
|
{
|
|
AssertValidReadPtr(pisd->UnattendFile);
|
|
|
|
// We cannot abort upgrade in GUI setup, so we need to continue
|
|
// even if an error occurs in any of the following functions
|
|
|
|
(VOID) HrRunAnswerFileCleanSection(pisd->UnattendFile);
|
|
|
|
(VOID) HrProcessInfToRunBeforeInstall(hwnd, pisd->UnattendFile);
|
|
|
|
// Copy OEM net INF files using SetupCopyOemInf, if any
|
|
// we want to ignore any error here
|
|
|
|
(VOID) HrNetSetupCopyOemInfs(pisd->UnattendFile);
|
|
}
|
|
|
|
#if DBG
|
|
RtlValidateProcessHeaps ();
|
|
#endif
|
|
|
|
return TRUE;
|
|
}
|
|
|
|
//+---------------------------------------------------------------------------
|
|
//
|
|
// Function: NetSetupInstallSoftware
|
|
//
|
|
// Purpose: Exported entrypoint to install network software.
|
|
//
|
|
// Arguments:
|
|
// hwnd [in] parent window
|
|
// pisd [in] setup data
|
|
//
|
|
// Returns: TRUE or FALSE
|
|
//
|
|
// Author: scottbri 5 Jul 1997
|
|
//
|
|
// Notes: This must have the signature of NETSETUPINSTALLSOFTWAREPROC
|
|
// defined in syssetup.h
|
|
//
|
|
EXTERN_C
|
|
BOOL
|
|
WINAPI
|
|
NetSetupInstallSoftware(
|
|
HWND hwnd,
|
|
PINTERNAL_SETUP_DATA pisd )
|
|
{
|
|
TraceFileFunc(ttidGuiModeSetup);
|
|
|
|
#if DBG
|
|
RtlValidateProcessHeaps ();
|
|
#endif
|
|
return FALSE;
|
|
}
|
|
|
|
//+---------------------------------------------------------------------------
|
|
//
|
|
// Function: NetSetupRequestWizardPages
|
|
//
|
|
// Purpose: Exported request for wizard pages
|
|
//
|
|
// Arguments:
|
|
// pahpsp [out] property pages provided by us
|
|
// pcPages [out] number of pages provided
|
|
// psp [in] setup data
|
|
//
|
|
// Returns:
|
|
//
|
|
// Author: scottbri 5 Jul 1997
|
|
//
|
|
// Notes: This must have the signature of NETSETUPPAGEREQUESTPROCNAME
|
|
// defined in syssetup.h
|
|
//
|
|
EXTERN_C
|
|
BOOL
|
|
WINAPI
|
|
NetSetupRequestWizardPages(
|
|
HPROPSHEETPAGE* pahpsp,
|
|
UINT* pcPages,
|
|
PINTERNAL_SETUP_DATA psp)
|
|
{
|
|
TraceFileFunc(ttidGuiModeSetup);
|
|
|
|
#if DBG
|
|
RtlValidateProcessHeaps ();
|
|
#endif
|
|
return FSetupRequestWizardPages(pahpsp, pcPages, psp);
|
|
}
|
|
|
|
//+---------------------------------------------------------------------------
|
|
//
|
|
// Function: NetSetupFinishInstall
|
|
//
|
|
// Purpose: Exported function to finish network installation
|
|
//
|
|
// Arguments:
|
|
// hwnd [in] parent window
|
|
// pisd [in] setup data
|
|
//
|
|
// Returns: TRUE or FALSE
|
|
//
|
|
// Author: scottbri 5 Jul 1997
|
|
//
|
|
// Notes: This must have the signature of NETSETUPFINISHINSTALLPROCNAME
|
|
// defined in syssetup.h
|
|
//
|
|
|
|
EXTERN_C
|
|
BOOL
|
|
WINAPI
|
|
NetSetupFinishInstall(
|
|
HWND hwnd,
|
|
PINTERNAL_SETUP_DATA pisd )
|
|
{
|
|
TraceFileFunc(ttidGuiModeSetup);
|
|
|
|
#if DBG
|
|
RtlValidateProcessHeaps ();
|
|
#endif
|
|
|
|
#if !defined(WIN64) && !defined(_WIN64)
|
|
// do the ICS Upgrade from Win9x/Win2K if necessary
|
|
// we are doing ICS upgrade here, because
|
|
// 1. we need to wait until HNetCfg.dll components have been registered.
|
|
// 2. we need to wait until Win9x Dial-Up connections have been migrated.
|
|
|
|
FDoIcsUpgradeIfNecessary();
|
|
#endif // !defined(WIN64) && !defined(_WIN64)
|
|
|
|
return FSetupFreeWizardPages();
|
|
}
|
|
|
|
//+---------------------------------------------------------------------------
|
|
//
|
|
// Function: NetSetupAddRasConnection
|
|
//
|
|
// Purpose: Create a new RAS connection.
|
|
//
|
|
// Arguments:
|
|
// hwnd []
|
|
// ppConn []
|
|
//
|
|
// Returns: S_OK, S_FALSE if cancelled or reentered, or an error code.
|
|
//
|
|
// Author: scottbri 3 Nov 1997
|
|
//
|
|
// Notes:
|
|
//
|
|
EXTERN_C
|
|
HRESULT
|
|
WINAPI
|
|
NetSetupAddRasConnection (
|
|
HWND hwnd,
|
|
INetConnection** ppConn)
|
|
{
|
|
TraceFileFunc(ttidGuiModeSetup);
|
|
|
|
Assert (FImplies(hwnd, IsWindow(hwnd)));
|
|
Assert (ppConn);
|
|
|
|
// Initialize the output parameter.
|
|
//
|
|
*ppConn = NULL;
|
|
|
|
HRESULT hr = S_FALSE;
|
|
HANDLE hMutex = NULL;
|
|
|
|
// If the PostInstall wizard flag the wizard has already been launched
|
|
//
|
|
hMutex = CreateMutex(NULL, TRUE, SzLoadIds(IDS_WIZARD_CAPTION));
|
|
if ((NULL == hMutex) || (ERROR_ALREADY_EXISTS == GetLastError()))
|
|
{
|
|
// if the mutex already exists try to find the connection window
|
|
//
|
|
if (ERROR_ALREADY_EXISTS == GetLastError())
|
|
{
|
|
// Try to get the window handle and set to for ground
|
|
HWND hwndWizard = FindWindow(NULL, SzLoadIds(IDS_WIZARD_CAPTION));
|
|
if (IsWindow(hwndWizard))
|
|
{
|
|
SetForegroundWindow(hwndWizard);
|
|
}
|
|
}
|
|
}
|
|
else
|
|
{
|
|
#ifdef DBG
|
|
if (FIsDebugFlagSet (dfidBreakOnWizard))
|
|
{
|
|
ShellExecute(NULL, L"open", L"cmd.exe", NULL, NULL, SW_SHOW);
|
|
AssertSz(FALSE, "THIS IS NOT A BUG! The debug flag "
|
|
"\"BreakOnWizard\" has been set. Set your breakpoints now.");
|
|
}
|
|
#endif // DBG
|
|
|
|
hr = HrRunWizard(hwnd, FALSE, ppConn, FALSE);
|
|
}
|
|
|
|
if (hMutex)
|
|
{
|
|
ReleaseMutex(hMutex);
|
|
CloseHandle(hMutex);
|
|
}
|
|
|
|
TraceHr(ttidError, FAL, hr, (S_FALSE == hr),
|
|
"NetSetupAddRasConnection");
|
|
return hr;
|
|
}
|
|
|
|
|
|
//+---------------------------------------------------------------------------
|
|
//
|
|
// Function: NetSetupPrepareSysPrep
|
|
//
|
|
// Purpose: Exported entrypoint to prepare work items related to SysPrep
|
|
//
|
|
// Arguments:
|
|
// None
|
|
//
|
|
// Returns: TRUE or FALSE
|
|
//
|
|
// Author: FrankLi 22 April 2000
|
|
//
|
|
// Notes: This causes NetConfig to save network component per adapter
|
|
// registry settings to an internal persistent format. Initially,
|
|
// a CWInfFile object is used to save the settings in memory.
|
|
// Finally, the content of the CWInfFile object will be saved as
|
|
// file in %systemroot%\system32\$ncsp$.inf (NetConfigSysPrep)
|
|
//
|
|
EXTERN_C
|
|
BOOL
|
|
WINAPI
|
|
NetSetupPrepareSysPrep()
|
|
{
|
|
TraceFileFunc(ttidGuiModeSetup);
|
|
|
|
return FNetSetupPrepareSysPrep();
|
|
}
|