mirror of https://github.com/tongzx/nt5src
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.
205 lines
6.1 KiB
205 lines
6.1 KiB
#include "stdafx.h"
|
|
#include "DomMigSI.h"
|
|
#include "DomMigr.h"
|
|
#include "MyNodes.h"
|
|
#include "TReg.hpp"
|
|
#include "ResStr.h"
|
|
#include "Err.hpp"
|
|
|
|
TError err;
|
|
TError & errCommon = err;
|
|
StringLoader gString;
|
|
|
|
//#import "\bin\DBManager.tlb" no_namespace, named_guids
|
|
#import "DBMgr.tlb" no_namespace, named_guids
|
|
|
|
// {F521FE00-3FA1-11d3-8AED-00A0C9AFE114}
|
|
static const GUID CReportingGUID_NODETYPE =
|
|
{ 0xf521fe00, 0x3fa1, 0x11d3, { 0x8a, 0xed, 0x0, 0xa0, 0xc9, 0xaf, 0xe1, 0x14 } };
|
|
const GUID* CReportingNode::m_NODETYPE = &CReportingGUID_NODETYPE;
|
|
const OLECHAR* CReportingNode::m_SZNODETYPE = OLESTR("F521FE00-3FA1-11d3-8AED-00A0C9AFE114");
|
|
const OLECHAR* CReportingNode::m_SZDISPLAY_NAME = GET_BSTR(IDS_Reporting);
|
|
const CLSID* CReportingNode::m_SNAPIN_CLASSID = &CLSID_DomMigrator;
|
|
|
|
CReportingNode::CReportingNode()
|
|
{
|
|
// m_idHTML = IDR_REPT_HTML;
|
|
m_htmlPath[0] = 0;
|
|
m_bstrDisplayName = SysAllocString(GET_STRING(IDS_ReportsMMCNode));
|
|
m_scopeDataItem.nImage = IMAGE_INDEX_AD;
|
|
m_scopeDataItem.nOpenImage = IMAGE_INDEX_AD_OPEN;
|
|
m_resultDataItem.nImage = 0;
|
|
|
|
m_Reports[0] = NULL;
|
|
m_Reports[1] = NULL;
|
|
m_Reports[2] = NULL;
|
|
m_Reports[3] = NULL;
|
|
m_Reports[4] = NULL;
|
|
|
|
|
|
};
|
|
|
|
STDMETHODIMP CReportingNode::GetResultViewType(LPOLESTR * ppViewType, long *pViewOptions)
|
|
{
|
|
USES_CONVERSION;
|
|
TCHAR szPath[MAX_PATH];
|
|
TCHAR szModulePath[MAX_PATH];
|
|
|
|
// set the result view to an HTML page
|
|
GetModuleFileName(_Module.GetModuleInstance(),szModulePath, MAX_PATH);
|
|
|
|
// append decorations RT_HTML IDR_HTML1
|
|
|
|
if ( m_htmlPath[0] )
|
|
{
|
|
_stprintf(szPath,_T("file://%s"),m_htmlPath);
|
|
}
|
|
else
|
|
{
|
|
// _stprintf(szPath,_T("res://%s/%ld"),szModulePath,m_idHTML);
|
|
_stprintf(szPath,_T("res://%s/rept.htm"),szModulePath);
|
|
}
|
|
|
|
|
|
(*ppViewType) = (LPOLESTR) CoTaskMemAlloc( (_tcslen(szPath)+1) * (sizeof OLECHAR));
|
|
if (!(*ppViewType))
|
|
return HRESULT_FROM_WIN32(ERROR_NOT_ENOUGH_MEMORY);
|
|
|
|
ocscpy(*ppViewType,T2OLE(szPath));
|
|
(*pViewOptions) = MMC_VIEW_OPTIONS_NOLISTVIEWS;
|
|
return S_OK;
|
|
}
|
|
|
|
HRESULT CReportingNode::UpdateChildren(IConsole * pConsole)
|
|
{
|
|
HRESULT hr = S_OK;
|
|
|
|
m_ChildArray.RemoveAll();
|
|
|
|
// check the registry entries to see if which reports have been generated
|
|
TRegKey rKey;
|
|
WCHAR filename[MAX_PATH];
|
|
CReportingNode * pNode = NULL;
|
|
|
|
hr = rKey.Open(GET_STRING(IDS_REGKEY_REPORTS));
|
|
if ( ! hr )
|
|
{
|
|
// check each report
|
|
// Migrated users & groups
|
|
hr = rKey.ValueGetStr(L"MigratedAccounts",filename,MAX_PATH);
|
|
if (! hr )
|
|
{
|
|
if ( ! m_Reports[0] )
|
|
{
|
|
pNode = new CReportingNode();
|
|
if (pNode)
|
|
return HRESULT_FROM_WIN32(ERROR_NOT_ENOUGH_MEMORY);
|
|
pNode->SetHtmlPath(GET_STRING(IDS_REPORT_MigratedAccounts),filename);
|
|
m_Reports[0] = pNode;
|
|
if ( pConsole )
|
|
{
|
|
hr = InsertNodeToScopepane2(pConsole,pNode,m_scopeDataItem.ID);
|
|
}
|
|
}
|
|
else
|
|
{
|
|
m_Reports[0]->SetHtmlPath(GET_STRING(IDS_REPORT_MigratedAccounts),filename);
|
|
}
|
|
m_ChildArray.Add(pNode);
|
|
}
|
|
// Migrated computers
|
|
hr = rKey.ValueGetStr(L"MigratedComputers",filename,MAX_PATH);
|
|
if (! hr )
|
|
{
|
|
if ( ! m_Reports[1] )
|
|
{
|
|
pNode = new CReportingNode();
|
|
if (pNode)
|
|
return HRESULT_FROM_WIN32(ERROR_NOT_ENOUGH_MEMORY);
|
|
pNode->SetHtmlPath(GET_STRING(IDS_REPORT_MigratedComputers),filename);
|
|
m_Reports[1] = pNode;
|
|
if ( pConsole )
|
|
{
|
|
hr = InsertNodeToScopepane2(pConsole,pNode,m_scopeDataItem.ID);
|
|
}
|
|
}
|
|
else
|
|
{
|
|
m_Reports[1]->SetHtmlPath(GET_STRING(IDS_REPORT_MigratedComputers),filename);
|
|
}
|
|
m_ChildArray.Add(pNode);
|
|
}
|
|
|
|
// expired computers
|
|
hr = rKey.ValueGetStr(L"ExpiredComputers",filename,MAX_PATH);
|
|
if (! hr )
|
|
{
|
|
|
|
if ( ! m_Reports[2] )
|
|
{
|
|
pNode = new CReportingNode();
|
|
if (pNode)
|
|
return HRESULT_FROM_WIN32(ERROR_NOT_ENOUGH_MEMORY);
|
|
pNode->SetHtmlPath(GET_STRING(IDS_REPORT_ExpiredComputers),filename);
|
|
m_Reports[2] = pNode;
|
|
if ( pConsole )
|
|
{
|
|
hr = InsertNodeToScopepane2(pConsole,pNode,m_scopeDataItem.ID);
|
|
}
|
|
}
|
|
else
|
|
{
|
|
m_Reports[2]->SetHtmlPath(GET_STRING(IDS_REPORT_ExpiredComputers),filename);
|
|
}
|
|
m_ChildArray.Add(pNode);
|
|
}
|
|
|
|
// account references
|
|
hr = rKey.ValueGetStr(L"AccountReferences",filename,MAX_PATH);
|
|
if (! hr )
|
|
{
|
|
if (! m_Reports[3] )
|
|
{
|
|
pNode = new CReportingNode();
|
|
if (pNode)
|
|
return HRESULT_FROM_WIN32(ERROR_NOT_ENOUGH_MEMORY);
|
|
pNode->SetHtmlPath(GET_STRING(IDS_REPORT_AccountReferences),filename);
|
|
m_Reports[3] = pNode;
|
|
if ( pConsole )
|
|
{
|
|
hr = InsertNodeToScopepane2(pConsole,pNode,m_scopeDataItem.ID);
|
|
}
|
|
}
|
|
else
|
|
{
|
|
m_Reports[3]->SetHtmlPath(GET_STRING(IDS_REPORT_AccountReferences),filename);
|
|
}
|
|
m_ChildArray.Add(pNode);
|
|
}
|
|
|
|
// name conflicts
|
|
hr = rKey.ValueGetStr(L"NameConflicts",filename,MAX_PATH);
|
|
if (! hr )
|
|
{
|
|
if ( ! m_Reports[4] )
|
|
{
|
|
pNode = new CReportingNode();
|
|
if (pNode)
|
|
return HRESULT_FROM_WIN32(ERROR_NOT_ENOUGH_MEMORY);
|
|
pNode->SetHtmlPath(GET_STRING(IDS_REPORT_NameConflicts),filename);
|
|
m_Reports[4] = pNode;
|
|
if ( pConsole )
|
|
{
|
|
hr = InsertNodeToScopepane2(pConsole,pNode,m_scopeDataItem.ID);
|
|
}
|
|
}
|
|
else
|
|
{
|
|
m_Reports[4]->SetHtmlPath(GET_STRING(IDS_REPORT_NameConflicts),filename);
|
|
}
|
|
m_ChildArray.Add(pNode);
|
|
|
|
}
|
|
}
|
|
return hr;
|
|
}
|