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.
228 lines
5.5 KiB
228 lines
5.5 KiB
// Copyright (C) 2001 Microsoft Corporation
|
|
//
|
|
// verify that the domain of this upgraded BDC has been upgraded to
|
|
// Active Directory, and that we can find a DS DC for that domain
|
|
// NTRAID#NTBUG9-490197-2001/11/20-sburns
|
|
//
|
|
// 20 Nov 2001 sburns
|
|
|
|
|
|
|
|
#include "headers.hxx"
|
|
#include "page.hpp"
|
|
#include "CheckDomainUpgradedPage.hpp"
|
|
#include "resource.h"
|
|
#include "state.hpp"
|
|
#include "common.hpp"
|
|
|
|
|
|
|
|
CheckDomainUpgradedPage::CheckDomainUpgradedPage()
|
|
:
|
|
DCPromoWizardPage(
|
|
IDD_CHECK_DOMAIN_UPGRADED,
|
|
IDS_CHECK_DOMAIN_UPGRADED_TITLE,
|
|
IDS_CHECK_DOMAIN_UPGRADED_SUBTITLE)
|
|
{
|
|
LOG_CTOR(CheckDomainUpgradedPage);
|
|
}
|
|
|
|
|
|
|
|
CheckDomainUpgradedPage::~CheckDomainUpgradedPage()
|
|
{
|
|
LOG_DTOR(CheckDomainUpgradedPage);
|
|
}
|
|
|
|
|
|
|
|
// bool
|
|
// CheckDomainUpgradedPage::OnNotify(
|
|
// HWND /* windowFrom */ ,
|
|
// UINT_PTR controlIDFrom,
|
|
// UINT code,
|
|
// LPARAM /* lParam */ )
|
|
// {
|
|
// // LOG_FUNCTION(CheckDomainUpgradedPage::OnNotify);
|
|
//
|
|
// bool result = false;
|
|
//
|
|
// if (controlIDFrom == IDC_JUMP)
|
|
// {
|
|
// switch (code)
|
|
// {
|
|
// case NM_CLICK:
|
|
// case NM_RETURN:
|
|
// {
|
|
// ShowTroubleshooter(hwnd, IDS_CONFIG_DNS_HELP_TOPIC);
|
|
// result = true;
|
|
// }
|
|
// default:
|
|
// {
|
|
// // do nothing
|
|
//
|
|
// break;
|
|
// }
|
|
// }
|
|
// }
|
|
//
|
|
// return result;
|
|
// }
|
|
|
|
|
|
|
|
void
|
|
CheckDomainUpgradedPage::OnInit()
|
|
{
|
|
LOG_FUNCTION(CheckDomainUpgradedPage::OnInit);
|
|
}
|
|
|
|
|
|
|
|
bool
|
|
CheckDomainUpgradedPage::OnSetActive()
|
|
{
|
|
LOG_FUNCTION(CheckDomainUpgradedPage::OnSetActive);
|
|
|
|
State& state = State::GetInstance();
|
|
|
|
ASSERT(state.GetRunContext() == State::BDC_UPGRADE);
|
|
ASSERT(state.GetOperation() == State::REPLICA);
|
|
|
|
if (state.RunHiddenUnattended() || CheckDsDcFoundAndUpdatePageText())
|
|
{
|
|
LOG(L"planning to Skip CheckDomainUpgradedPage");
|
|
|
|
Wizard& wiz = GetWizard();
|
|
|
|
if (wiz.IsBacktracking())
|
|
{
|
|
// backup once again
|
|
wiz.Backtrack(hwnd);
|
|
return true;
|
|
}
|
|
|
|
int nextPage = CheckDomainUpgradedPage::Validate();
|
|
if (nextPage != -1)
|
|
{
|
|
LOG(L"skipping CheckDomainUpgradedPage");
|
|
wiz.SetNextPageID(hwnd, nextPage);
|
|
return true;
|
|
}
|
|
|
|
state.ClearHiddenWhileUnattended();
|
|
}
|
|
|
|
Win::PropSheet_SetWizButtons(
|
|
Win::GetParent(hwnd),
|
|
PSWIZB_BACK | PSWIZB_NEXT);
|
|
|
|
return true;
|
|
}
|
|
|
|
|
|
|
|
int
|
|
CheckDomainUpgradedPage::Validate()
|
|
{
|
|
LOG_FUNCTION(CheckDomainUpgradedPage::Validate);
|
|
|
|
int nextPage = -1;
|
|
|
|
if (CheckDsDcFoundAndUpdatePageText())
|
|
{
|
|
nextPage = IDD_GET_CREDENTIALS;
|
|
}
|
|
else
|
|
{
|
|
String message = String::load(IDS_CONVERT_PDC_FIRST);
|
|
|
|
popup.Info(hwnd, message);
|
|
}
|
|
|
|
return nextPage;
|
|
}
|
|
|
|
|
|
|
|
// Returns true if the domain that this machine was a BDC for has been
|
|
// upgraded to Active Directory, false if not, or if we can't tell. We tell
|
|
// by attempting to find a DS DC for the domain. We set the page text and
|
|
// save the domain name based on our attempt.
|
|
|
|
bool
|
|
CheckDomainUpgradedPage::CheckDsDcFoundAndUpdatePageText()
|
|
{
|
|
LOG_FUNCTION(CheckDomainUpgradedPage::CheckDsDcFoundAndUpdatePageText);
|
|
|
|
State& state = State::GetInstance();
|
|
bool result = false;
|
|
int messageId = IDS_DOMAIN_NOT_UPGRADED_OR_NETWORK_ERROR;
|
|
String domainNetbiosName = state.GetComputer().GetDomainNetbiosName();
|
|
|
|
Win::WaitCursor wait;
|
|
|
|
do
|
|
{
|
|
// First, attempt to find a DS DC
|
|
|
|
DOMAIN_CONTROLLER_INFO* info = 0;
|
|
HRESULT hr =
|
|
MyDsGetDcName(
|
|
0,
|
|
domainNetbiosName,
|
|
DS_DIRECTORY_SERVICE_REQUIRED | DS_RETURN_DNS_NAME,
|
|
info);
|
|
if (SUCCEEDED(hr) && info)
|
|
{
|
|
if ((info->Flags & DS_DNS_DOMAIN_FLAG) && info->DomainName)
|
|
{
|
|
// we found a DS domain
|
|
|
|
state.SetReplicaDomainDNSName(info->DomainName);
|
|
messageId = IDS_DOMAIN_WAS_UPGRADED;
|
|
result = true;
|
|
}
|
|
::NetApiBufferFree(info);
|
|
|
|
break;
|
|
}
|
|
|
|
// That attempt failed, so try again for any DC (DS or otherwise) for
|
|
// the domain.
|
|
|
|
// This is not a Dr. DNS (DiagnoseDcNotFound) failure case, since the
|
|
// code to get the domain name is not using the DNS domain name.
|
|
|
|
hr = MyDsGetDcName(0, domainNetbiosName, 0, info);
|
|
if (SUCCEEDED(hr) && info)
|
|
{
|
|
// If that succeeds, then we know the that domain is not upgraded
|
|
// yet, or that a DS DC of the domain is not reachable via its
|
|
// netbios name, which is probably a net connectivity problem or
|
|
// WINS problem.
|
|
|
|
::NetApiBufferFree(info);
|
|
|
|
messageId = IDS_DOMAIN_NOT_UPGRADED_OR_NETWORK_ERROR;
|
|
|
|
break;
|
|
}
|
|
|
|
// Here, we can't find a DC of any kind for the domain.
|
|
|
|
// If that fails, then we can't find any dc for the domain, and
|
|
// have a net connectivty or WINS problem.
|
|
|
|
messageId = IDS_NETWORK_ERROR;
|
|
}
|
|
while (0);
|
|
|
|
Win::SetDlgItemText(
|
|
hwnd,
|
|
IDC_MESSAGE,
|
|
String::format(messageId, domainNetbiosName.c_str()));
|
|
|
|
return result;
|
|
}
|
|
|