windows-nt/Source/XPSP1/NT/net/mmc/snmp/handler.cpp
2020-09-26 16:20:57 +08:00

150 lines
4.1 KiB
C++

/**********************************************************************/
/** Microsoft Windows/NT **/
/** Copyright(c) Microsoft Corporation, 1997-1999 **/
/**********************************************************************/
/*
node.cpp
Root node information (the root node is not displayed
in the MMC framework but contains information such as
all of the subnodes in this snapin).
FILE HISTORY:
*/
#include "stdafx.h"
#include "snmpclst.h"
#include "handler.h"
#include "util.h"
#include "statsdlg.h"
#include "modeless.h"
#include "snmppp.h"
extern CString g_strMachineName;
/*---------------------------------------------------------------------------
CSnmpRootHandler implementation
---------------------------------------------------------------------------*/
/*!--------------------------------------------------------------------------
CSnmpRootHandler::HasPropertyPages
Implementation of ITFSNodeHandler::HasPropertyPages
NOTE: the root node handler has to over-ride this function to
handle the snapin manager property page (wizard) case!!!
Author: KennT
---------------------------------------------------------------------------*/
STDMETHODIMP
CSnmpRootHandler::HasPropertyPages
(
ITFSNode * pNode,
LPDATAOBJECT pDataObject,
DATA_OBJECT_TYPES type,
DWORD dwType
)
{
AFX_MANAGE_STATE(AfxGetStaticModuleState());
HRESULT hr = hrOK;
if (dwType & TFS_COMPDATA_CREATE)
{
// This is the case where we are asked to bring up property
// pages when the user is adding a new snapin. These calls
// are forwarded to the root node to handle.
hr = S_FALSE;
}
else
{
// we have property pages in the normal case
hr = S_OK;
}
return hr;
}
/*---------------------------------------------------------------------------
CSnmpRootHandler::CreatePropertyPages
Description
Author: EricDav
---------------------------------------------------------------------------*/
STDMETHODIMP
CSnmpRootHandler::CreatePropertyPages
(
ITFSNode *pNode,
LPPROPERTYSHEETCALLBACK lpProvider,
LPDATAOBJECT pDataObject,
LONG_PTR handle,
DWORD dwType
)
{
AFX_MANAGE_STATE(AfxGetStaticModuleState());
HRESULT hr;
DWORD dwError;
CString strServiceName;
static UINT s_cfServiceName = RegisterClipboardFormat(L"FILEMGMT_SNAPIN_SERVICE_NAME");
static UINT s_cfMachineName = RegisterClipboardFormat(L"MMC_SNAPIN_MACHINE_NAME");
g_strMachineName.Empty();
hr = ::ExtractString( pDataObject,
(CLIPFORMAT) s_cfMachineName,
&g_strMachineName,
255 );
if (FAILED(hr))
return FALSE;
hr = ::ExtractString( pDataObject,
(CLIPFORMAT) s_cfServiceName,
&strServiceName,
255 );
if (FAILED(hr))
return FALSE;
if( !lstrcmpi(strServiceName, L"Snmp") ) {
SPIComponentData spComponentData;
m_spNodeMgr->GetComponentData(&spComponentData);
CAgentPage *pAgentPage = new CAgentPage();
// tell MMC to hook the proc because we are running on a separate,
// non MFC thread.
MMCPropPageCallback(&pAgentPage->m_psp);
HPROPSHEETPAGE hAgentPage = ::CreatePropertySheetPage(&pAgentPage->m_psp);
if(hAgentPage == NULL)
return E_UNEXPECTED;
lpProvider->AddPage(hAgentPage);
CTrapsPage *pTrapsPage = new CTrapsPage();
MMCPropPageCallback(&pTrapsPage->m_psp);
HPROPSHEETPAGE hTrapsPage = ::CreatePropertySheetPage(&pTrapsPage->m_psp);
if(hTrapsPage == NULL)
return E_UNEXPECTED;
lpProvider->AddPage(hTrapsPage);
CSecurityPage *pSecurityPage = new CSecurityPage();
MMCPropPageCallback(&pSecurityPage->m_psp);
HPROPSHEETPAGE hSecurityPage = ::CreatePropertySheetPage(&pSecurityPage->m_psp);
if(hSecurityPage == NULL)
return E_UNEXPECTED;
lpProvider->AddPage(hSecurityPage);
}
return hr;
}