WindowsXP-SP1/admin/cys/win32/beforebeginpage.cpp
2020-09-30 16:53:49 +02:00

201 lines
5.1 KiB
C++

// Copyright (c) 1997-2001 Microsoft Corporation
//
// File: BeforeBeginPage.cpp
//
// Synopsis: Defines the Before You Begin Page for the CYS
// Wizard. Tells the user what they should do
// before running CYS.
//
// History: 03/14/2001 JeffJon Created
#include "pch.h"
#include "resource.h"
#include "InstallationUnitProvider.h"
#include "BeforeBeginPage.h"
#include "state.h"
static PCWSTR BEFORE_BEGIN_PAGE_HELP = L"cys.chm::/cys_topnode.htm";
static PCWSTR BEFORE_BEGIN_LINK_HELP = L"cys.chm::/cys_topnode.htm";
BeforeBeginPage::BeforeBeginPage()
:
bulletFont(0),
CYSWizardPage(
IDD_BEFORE_BEGIN_PAGE,
IDS_BEFORE_BEGIN_TITLE,
IDS_BEFORE_BEGIN_SUBTITLE,
BEFORE_BEGIN_PAGE_HELP)
{
LOG_CTOR(BeforeBeginPage);
}
BeforeBeginPage::~BeforeBeginPage()
{
LOG_DTOR(BeforeBeginPage);
if (bulletFont)
{
HRESULT hr = Win::DeleteObject(bulletFont);
ASSERT(SUCCEEDED(hr));
}
}
void
BeforeBeginPage::OnInit()
{
LOG_FUNCTION(BeforeBeginPage::OnInit);
InitializeBulletedList();
}
void
BeforeBeginPage::InitializeBulletedList()
{
LOG_FUNCTION(BeforeBeginPage::InitializeBulletedList);
bulletFont = CreateFont(
0,
0,
0,
0,
FW_NORMAL,
0,
0,
0,
SYMBOL_CHARSET,
OUT_CHARACTER_PRECIS,
CLIP_CHARACTER_PRECIS,
PROOF_QUALITY,
VARIABLE_PITCH|FF_DONTCARE,
L"Marlett");
if (bulletFont)
{
Win::SetWindowFont(Win::GetDlgItem(hwnd, IDC_BULLET1), bulletFont, true);
Win::SetWindowFont(Win::GetDlgItem(hwnd, IDC_BULLET2), bulletFont, true);
Win::SetWindowFont(Win::GetDlgItem(hwnd, IDC_BULLET3), bulletFont, true);
Win::SetWindowFont(Win::GetDlgItem(hwnd, IDC_BULLET4), bulletFont, true);
Win::SetWindowFont(Win::GetDlgItem(hwnd, IDC_BULLET5), bulletFont, true);
}
else
{
LOG(String::format(
L"Failed to create font for bullet list: hr = %1!x!",
GetLastError()));
}
}
bool
BeforeBeginPage::OnSetActive()
{
LOG_FUNCTION(BeforeBeginPage::OnSetActive);
Win::PropSheet_SetWizButtons(
Win::GetParent(hwnd),
PSWIZB_NEXT | PSWIZB_BACK);
return true;
}
bool
BeforeBeginPage::OnNotify(
HWND /*windowFrom*/,
unsigned controlIDFrom,
unsigned code,
LPARAM /*lParam*/)
{
// LOG_FUNCTION(BeforeBeginPage::OnCommand);
bool result = false;
if (IDC_LINK == controlIDFrom &&
(NM_CLICK == code ||
NM_RETURN == code))
{
Win::HtmlHelp(
hwnd,
BEFORE_BEGIN_LINK_HELP,
HH_DISPLAY_TOPIC,
0);
}
return result;
}
int
BeforeBeginPage::Validate()
{
LOG_FUNCTION(BeforeBeginPage::Validate);
// Gather the machine network and role information
State& state = State::GetInstance();
if (!state.HasStateBeenRetrieved())
{
if (!state.RetrieveMachineConfigurationInformation(hwnd))
{
ASSERT(false);
LOG(L"The machine configuration could not be retrieved.");
return -1;
}
}
int nextPage = IDD_DECISION_PAGE;
/* Just for testing the NIC selection page
int nextPage = IDD_CUSTOM_SERVER_PAGE;
// The decision page should be shown only if we are not a DC, not a DHCP server,
// not a DNS server, have only one or two NICs, and there is only one static
// IP address on the interfaces
if (!(state.IsDC() || state.IsUpgradeState()))
{
if (!InstallationUnitProvider::GetInstance().GetDHCPInstallationUnit().IsServiceInstalled() &&
!InstallationUnitProvider::GetInstance().GetDNSInstallationUnit().IsServiceInstalled())
{
if (state.GetNICCount() == 1)
{
if (!state.IsDHCPAvailableOnNIC(0))
{
nextPage = IDD_DECISION_PAGE;
}
}
else if (state.GetNICCount() == 2)
{
bool isDHCPAvailableOnNIC1 = state.IsDHCPAvailableOnNIC(0);
bool isDHCPAvailableOnNIC2 = state.IsDHCPAvailableOnNIC(1);
if ((!isDHCPAvailableOnNIC1 && isDHCPAvailableOnNIC2) ||
(isDHCPAvailableOnNIC1 && !isDHCPAvailableOnNIC2))
{
// As long as only one of the interfaces has a
// dynamically assigned IP address we can go
// through the Express path
nextPage = IDD_DECISION_PAGE;
}
}
else
{
// If the machine doesn't have a NIC or
// has more than 2 NICs then there is either no
// reason to make this a network server or the
// user is considered more advanced and should
// run through the custom part of the wizard
}
}
}
*/
LOG(String::format(L"nextPage = %1!d!", nextPage));
return nextPage;
}