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

171 lines
4.1 KiB
C++

/**********************************************************************/
/** Microsoft Windows/NT **/
/** Copyright(c) Microsoft Corporation, 1997 - 1998 **/
/**********************************************************************/
/*
AcsAdmin.cpp
Implements In-Proc Server for ACS User extension and ACS Admin Snapin
FILE HISTORY:
11/03/97 Wei Jiang Created
*/
// acsadmin.cpp : Implementation of DLL Exports.
// Note: Proxy/Stub Information
// To build a separate proxy/stub DLL,
// run nmake -f acsadminps.mk in the project directory.
#include "stdafx.h"
#include "resource.h"
#include "initguid.h"
#include "acsadmin.h"
#include "acsadmin_i.c"
#include "ACSUser.h"
#include "ACSSnap.h"
#include "ACSSnapE.h"
#include "ACSSnapA.h"
// TFS snapin support
#include "register.h"
#include "tfsguid.h"
#include "ncglobal.h" // network console global defines
// ATL implementation code
#include <atlimpl.cpp>
// #include "DSObject.h"
CComModule _Module;
BEGIN_OBJECT_MAP(ObjectMap)
#if 0 // user page is removed
OBJECT_ENTRY(CLSID_ACSUser, CACSUser)
#endif
OBJECT_ENTRY(CLSID_ACSSnap, CACSSnap)
OBJECT_ENTRY(CLSID_ACSSnapExt, CACSSnapExt)
OBJECT_ENTRY(CLSID_ACSSnapAbout, CACSSnapAbout)
// OBJECT_ENTRY(CLSID_DSObject, CDSObject)
END_OBJECT_MAP()
class CAcsadminApp : public CWinApp
{
public:
virtual BOOL InitInstance();
virtual int ExitInstance();
};
CAcsadminApp theApp;
BOOL CAcsadminApp::InitInstance()
{
_Module.Init(ObjectMap, m_hInstance);
return CWinApp::InitInstance();
}
int CAcsadminApp::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)
{
return _Module.GetClassObject(rclsid, riid, ppv);
}
/////////////////////////////////////////////////////////////////////////////
// DllRegisterServer - Adds entries to the system registry
STDAPI DllRegisterServer(void)
{
TCHAR moduleFileName[MAX_PATH * 2];
GetModuleFileNameOnly(_Module.GetModuleInstance(), moduleFileName, MAX_PATH * 2);
//
// registers object, typelib and all interfaces in typelib
//
HRESULT hr = _Module.RegisterServer(/* bRegTypeLib */ FALSE);
ASSERT(SUCCEEDED(hr));
CString name, NameStringIndirect;
if (FAILED(hr))
return hr;
//
// register the snapin into the console snapin list
//
AFX_MANAGE_STATE(AfxGetStaticModuleState());
name.LoadString(IDS_SNAPIN_DESC);
NameStringIndirect.Format(L"@%s,-%-d", moduleFileName, IDS_SNAPIN_DESC);
hr = RegisterSnapinGUID(&CLSID_ACSSnap,
&CLSID_ACSRootNode,
&CLSID_ACSSnapAbout,
(LPCTSTR)name,
_T("1.0"),
TRUE,
NameStringIndirect);
ASSERT(SUCCEEDED(hr));
if (FAILED(hr))
return hr;
#ifdef __NETWORK_CONSOLE__
hr = RegisterAsRequiredExtensionGUID(&GUID_NetConsRootNodeType,
&CLSID_ACSSnap,
(LPCTSTR)name,
EXTENSION_TYPE_TASK,
&CLSID_ACSSnap);
ASSERT(SUCCEEDED(hr));
#endif
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_ACSSnap);
ASSERT(SUCCEEDED(hr));
if (FAILED(hr))
return hr;
#ifdef __NETWORK_CONSOLE__
hr = UnregisterAsExtensionGUID(&GUID_NetConsRootNodeType,
&CLSID_ACSSnap,
EXTENSION_TYPE_TASK);
#endif
return hr;
}