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.
 
 
 
 
 
 

151 lines
3.4 KiB

#include "headers.hxx"
#include "UpdatesPage.hpp"
#include "resource.h"
#include "common.hpp"
#include "repair.hpp"
#include "AnalisysResults.hpp"
#include "CSVDSReader.hpp"
UpdatesPage::UpdatesPage
(
const CSVDSReader& csvReader409_,
const CSVDSReader& csvReaderIntl_,
const String& domain_,
const String& rootContainerDn_,
const String& ldiffName_,
const String& csvName_,
const String& saveName_,
const String& logPath_,
AnalisysResults& res,
bool *someRepairWasRun_
)
:
csvReader409(csvReader409_),
csvReaderIntl(csvReaderIntl_),
domain(domain_),
rootContainerDn(rootContainerDn_),
ldiffName(ldiffName_),
csvName(csvName_),
saveName(saveName_),
logPath(logPath_),
results(res),
someRepairWasRun(someRepairWasRun_),
WizardPage
(
IDD_UPDATES,
IDS_UPDATES_PAGE_TITLE,
IDS_UPDATES_PAGE_SUBTITLE,
true
)
{
LOG_CTOR(UpdatesPage);
}
UpdatesPage::~UpdatesPage()
{
LOG_DTOR(UpdatesPage);
}
long WINAPI startRepair(long arg)
{
LOG_FUNCTION(startRepair);
UpdatesPage *page=(UpdatesPage *)arg;
HRESULT hr=S_OK;
do
{
// CoInitialize must be called per thread
hr = ::CoInitialize(0);
ASSERT(SUCCEEDED(hr));
Repair repair
(
page->csvReader409,
page->csvReaderIntl,
page->domain,
page->rootContainerDn,
page->results,
page->ldiffName,
page->csvName,
page->saveName,
page->logPath,
page,
page->someRepairWasRun
);
HWND prog=GetDlgItem(page->hwnd,IDC_PROGRESS_REPAIR);
long nProgress=repair.getTotalProgress();
SendMessage(prog,PBM_SETRANGE,0,MAKELPARAM(0, nProgress));
hr=repair.run();
CoUninitialize();
BREAK_ON_FAILED_HRESULT(hr);
} while(0);
hrError=hr;
page->FinishProgress();
return 0;
}
bool
UpdatesPage::OnSetActive()
{
LOG_FUNCTION(UpdatesPage::OnSetActive);
EnableWindow(GetDlgItem(Win::GetParent(hwnd),IDCANCEL),false);
Win::PropSheet_SetWizButtons(
Win::GetParent(hwnd),
0
);
pos=0;
HANDLE hA=CreateThread(
NULL,0,
(LPTHREAD_START_ROUTINE) startRepair,
this,
0, 0
);
CloseHandle(hA);
return true;
}
void UpdatesPage::StepProgress(long steps)
{
LOG_FUNCTION(UpdatesPage::StepProgress);
HWND prog=GetDlgItem(hwnd,IDC_PROGRESS_REPAIR);
pos+=steps;
SendMessage(prog,PBM_SETPOS,pos,0);
}
void UpdatesPage::FinishProgress()
{
LOG_FUNCTION(UpdatesPage::FinishProgress);
Win::PropSheet_SetWizButtons(Win::GetParent(hwnd),PSWIZB_NEXT);
if (FAILED(hrError))
{
error=String::format(IDS_REPAIR_ERROR,error.c_str());
}
HWND text=GetDlgItem(hwnd,IDC_UPDATE_COMPLETE);
Win::ShowWindow(text,SW_SHOW);
Win::PropSheet_SetWizButtons(
Win::GetParent(hwnd),
PSWIZB_NEXT
);
}