windows-nt/Source/XPSP1/NT/admin/admt/script/serviceaccountenumeration.cpp

146 lines
2.9 KiB
C++
Raw Normal View History

2020-09-26 03:20:57 -05:00
#include "StdAfx.h"
#include "ADMTScript.h"
#include "ServiceAccountEnumeration.h"
#include "Error.h"
#include "VarSetOptions.h"
#include "VarSetAccountOptions.h"
#include "VarSetSecurity.h"
//---------------------------------------------------------------------------
// Service Account Enumeration Class
//---------------------------------------------------------------------------
CServiceAccountEnumeration::CServiceAccountEnumeration()
{
}
CServiceAccountEnumeration::~CServiceAccountEnumeration()
{
}
// IServiceAccountEnumeration Implementation --------------------------------
// Enumerate Method
STDMETHODIMP CServiceAccountEnumeration::Enumerate(long lOptions, VARIANT vntInclude, VARIANT vntExclude)
{
HRESULT hr = S_OK;
MutexWait();
bool bLogOpen = _Module.OpenLog();
try
{
_Module.Log(ErrI, IDS_STARTED_SERVICE_ACCOUNT_ENUMERATION);
InitSourceDomainAndContainer();
DoOption(lOptions, vntInclude, vntExclude);
}
catch (_com_error& ce)
{
hr = AdmtSetError(CLSID_Migration, IID_IServiceAccountEnumeration, ce, IDS_E_CANT_ENUMERATE_SERVICE_ACCOUNTS);
}
catch (...)
{
hr = AdmtSetError(CLSID_Migration, IID_IServiceAccountEnumeration, E_FAIL, IDS_E_CANT_ENUMERATE_SERVICE_ACCOUNTS);
}
if (bLogOpen)
{
_Module.CloseLog();
}
MutexRelease();
return hr;
}
// Implementation -----------------------------------------------------------
// DoNames Method
void CServiceAccountEnumeration::DoNames()
{
CDomainAccounts aComputers;
m_SourceDomain.QueryComputersAcrossDomains(GetSourceContainer(), true, m_setIncludeNames, m_setExcludeNames, aComputers);
DoComputers(aComputers);
}
// DoDomain Method
void CServiceAccountEnumeration::DoDomain()
{
DoContainers(GetSourceContainer());
}
// DoContainers Method
void CServiceAccountEnumeration::DoContainers(CContainer& rSource)
{
DoComputers(rSource);
}
// DoComputers Method
void CServiceAccountEnumeration::DoComputers(CContainer& rSource)
{
CDomainAccounts aComputers;
rSource.QueryComputers(true, m_nRecurseMaintain >= 1, m_setExcludeNames, aComputers);
DoComputers(aComputers);
}
// DoComputers Method
void CServiceAccountEnumeration::DoComputers(CDomainAccounts& rComputers)
{
if (rComputers.size() > 0)
{
CVarSet aVarSet;
SetOptions(aVarSet);
FillInVarSetForComputers(rComputers, false, false, false, 0, aVarSet);
rComputers.clear();
aVarSet.Put(_T("PlugIn.%ld"), 0, _T("{9CC87460-461D-11D3-99F3-0010A4F77383}"));
PerformMigration(aVarSet);
SaveSettings(aVarSet);
}
}
// SetOptions Method
void CServiceAccountEnumeration::SetOptions(CVarSet& rVarSet)
{
CVarSetOptions aOptions(rVarSet);
aOptions.SetTest(m_spInternal->TestMigration ? true : false);
aOptions.SetUndo(false);
aOptions.SetWizard(_T("service"));
aOptions.SetIntraForest(m_spInternal->IntraForest ? true : false);
aOptions.SetSourceDomain(m_SourceDomain.NameFlat(), m_SourceDomain.NameDns());
aOptions.SetTargetDomain(m_TargetDomain.NameFlat(), m_TargetDomain.NameDns());
}