263 lines
7.4 KiB
C++
263 lines
7.4 KiB
C++
|
/**********************************************************************/
|
||
|
/** Microsoft Windows/NT **/
|
||
|
/** Copyright(c) Microsoft Corporation, 1997 - 1999 **/
|
||
|
/**********************************************************************/
|
||
|
|
||
|
/*
|
||
|
tapisnap.cpp
|
||
|
TAPI 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 "tapicomp.h"
|
||
|
#include "ncglobal.h" // network console global defines
|
||
|
#include "cmptrmgr.h" // computer menagement snapin stuff
|
||
|
|
||
|
#ifdef _DEBUG
|
||
|
void DbgVerifyInstanceCounts();
|
||
|
#define DEBUG_VERIFY_INSTANCE_COUNTS DbgVerifyInstanceCounts()
|
||
|
#else
|
||
|
#define DEBUG_VERIFY_INSTANCE_COUNTS
|
||
|
#endif
|
||
|
|
||
|
CComModule _Module;
|
||
|
|
||
|
BEGIN_OBJECT_MAP(ObjectMap)
|
||
|
OBJECT_ENTRY(CLSID_TapiSnapin, CTapiComponentDataPrimary)
|
||
|
OBJECT_ENTRY(CLSID_TapiSnapinExtension, CTapiComponentDataExtension)
|
||
|
OBJECT_ENTRY(CLSID_TapiSnapinAbout, CTapiAbout)
|
||
|
END_OBJECT_MAP()
|
||
|
|
||
|
#ifdef _DEBUG
|
||
|
#define new DEBUG_NEW
|
||
|
#undef THIS_FILE
|
||
|
static char THIS_FILE[] = __FILE__;
|
||
|
#endif
|
||
|
|
||
|
//
|
||
|
// CTapiSnapinApp
|
||
|
//
|
||
|
BEGIN_MESSAGE_MAP(CTapiSnapinApp, CWinApp)
|
||
|
//{{AFX_MSG_MAP(CTapiSnapinApp)
|
||
|
//ON_COMMAND(ID_APP_ABOUT, OnAppAbout)
|
||
|
//}}AFX_MSG_MAP
|
||
|
// Standard file based document commands
|
||
|
//ON_COMMAND(ID_FILE_NEW, CWinApp::OnFileNew)
|
||
|
//ON_COMMAND(ID_FILE_OPEN, CWinApp::OnFileOpen)
|
||
|
// Standard print setup command
|
||
|
//ON_COMMAND(ID_FILE_PRINT_SETUP, CWinApp::OnFilePrintSetup)
|
||
|
// Global help commands
|
||
|
ON_COMMAND(ID_HELP_INDEX, CWinApp::OnHelpFinder)
|
||
|
ON_COMMAND(ID_HELP_USING, CWinApp::OnHelpUsing)
|
||
|
ON_COMMAND(ID_HELP, CWinApp::OnHelp)
|
||
|
ON_COMMAND(ID_CONTEXT_HELP, CWinApp::OnContextHelp)
|
||
|
ON_COMMAND(ID_DEFAULT_HELP, CWinApp::OnHelpIndex)
|
||
|
END_MESSAGE_MAP()
|
||
|
|
||
|
CTapiSnapinApp theApp;
|
||
|
|
||
|
BOOL CTapiSnapinApp::InitInstance()
|
||
|
{
|
||
|
_Module.Init(ObjectMap, m_hInstance);
|
||
|
|
||
|
//
|
||
|
// Initialize the CWndIpAddress control window class IPADDRESS
|
||
|
//
|
||
|
CWndIpAddress::CreateWindowClass( m_hInstance ) ;
|
||
|
|
||
|
//
|
||
|
// Initialize use of the WinSock routines
|
||
|
//
|
||
|
WSADATA wsaData ;
|
||
|
|
||
|
if ( ::WSAStartup( MAKEWORD( 1, 1 ), & wsaData ) != 0 )
|
||
|
{
|
||
|
m_bWinsockInited = TRUE;
|
||
|
Trace0("InitInstance: Winsock initialized!\n");
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
m_bWinsockInited = FALSE;
|
||
|
}
|
||
|
|
||
|
return CWinApp::InitInstance();
|
||
|
}
|
||
|
|
||
|
int CTapiSnapinApp::ExitInstance()
|
||
|
{
|
||
|
_Module.Term();
|
||
|
|
||
|
DEBUG_VERIFY_INSTANCE_COUNTS;
|
||
|
|
||
|
//
|
||
|
// Terminate use of the WinSock routines.
|
||
|
//
|
||
|
if ( m_bWinsockInited )
|
||
|
{
|
||
|
WSACleanup() ;
|
||
|
}
|
||
|
|
||
|
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)
|
||
|
{
|
||
|
return _Module.GetClassObject(rclsid, riid, ppv);
|
||
|
}
|
||
|
|
||
|
/////////////////////////////////////////////////////////////////////////////
|
||
|
// DllRegisterServer - Adds entries to the system registry
|
||
|
|
||
|
STDAPI DllRegisterServer(void)
|
||
|
{
|
||
|
AFX_MANAGE_STATE(AfxGetStaticModuleState());
|
||
|
|
||
|
//
|
||
|
// registers object, typelib and all interfaces in typelib
|
||
|
//
|
||
|
HRESULT hr = _Module.RegisterServer(/* bRegTypeLib */ FALSE);
|
||
|
ASSERT(SUCCEEDED(hr));
|
||
|
|
||
|
if (FAILED(hr))
|
||
|
return hr;
|
||
|
|
||
|
CString stName, stNameIndirect;
|
||
|
|
||
|
stName.LoadString(IDS_SNAPIN_NAME);
|
||
|
stNameIndirect.Format (_T("@%s,-%d"), _T("tapisnap.dll"), IDS_SNAPIN_NAME);
|
||
|
|
||
|
//
|
||
|
// register the snapin into the console snapin list
|
||
|
//
|
||
|
hr = RegisterSnapinGUID(&CLSID_TapiSnapin,
|
||
|
&GUID_TapiRootNodeType,
|
||
|
&CLSID_TapiSnapinAbout,
|
||
|
(LPCTSTR) stName,
|
||
|
_T("1.0"),
|
||
|
TRUE,
|
||
|
stNameIndirect);
|
||
|
ASSERT(SUCCEEDED(hr));
|
||
|
|
||
|
if (FAILED(hr))
|
||
|
return hr;
|
||
|
|
||
|
CString stExtensionName;
|
||
|
stExtensionName.LoadString(IDS_SNAPIN_EXTENSION);
|
||
|
|
||
|
hr = RegisterSnapinGUID(&CLSID_TapiSnapinExtension,
|
||
|
NULL,
|
||
|
&CLSID_TapiSnapinAbout,
|
||
|
(LPCTSTR) stExtensionName,
|
||
|
_T("1.0"),
|
||
|
FALSE);
|
||
|
ASSERT(SUCCEEDED(hr));
|
||
|
|
||
|
if (FAILED(hr))
|
||
|
return hr;
|
||
|
|
||
|
//
|
||
|
// register the snapin nodes into the console node list
|
||
|
//
|
||
|
hr = RegisterNodeTypeGUID(&CLSID_TapiSnapin,
|
||
|
&GUID_TapiRootNodeType,
|
||
|
_T("Root of Manager"));
|
||
|
ASSERT(SUCCEEDED(hr));
|
||
|
|
||
|
#ifdef __NETWORK_CONSOLE__
|
||
|
hr = RegisterAsRequiredExtensionGUID(&GUID_NetConsRootNodeType,
|
||
|
&CLSID_TapiSnapinExtension,
|
||
|
(LPCTSTR) stExtensionName,
|
||
|
EXTENSION_TYPE_TASK | EXTENSION_TYPE_NAMESPACE,
|
||
|
&GUID_NetConsRootNodeType); // doesn't matter what this is, just
|
||
|
// needs to be non-null guid
|
||
|
|
||
|
ASSERT(SUCCEEDED(hr));
|
||
|
#endif
|
||
|
|
||
|
hr = RegisterAsRequiredExtensionGUID(&NODETYPE_COMPUTERMANAGEMENT_SERVERAPPS,
|
||
|
&CLSID_TapiSnapinExtension,
|
||
|
(LPCTSTR) stExtensionName,
|
||
|
EXTENSION_TYPE_TASK | EXTENSION_TYPE_NAMESPACE,
|
||
|
&NODETYPE_COMPUTERMANAGEMENT_SERVERAPPS); // NULL makes it not dynamic
|
||
|
ASSERT(SUCCEEDED(hr));
|
||
|
|
||
|
return hr;
|
||
|
}
|
||
|
|
||
|
/////////////////////////////////////////////////////////////////////////////
|
||
|
// DllUnregisterServer - Removes entries from the system registry
|
||
|
|
||
|
STDAPI DllUnregisterServer(void)
|
||
|
{
|
||
|
HRESULT hr = _Module.UnregisterServer();
|
||
|
ASSERT(SUCCEEDED(hr));
|
||
|
|
||
|
if (FAILED(hr))
|
||
|
return hr;
|
||
|
|
||
|
// un register the snapin
|
||
|
//
|
||
|
hr = UnregisterSnapinGUID(&CLSID_TapiSnapin);
|
||
|
ASSERT(SUCCEEDED(hr));
|
||
|
|
||
|
if (FAILED(hr))
|
||
|
return hr;
|
||
|
|
||
|
hr = UnregisterSnapinGUID(&CLSID_TapiSnapinExtension);
|
||
|
ASSERT(SUCCEEDED(hr));
|
||
|
|
||
|
if (FAILED(hr))
|
||
|
return hr;
|
||
|
|
||
|
// unregister the snapin nodes
|
||
|
//
|
||
|
hr = UnregisterNodeTypeGUID(&GUID_TapiRootNodeType);
|
||
|
ASSERT(SUCCEEDED(hr));
|
||
|
|
||
|
#ifdef __NETWORK_CONSOLE__
|
||
|
|
||
|
hr = UnregisterAsExtensionGUID(&GUID_NetConsRootNodeType,
|
||
|
&CLSID_TapiSnapinExtension,
|
||
|
EXTENSION_TYPE_TASK | EXTENSION_TYPE_NAMESPACE);
|
||
|
ASSERT(SUCCEEDED(hr));
|
||
|
#endif
|
||
|
|
||
|
hr = UnregisterAsExtensionGUID(&NODETYPE_COMPUTERMANAGEMENT_SERVERAPPS,
|
||
|
&CLSID_TapiSnapinExtension,
|
||
|
EXTENSION_TYPE_TASK | EXTENSION_TYPE_NAMESPACE);
|
||
|
ASSERT(SUCCEEDED(hr));
|
||
|
|
||
|
return hr;
|
||
|
}
|
||
|
|
||
|
#ifdef _DEBUG
|
||
|
void DbgVerifyInstanceCounts()
|
||
|
{
|
||
|
DEBUG_VERIFY_INSTANCE_COUNT(CHandler);
|
||
|
DEBUG_VERIFY_INSTANCE_COUNT(CMTHandler);
|
||
|
DEBUG_VERIFY_INSTANCE_COUNT(CTapiInfo);
|
||
|
}
|
||
|
|
||
|
#endif // _DEBUG
|
||
|
|