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.
313 lines
6.3 KiB
313 lines
6.3 KiB
#pragma once
|
|
|
|
#include "Parameter.h"
|
|
#include <MigrationMutex.h>
|
|
#include "MonitorThread.h"
|
|
|
|
|
|
//---------------------------------------------------------------------------
|
|
// Migration Class
|
|
//---------------------------------------------------------------------------
|
|
|
|
namespace
|
|
{
|
|
inline void __stdcall GetString(UINT uId, LPTSTR pszBuffer, int cchBuffer)
|
|
{
|
|
if (pszBuffer)
|
|
{
|
|
if (LoadString(GetModuleHandle(NULL), uId, pszBuffer, cchBuffer) == 0)
|
|
{
|
|
pszBuffer[0] = _T('\0');
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
class CMigration
|
|
{
|
|
public:
|
|
|
|
CMigration(CParameterMap& mapParams) :
|
|
m_spMigration(__uuidof(Migration))
|
|
{
|
|
Initialize(mapParams);
|
|
}
|
|
|
|
IUserMigrationPtr CreateUserMigration()
|
|
{
|
|
return m_spMigration->CreateUserMigration();
|
|
}
|
|
|
|
IGroupMigrationPtr CreateGroupMigration()
|
|
{
|
|
return m_spMigration->CreateGroupMigration();
|
|
}
|
|
|
|
IComputerMigrationPtr CreateComputerMigration()
|
|
{
|
|
return m_spMigration->CreateComputerMigration();
|
|
}
|
|
|
|
ISecurityTranslationPtr CreateSecurityTranslation()
|
|
{
|
|
return m_spMigration->CreateSecurityTranslation();
|
|
}
|
|
|
|
IServiceAccountEnumerationPtr CreateServiceAccountEnumeration()
|
|
{
|
|
return m_spMigration->CreateServiceAccountEnumeration();
|
|
}
|
|
|
|
IReportGenerationPtr CreateReportGeneration()
|
|
{
|
|
return m_spMigration->CreateReportGeneration();
|
|
}
|
|
|
|
protected:
|
|
|
|
CMigration() {}
|
|
|
|
void Initialize(CParameterMap& mapParams);
|
|
|
|
protected:
|
|
|
|
IMigrationPtr m_spMigration;
|
|
};
|
|
|
|
|
|
class CCmdMigrationBase
|
|
{
|
|
public:
|
|
|
|
bool MutexWait(DWORD dwTimeOut = INFINITE)
|
|
{
|
|
return m_Mutex.ObtainOwnership(dwTimeOut);
|
|
}
|
|
|
|
void MutexRelease()
|
|
{
|
|
m_Mutex.ReleaseOwnership();
|
|
}
|
|
|
|
void StartMonitoring()
|
|
{
|
|
// check if the other admt process is already running (by trying to obtain the mutex), if true, print out
|
|
// an error message. This should handle most of the cases
|
|
bool bStatus;
|
|
_TCHAR szBuffer[512] = _T("");
|
|
DWORD dwCharsWritten;
|
|
HANDLE hStdOut = GetStdHandle(STD_OUTPUT_HANDLE);
|
|
|
|
bStatus = MutexWait(1);
|
|
|
|
|
|
if(!bStatus)
|
|
{
|
|
GetString(IDS_E_PROCESS_RUNNING, szBuffer, countof(szBuffer));
|
|
WriteConsole(hStdOut, szBuffer, _tcslen(szBuffer), &dwCharsWritten, NULL);
|
|
|
|
MutexWait();
|
|
|
|
}
|
|
|
|
// start the monitoring thread
|
|
|
|
m_Monitor.Start();
|
|
}
|
|
|
|
void StopMonitoring()
|
|
{
|
|
m_Monitor.Stop();
|
|
|
|
MutexRelease();
|
|
}
|
|
|
|
protected:
|
|
CCmdMigrationBase() :
|
|
m_Mutex(ADMT_MUTEX)
|
|
{
|
|
}
|
|
|
|
~CCmdMigrationBase() {}
|
|
|
|
|
|
|
|
protected:
|
|
CMigrationMutex m_Mutex;
|
|
CMonitorThread m_Monitor;
|
|
|
|
};
|
|
|
|
|
|
|
|
//---------------------------------------------------------------------------
|
|
// User Migration Class
|
|
//---------------------------------------------------------------------------
|
|
|
|
|
|
class CUserMigration :
|
|
public CCmdMigrationBase
|
|
{
|
|
public:
|
|
|
|
CUserMigration(CMigration& rMigration, CParameterMap& mapParams) :
|
|
m_spUser(rMigration.CreateUserMigration())
|
|
{
|
|
Initialize(mapParams);
|
|
}
|
|
|
|
|
|
protected:
|
|
|
|
CUserMigration() {}
|
|
|
|
void Initialize(CParameterMap& mapParams);
|
|
|
|
protected:
|
|
|
|
IUserMigrationPtr m_spUser;
|
|
};
|
|
|
|
|
|
//---------------------------------------------------------------------------
|
|
// Group Migration Class
|
|
//---------------------------------------------------------------------------
|
|
|
|
|
|
class CGroupMigration :
|
|
public CCmdMigrationBase
|
|
{
|
|
public:
|
|
|
|
CGroupMigration(CMigration& rMigration, CParameterMap& mapParams) :
|
|
m_spGroup(rMigration.CreateGroupMigration())
|
|
{
|
|
Initialize(mapParams);
|
|
}
|
|
|
|
|
|
protected:
|
|
|
|
CGroupMigration() {}
|
|
|
|
void Initialize(CParameterMap& mapParams);
|
|
|
|
protected:
|
|
|
|
IGroupMigrationPtr m_spGroup;
|
|
};
|
|
|
|
|
|
//---------------------------------------------------------------------------
|
|
// Computer Migration Class
|
|
//---------------------------------------------------------------------------
|
|
|
|
|
|
class CComputerMigration :
|
|
public CCmdMigrationBase
|
|
{
|
|
public:
|
|
|
|
CComputerMigration(CMigration& rMigration, CParameterMap& mapParams) :
|
|
m_spComputer(rMigration.CreateComputerMigration())
|
|
{
|
|
Initialize(mapParams);
|
|
}
|
|
|
|
|
|
protected:
|
|
|
|
CComputerMigration() {}
|
|
|
|
void Initialize(CParameterMap& mapParams);
|
|
|
|
protected:
|
|
|
|
IComputerMigrationPtr m_spComputer;
|
|
};
|
|
|
|
|
|
//---------------------------------------------------------------------------
|
|
// Security Translation Class
|
|
//---------------------------------------------------------------------------
|
|
|
|
|
|
class CSecurityTranslation :
|
|
public CCmdMigrationBase
|
|
{
|
|
public:
|
|
|
|
CSecurityTranslation(CMigration& rMigration, CParameterMap& mapParams) :
|
|
m_spSecurity(rMigration.CreateSecurityTranslation())
|
|
{
|
|
Initialize(mapParams);
|
|
}
|
|
|
|
|
|
protected:
|
|
|
|
CSecurityTranslation() {}
|
|
|
|
void Initialize(CParameterMap& mapParams);
|
|
|
|
protected:
|
|
|
|
ISecurityTranslationPtr m_spSecurity;
|
|
};
|
|
|
|
|
|
//---------------------------------------------------------------------------
|
|
// Service Enumeration Class
|
|
//---------------------------------------------------------------------------
|
|
|
|
|
|
class CServiceEnumeration :
|
|
public CCmdMigrationBase
|
|
{
|
|
public:
|
|
|
|
CServiceEnumeration(CMigration& rMigration, CParameterMap& mapParams) :
|
|
m_spService(rMigration.CreateServiceAccountEnumeration())
|
|
{
|
|
Initialize(mapParams);
|
|
}
|
|
|
|
protected:
|
|
|
|
CServiceEnumeration() {}
|
|
|
|
void Initialize(CParameterMap& mapParams);
|
|
|
|
protected:
|
|
|
|
IServiceAccountEnumerationPtr m_spService;
|
|
};
|
|
|
|
|
|
//---------------------------------------------------------------------------
|
|
// Report Generation Class
|
|
//---------------------------------------------------------------------------
|
|
|
|
|
|
class CReportGeneration :
|
|
public CCmdMigrationBase
|
|
{
|
|
public:
|
|
|
|
CReportGeneration(CMigration& rMigration, CParameterMap& mapParams) :
|
|
m_spReport(rMigration.CreateReportGeneration())
|
|
{
|
|
Initialize(mapParams);
|
|
}
|
|
|
|
protected:
|
|
|
|
CReportGeneration() {}
|
|
|
|
void Initialize(CParameterMap& mapParams);
|
|
|
|
protected:
|
|
|
|
IReportGenerationPtr m_spReport;
|
|
};
|