windows-nt/Source/XPSP1/NT/admin/dcpromo/exe/syskeydiskdialog.cpp
2020-09-26 16:20:57 +08:00

175 lines
2.4 KiB
C++

// Copyright (C) 1997-2000 Microsoft Corporation
//
// get syskey on diskette for replica from media page
//
// 25 Apr 2000 sburns
#include "headers.hxx"
#include "resource.h"
#include "page.hpp"
#include "SyskeyDiskDialog.hpp"
#include "state.hpp"
static const DWORD HELP_MAP[] =
{
0, 0
};
SyskeyDiskDialog::SyskeyDiskDialog()
:
Dialog(IDD_SYSKEY_DISK, HELP_MAP)
{
LOG_CTOR(SyskeyDiskDialog);
}
SyskeyDiskDialog::~SyskeyDiskDialog()
{
LOG_DTOR(SyskeyDiskDialog);
}
void
SyskeyDiskDialog::OnInit()
{
LOG_FUNCTION(SyskeyDiskDialog::OnInit);
State& state = State::GetInstance();
if (state.RunHiddenUnattended())
{
if (Validate())
{
Win::EndDialog(hwnd, IDOK);
}
else
{
state.ClearHiddenWhileUnattended();
}
}
}
bool
SyskeyDiskDialog::OnCommand(
HWND /* windowFrom */ ,
unsigned controlIdFrom,
unsigned code)
{
// LOG_FUNCTION(SyskeyDiskDialog::OnCommand);
switch (controlIdFrom)
{
case IDOK:
{
if (code == BN_CLICKED)
{
if (Validate())
{
Win::EndDialog(hwnd, controlIdFrom);
}
}
break;
}
case IDCANCEL:
{
if (code == BN_CLICKED)
{
Win::EndDialog(hwnd, controlIdFrom);
}
break;
}
default:
{
// do nothing
break;
}
}
return false;
}
HRESULT
LocateSyskey(HWND hwnd)
{
LOG_FUNCTION(LocateSyskey);
ASSERT(Win::IsWindow(hwnd));
HRESULT hr = S_OK;
do
{
if (FS::PathExists(L"A:\\StartKey.Key"))
{
LOG(L"syskey found on a:");
break;
}
hr = E_FAIL;
popup.Error(hwnd, IDS_SYSKEY_NOT_FOUND);
}
while (0);
LOG_HRESULT(hr);
return hr;
}
bool
SyskeyDiskDialog::Validate()
{
LOG_FUNCTION(SyskeyDiskDialog::Validate);
State& state = State::GetInstance();
bool result = false;
do
{
// look for the syskey
HRESULT hr = LocateSyskey(hwnd);
if (FAILED(hr))
{
// LocateSyskey will take care of emitting error messages, so
// we just need to bail out here
break;
}
// The only drive the syskey may be present on is A:.
EncodedString es;
es.Encode(L"A:");
state.SetSyskey(es);
result = true;
}
while (0);
LOG(result ? L"true" : L"false");
return result;
}