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.
 
 
 
 
 
 

212 lines
6.5 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];
if (( ppViewType == NULL ) || ( pViewOptions == NULL ))
return E_POINTER;
// append decorations RT_HTML IDR_HTML1
if ( m_htmlPath[0] )
{
_stprintf(szPath,_T("file://%s"),m_htmlPath);
}
else
{
TCHAR szModulePath[MAX_PATH];
// set the result view to an HTML page
GetModuleFileName(_Module.GetModuleInstance(),szModulePath, MAX_PATH);
szModulePath[MAX_PATH - 1] = _T('\0');
_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 == NULL)
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
{
pNode = m_Reports[0];
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 == NULL)
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
{
pNode = m_Reports[1];
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 == NULL)
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
{
pNode = m_Reports[2];
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 == NULL)
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
{
pNode = m_Reports[3];
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 == NULL)
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
{
pNode = m_Reports[4];
m_Reports[4]->SetHtmlPath(GET_STRING(IDS_REPORT_NameConflicts),filename);
}
m_ChildArray.Add(pNode);
}
}
return hr;
}