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.
 
 
 
 
 
 

214 lines
4.7 KiB

//+----------------------------------------------------------------------------
//
// Windows NT Secure Server Roles Security Configuration Wizard
//
// Microsoft Windows
// Copyright (C) Microsoft Corporation, 1992 - 2002
//
// File: SelectInputCfgPage.cxx
//
// Contents: Select Input Configuration Page.
//
// History: 2-Oct-01 EricB created
//
//-----------------------------------------------------------------------------
#include "pch.h"
#include "resource.h"
#include "misc.h"
#include "state.h"
#include "SelectInputCfgPage.h"
SelectInputCfgPage::SelectInputCfgPage()
:
SecCfgWizardPage(
IDD_SELECTCFG_NAME,
IDS_SELECTCFG_NAME_PAGE_TITLE,
IDS_SELECTCFG_NAME_PAGE_SUBTITLE)
{
LOG_CTOR(SelectInputCfgPage);
}
SelectInputCfgPage::~SelectInputCfgPage()
{
LOG_DTOR(SelectInputCfgPage);
}
void
SelectInputCfgPage::OnInit()
{
LOG_FUNCTION(SelectInputCfgPage::OnInit);
Win::Edit_LimitText(Win::GetDlgItem(hwnd, IDC_EXISTING_CFG_EDIT), MAX_PATH);
Win::CheckDlgButton(hwnd, IDC_NEW_CFG_RADIO, BST_CHECKED);
Win::EnableWindow(Win::GetDlgItem(hwnd, IDC_EXISTING_CFG_EDIT), false);
Win::EnableWindow(Win::GetDlgItem(hwnd, IDC_BROWSE_FOR_CFG_BTN), false);
}
static
void
enable(HWND dialog)
{
ASSERT(Win::IsWindow(dialog));
int next = PSWIZB_NEXT;
if (Win::IsDlgButtonChecked(dialog, IDC_EDIT_CFG_RADIO))
{
next = !Win::GetTrimmedDlgItemText(dialog, IDC_EXISTING_CFG_EDIT).empty()
? PSWIZB_NEXT : 0;
}
Win::PropSheet_SetWizButtons(
Win::GetParent(dialog),
PSWIZB_BACK | next);
}
bool
SelectInputCfgPage::OnCommand(
HWND /* windowFrom */ ,
unsigned controlIDFrom,
unsigned code)
{
// LOG_FUNCTION(SelectInputCfgPage::OnCommand);
State& state = State::GetInstance();
switch (controlIDFrom)
{
case IDC_EDIT_CFG_RADIO:
{
if (code == BN_CLICKED)
{
Win::EnableWindow(Win::GetDlgItem(hwnd, IDC_EXISTING_CFG_EDIT), true);
Win::EnableWindow(Win::GetDlgItem(hwnd, IDC_BROWSE_FOR_CFG_BTN), true);
enable(hwnd);
state.SetInputType(State::OpenExisting);
}
break;
}
case IDC_NEW_CFG_RADIO:
case IDC_ROLLBACK_CFG_RADIO:
{
if (code == BN_CLICKED)
{
Win::EnableWindow(Win::GetDlgItem(hwnd, IDC_EXISTING_CFG_EDIT), false);
Win::EnableWindow(Win::GetDlgItem(hwnd, IDC_BROWSE_FOR_CFG_BTN), false);
enable(hwnd);
state.SetInputType(controlIDFrom == IDC_NEW_CFG_RADIO ?
State::CreateNew : State::Rollback);
}
break;
}
case IDC_EXISTING_CFG_EDIT:
{
if (code == EN_CHANGE)
{
enable(hwnd);
}
break;
}
case IDC_BROWSE_FOR_CFG_BTN:
{
if (code == BN_CLICKED)
{
String str(L"placeholder for file open dialog");
popup.Info(hwnd, str);
}
break;
}
default:
{
// do nothing
break;
}
}
return false;
}
bool
SelectInputCfgPage::OnSetActive()
{
LOG_FUNCTION(SelectInputCfgPage::OnSetActive);
enable(hwnd);
return true;
}
int
SelectInputCfgPage::Validate()
{
LOG_FUNCTION(SelectInputCfgPage::Validate);
int nextPage = IDD_SECURITY_LEVEL;//IDD_SERVER_ROLE_SEL; //IDD_FINISH;
State& state = State::GetInstance();
HRESULT hr = S_OK;
switch (state.GetInputType())
{
case State::OpenExisting:
state.SetInputFileName(
Win::GetTrimmedDlgItemText(hwnd, IDC_EXISTING_CFG_EDIT));
hr = state.ParseInputFile();
if (FAILED(hr))
{
popup.Error(hwnd,
hr, IDS_INVALID_EXISTING_INPUT_FILE);
nextPage = -1;
}
break;
case State::CreateNew:
hr = state.ParseInputFile();
if (FAILED(hr))
{
if (HRESULT_FROM_WIN32(ERROR_FILE_NOT_FOUND) == hr)
{
popup.Gripe(hwnd,
String::load(IDS_INPUT_FILE_NOT_FOUND, hResourceModuleHandle));
}
else
{
popup.Error(hwnd, hr, IDS_INVALID_INPUT_FILE);
}
// nextPage = ?; now what?
}
break;
case State::Rollback:
hr = state.DoRollback();
if (FAILED(hr))
{
popup.Error(hwnd, hr, IDS_ROLLBACK_FAILED);
// nextPage = ?; now what?
}
break;
default:
ASSERT(false);
}
return nextPage;
}