|
|
#include "stdafx.h"
#include <iadmw.h>
#include <inetcom.h>
#include <logtype.h>
#include <ilogobj.hxx>
#include "wrapmb.h"
#include "logui.h"
#include "uiextnd.h"
#include "LogGenPg.h"
#include "LogExtPg.h"
#include "LogAdvPg.h"
#include "logtools.h"
//#include <inetprop.h>
#define OLE_NAME _T("Extended_Logging_UI")
static const DWORD BASED_CODE _dwOleMisc = OLEMISC_INSIDEOUT | OLEMISC_CANTLINKINSIDE;
extern HINSTANCE g_hInstance;
//====================== the required methods
//---------------------------------------------------------------
CFacExtndLogUI::CFacExtndLogUI() : COleObjectFactory( CLSID_EXTLOGUI, RUNTIME_CLASS(CExtndCreator), TRUE, OLE_NAME ) { }
//---------------------------------------------------------------
static const LPCTSTR rglpszServerRegister[] = { _T("%2\\CLSID\0") _T("%1"), _T("%2\\NotInsertable\0") _T(""), _T("%2\\protocol\\StdFileEditing\\verb\\0\0") _T("&Edit"), _T("CLSID\\%1\0") _T("%5"), _T("CLSID\\%1\\Verb\\0\0") _T("&Edit,0,2"), _T("CLSID\\%1\\NotInsertable\0") _T(""), _T("CLSID\\%1\\AuxUserType\\2\0") _T("%4"), _T("CLSID\\%1\\AuxUserType\\3\0") _T("%6"), _T("CLSID\\%1\\MiscStatus\0") _T("32"), NULL };
static const LPCTSTR rglpszServerOverwriteDLL[] = { _T("%2\\CLSID\0") _T("%1"), _T("%2\\protocol\\StdFileEditing\\server\0") _T("%3"), _T("CLSID\\%1\\ProgID\0") _T("%2"), _T("CLSID\\%1\\InProcServer32\0") _T("%3"), _T("CLSID\\%1\\DefaultIcon\0") _T("%3,%7"), NULL };
BOOL CFacExtndLogUI::UpdateRegistry( BOOL bRegister ) { if (bRegister) /*
return AfxOleRegisterControlClass( AfxGetInstanceHandle(), CLSID_EXTLOGUI, OLE_NAME, 0, 0, afxRegApartmentThreading, _dwOleMisc, _tlid, _wVerMajor, _wVerMinor); */ if (AfxOleRegisterServerClass( CLSID_EXTLOGUI, OLE_NAME, _T("LogUI extnd"), _T("LogUI extnd"), OAT_SERVER, (LPCTSTR *)rglpszServerRegister, (LPCTSTR *)rglpszServerOverwriteDLL ) ) { return FSetObjectApartmentModel( CLSID_EXTLOGUI ); } else return AfxOleUnregisterClass(m_clsid, OLE_NAME);
return FALSE; }
//---------------------------------------------------------------
IMPLEMENT_DYNCREATE(CExtndCreator, CCmdTarget) LPUNKNOWN CExtndCreator::GetInterfaceHook(const void* piid) { return new CImpExtndLogUI; }
//====================== the action
//---------------------------------------------------------------
CImpExtndLogUI::CImpExtndLogUI(): m_dwRefCount(0) { // guid = IID_LOGGINGUI;
AfxOleLockApp(); }
//---------------------------------------------------------------
CImpExtndLogUI::~CImpExtndLogUI() { AfxOleUnlockApp(); }
//---------------------------------------------------------------
HRESULT CImpExtndLogUI::OnProperties( IN OLECHAR* pocMachineName, IN OLECHAR* pocMetabasePath ) { // AFX_MANAGE_STATE(_afxModuleAddrThis);
AFX_MANAGE_STATE(::AfxGetStaticModuleState());
// prepare the metabase wrapper
IMSAdminBase * pMB; if ( !FInitMetabaseWrapperEx( pocMachineName, &pMB ) ) return 0xFFFFFFFF;
// specify the resources to use
HINSTANCE hOldRes = AfxGetResourceHandle(); AfxSetResourceHandle( g_hInstance );
// prepare the help
((CLoguiApp*)AfxGetApp())->PrepHelp( pocMetabasePath );
// Things could (potentially maybe) throw here, so better protect it.
try { // declare the property sheet
CPropertySheet propsheet( IDS_SHEET_EXTND_TITLE ); // declare the property pages
CLogGeneral pageLogGeneral; CLogAdvanced pageLogAdvanced; CLogExtended pageLogExtended;
// prepare the common pages
pageLogGeneral.m_pMB = pMB; pageLogGeneral.m_szMeta = pocMetabasePath; pageLogGeneral.m_szServer = pocMachineName; pageLogGeneral.szPrefix.LoadString( IDS_LOG_EXTND_PREFIX ); pageLogGeneral.szSizePrefix.LoadString( IDS_LOG_SIZE_EXTND_PREFIX );
// make the use local time checkbox visible
pageLogGeneral.m_fShowLocalTimeCheckBox = TRUE;
// set the local flag
pageLogGeneral.m_fLocalMachine = FIsLocalMachine( pocMachineName );
// add the pages to the sheet and run
propsheet.AddPage( &pageLogGeneral );
// turn on help
propsheet.m_psh.dwFlags |= PSH_HASHELP; pageLogGeneral.m_psp.dwFlags |= PSP_HASHELP;
//
// Extract the service name from the metabase path
//
// For /LM/W3SVC/1 scenario
CString m_szServiceName(pocMetabasePath+3); m_szServiceName = m_szServiceName.Left( m_szServiceName.ReverseFind('/'));
// For /LM/W3SVC scenario
if (m_szServiceName.IsEmpty()) { m_szServiceName = pocMetabasePath+3; }
DWORD version; BOOL res; { CComAuthInfo auth(pocMachineName); CMetabasePath path(TRUE, m_szServiceName, SZ_MBN_INFO); CMetaKey mk(&auth, path); mk.QueryValue(MD_SERVER_VERSION_MAJOR, version); res = mk.Succeeded(); } if (res && (version > 4)) { pageLogAdvanced.m_pMB = pMB; pageLogAdvanced.m_szMeta = pocMetabasePath; pageLogAdvanced.m_szServer = pocMachineName; pageLogAdvanced.m_szServiceName = m_szServiceName;
// add the pages to the sheet and run
propsheet.AddPage( &pageLogAdvanced );
// turn on help
pageLogAdvanced.m_psp.dwFlags |= PSP_HASHELP; } else { pageLogExtended.m_pMB = pMB; pageLogExtended.m_szMeta = pocMetabasePath; pageLogExtended.m_szServer = pocMachineName;
// add the pages to the sheet and run
propsheet.AddPage( &pageLogExtended );
// turn on help
pageLogExtended.m_psp.dwFlags |= PSP_HASHELP; }
propsheet.DoModal(); } catch ( CException e ) { }
// close the metabase wrappings
FCloseMetabaseWrapperEx(&pMB);
// restore the resources
AfxSetResourceHandle( hOldRes );
return NO_ERROR; }
//====================== the required methods
//---------------------------------------------------------------
HRESULT CImpExtndLogUI::QueryInterface(REFIID riid, void **ppObject) { if (riid==IID_IUnknown || riid==IID_LOGGINGUI || riid==CLSID_EXTLOGUI) { *ppObject = (ILogUIPlugin*) this; } else { return E_NOINTERFACE; } AddRef(); return NO_ERROR; }
//---------------------------------------------------------------
ULONG CImpExtndLogUI::AddRef() { DWORD dwRefCount; dwRefCount = InterlockedIncrement((long *)&m_dwRefCount); return dwRefCount; }
//---------------------------------------------------------------
ULONG CImpExtndLogUI::Release() { DWORD dwRefCount; dwRefCount = InterlockedDecrement((long *)&m_dwRefCount); if (dwRefCount == 0) { delete this; } return dwRefCount; }
|