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.
214 lines
6.8 KiB
214 lines
6.8 KiB
/**********************************************************************/
|
|
/** Microsoft Windows/NT **/
|
|
/** Copyright(c) Microsoft Corporation, 1997-1999 **/
|
|
/**********************************************************************/
|
|
|
|
/*
|
|
smplsnap.cpp
|
|
Snapin entry points/registration functions
|
|
|
|
Note: Proxy/Stub Information
|
|
To build a separate proxy/stub DLL,
|
|
run nmake -f Snapinps.mak in the project directory.
|
|
|
|
FILE HISTORY:
|
|
|
|
*/
|
|
|
|
#include "stdafx.h"
|
|
#include "initguid.h"
|
|
#include "register.h"
|
|
#include "tfsguid.h"
|
|
|
|
//
|
|
// NOTE: The next three items should be changed for each different snapin.
|
|
//
|
|
|
|
// {7AF60DD2-4979-11d1-8A6C-00C04FC33566}
|
|
const CLSID CLSID_SnmpSnapin =
|
|
{ 0x7af60dd2, 0x4979, 0x11d1, { 0x8a, 0x6c, 0x0, 0xc0, 0x4f, 0xc3, 0x35, 0x66 } };
|
|
|
|
// {7AF60DD3-4979-11d1-8A6C-00C04FC33566}
|
|
const GUID CLSID_SnmpSnapinExtension =
|
|
{ 0x7af60dd3, 0x4979, 0x11d1, { 0x8a, 0x6c, 0x0, 0xc0, 0x4f, 0xc3, 0x35, 0x66 } };
|
|
|
|
// {7AF60DD4-4979-11d1-8A6C-00C04FC33566}
|
|
const GUID CLSID_SnmpSnapinAbout =
|
|
{ 0x7af60dd4, 0x4979, 0x11d1, { 0x8a, 0x6c, 0x0, 0xc0, 0x4f, 0xc3, 0x35, 0x66 } };
|
|
|
|
// {7AF60DD5-4979-11d1-8A6C-00C04FC33566}
|
|
const GUID GUID_SnmpRootNodeType =
|
|
{ 0x7af60dd5, 0x4979, 0x11d1, { 0x8a, 0x6c, 0x0, 0xc0, 0x4f, 0xc3, 0x35, 0x66 } };
|
|
|
|
// Copied and defined from ..\..\filemgmt for structuuidNodetypeService due to compiler error
|
|
|
|
// {4e410f16-abc1-11d0-b944-00c04fd8d5b0}
|
|
const CLSID CLSID_NodetypeService =
|
|
{ 0x4e410f16, 0xabc1, 0x11d0, { 0xb9, 0x44, 0x0, 0xc0, 0x4f, 0xd8, 0xd5, 0xb0 } };
|
|
|
|
// {58221C66-EA27-11CF-ADCF-00AA00A80033}
|
|
const CLSID CLSID_NodetypeServices =
|
|
{ 0x58221C66, 0xEA27, 0x11CF, { 0xAD, 0xCF, 0x0, 0xAA, 0x0, 0xA8, 0x0, 0x33 } };
|
|
|
|
//
|
|
// Internal private format
|
|
//
|
|
//const wchar_t* SNAPIN_INTERNAL = _T("SNAPIN_INTERNAL");
|
|
|
|
CComModule _Module;
|
|
|
|
BEGIN_OBJECT_MAP(ObjectMap)
|
|
OBJECT_ENTRY(CLSID_SnmpSnapin, CSnmpComponentDataPrimary)
|
|
OBJECT_ENTRY(CLSID_SnmpSnapinExtension, CSnmpComponentDataExtension)
|
|
OBJECT_ENTRY(CLSID_SnmpSnapinAbout, CSnmpAbout)
|
|
END_OBJECT_MAP()
|
|
|
|
#ifdef _DEBUG
|
|
#define new DEBUG_NEW
|
|
#undef THIS_FILE
|
|
static char THIS_FILE[] = __FILE__;
|
|
#endif
|
|
|
|
class CSnmpSnapinApp : public CWinApp
|
|
{
|
|
public:
|
|
virtual BOOL InitInstance();
|
|
virtual int ExitInstance();
|
|
};
|
|
|
|
CSnmpSnapinApp theApp;
|
|
CString g_strMachineName;
|
|
|
|
BOOL CSnmpSnapinApp::InitInstance()
|
|
{
|
|
_Module.Init(ObjectMap, m_hInstance);
|
|
return CWinApp::InitInstance();
|
|
}
|
|
|
|
int CSnmpSnapinApp::ExitInstance()
|
|
{
|
|
_Module.Term();
|
|
|
|
return CWinApp::ExitInstance();
|
|
}
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
// Used to determine whether the DLL can be unloaded by OLE
|
|
|
|
STDAPI DllCanUnloadNow(void)
|
|
{
|
|
AFX_MANAGE_STATE(AfxGetStaticModuleState());
|
|
return (AfxDllCanUnloadNow()==S_OK && _Module.GetLockCount()==0) ? S_OK : S_FALSE;
|
|
}
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
// Returns a class factory to create an object of the requested type
|
|
|
|
STDAPI DllGetClassObject(REFCLSID rclsid, REFIID riid, LPVOID* ppv)
|
|
{
|
|
AFX_MANAGE_STATE(AfxGetStaticModuleState());
|
|
return _Module.GetClassObject(rclsid, riid, ppv);
|
|
}
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
// DllRegisterServer - Adds entries to the system registry
|
|
|
|
STDAPI DllRegisterServer(void)
|
|
{
|
|
CString strSnapinExtension;
|
|
CString strSnapinExtensionNameIndirect;
|
|
TCHAR szModuleFileName[MAX_PATH * 2 + 1] = {0};
|
|
BOOL fGotModuleName = TRUE;
|
|
DWORD dwRet;
|
|
|
|
AFX_MANAGE_STATE(AfxGetStaticModuleState());
|
|
|
|
|
|
dwRet = ::GetModuleFileName(_Module.GetModuleInstance(),
|
|
szModuleFileName,
|
|
DimensionOf(szModuleFileName)-1);
|
|
|
|
// According to BUG# 559631,
|
|
// when truncation happens, GetModuleFileName will null terminate the
|
|
// string and the size of the buffer is returned. The size returned is
|
|
// the same as the size of the passed in parameter.
|
|
|
|
// 0 return or string truncation are considered as failure
|
|
fGotModuleName = ( (0 != dwRet) && ((DimensionOf(szModuleFileName)-1) != dwRet) );
|
|
|
|
//
|
|
// registers object, typelib and all interfaces in typelib
|
|
//
|
|
HRESULT hr = _Module.RegisterServer(/* bRegTypeLib */ FALSE);
|
|
ASSERT(SUCCEEDED(hr));
|
|
|
|
if (FAILED(hr))
|
|
return hr;
|
|
|
|
strSnapinExtension.LoadString(IDS_SNAPIN_DESC);
|
|
strSnapinExtensionNameIndirect.Format(L"@%s,-%-d", szModuleFileName, IDS_SNAPIN_DESC);
|
|
|
|
//
|
|
// register the snapin as an extension snapin in the console snapin list
|
|
//
|
|
hr = RegisterSnapinGUID(&CLSID_SnmpSnapinExtension,
|
|
NULL,
|
|
&CLSID_SnmpSnapinAbout,
|
|
strSnapinExtension,
|
|
_T("1.0"),
|
|
FALSE,
|
|
fGotModuleName ? (LPCTSTR)strSnapinExtensionNameIndirect : NULL);
|
|
ASSERT(SUCCEEDED(hr));
|
|
|
|
if (FAILED(hr))
|
|
return hr;
|
|
//
|
|
// register as an extension of the system service snapin
|
|
//
|
|
|
|
// EricDav 2/18/98 - this now means register as a dynamic extension
|
|
// so until the parent of this snapin supports dynamic extensions,
|
|
// leave the last parameter NULL.
|
|
hr = RegisterAsRequiredExtensionGUID(&CLSID_NodetypeService,
|
|
&CLSID_SnmpSnapinExtension,
|
|
strSnapinExtension,
|
|
EXTENSION_TYPE_PROPERTYSHEET,
|
|
NULL //&CLSID_NodetypeServices
|
|
);
|
|
return hr;
|
|
}
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
// DllUnregisterServer - Removes entries from the system registry
|
|
|
|
STDAPI DllUnregisterServer(void)
|
|
{
|
|
AFX_MANAGE_STATE(AfxGetStaticModuleState());
|
|
|
|
HRESULT hr = _Module.UnregisterServer();
|
|
ASSERT(SUCCEEDED(hr));
|
|
|
|
if (FAILED(hr))
|
|
return hr;
|
|
|
|
// un register the snapin
|
|
//
|
|
hr = UnregisterSnapinGUID(&CLSID_SnmpSnapinExtension);
|
|
ASSERT(SUCCEEDED(hr));
|
|
|
|
if (FAILED(hr))
|
|
return hr;
|
|
|
|
// unregister the snapin nodes
|
|
//
|
|
hr = UnregisterAsRequiredExtensionGUID(&CLSID_NodetypeService,
|
|
&CLSID_SnmpSnapinExtension,
|
|
EXTENSION_TYPE_PROPERTYSHEET,
|
|
NULL //&CLSID_NodetypeServices
|
|
);
|
|
|
|
ASSERT(SUCCEEDED(hr));
|
|
|
|
return hr;
|
|
}
|
|
|