Source code of Windows XP (NT5)
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.
 
 
 
 
 
 

154 lines
3.7 KiB

/* ----------------------------------------------------------------------
Copyright (c) 1995-1996, Microsoft Corporation
All rights reserved
siMain.cpp - main Scrapi Interface
Routines to interface with calling application.
---------------------------------------------------------------------- */
#include "precomp.h"
#include "clcnflnk.hpp"
#include "version.h"
// SDK stuff
#include "NmApp.h" // To register CLSID_NetMeeting
#include "NmSysInfo.h" // For CNmSysInfoObj
#include "SDKInternal.h" // For NmManager, etc.
#include "MarshalableTI.h" // For Marshalable Type Info
// Global variable definitions (local to each instance)
HINSTANCE g_hInst = NULL; // This dll's instance
CComModule _Module;
BEGIN_OBJECT_MAP(ObjectMap)
OBJECT_ENTRY(CLSID_NetMeeting, CNetMeetingObj)
OBJECT_ENTRY(CLSID_NmSysInfo, CNmSysInfoObj)
OBJECT_ENTRY(CLSID_NmManager, CNmManagerObj)
OBJECT_ENTRY(CLSID_MarshalableTI, CMarshalableTI)
END_OBJECT_MAP()
/* D L L M A I N */
/*-------------------------------------------------------------------------
%%Function: DllMain
-------------------------------------------------------------------------*/
BOOL WINAPI DllMain(HINSTANCE hDllInst, DWORD fdwReason, LPVOID lpv)
{
switch (fdwReason)
{
case DLL_PROCESS_ATTACH:
{
#ifdef DEBUG
InitDebug();
DBG_INIT_MEMORY_TRACKING(hDllInst);
TRACE_OUT(("*** MSCONF.DLL: Attached process thread %X", GetCurrentThreadId()));
#endif
g_hInst = hDllInst;
_Module.Init(ObjectMap, g_hInst);
DisableThreadLibraryCalls(hDllInst);
InitDataObjectModule();
break;
}
case DLL_PROCESS_DETACH:
_Module.Term();
#ifdef DEBUG
DBG_CHECK_MEMORY_TRACKING(hDllInst);
TRACE_OUT(("*** MSCONF.DLL: Detached process thread %X", GetCurrentThreadId()));
DeInitDebug();
#endif
break;
case DLL_THREAD_ATTACH:
case DLL_THREAD_DETACH:
default:
break;
}
return TRUE;
}
/////////////////////////////////////////////////////////////////////////////
// Used to determine whether the DLL can be unloaded by OLE
STDAPI DllCanUnloadNow(void)
{
return (_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)
{
HRESULT hr = S_OK;
if( InlineIsEqualGUID(rclsid, CLSID_NetMeeting) || InlineIsEqualGUID(rclsid, CLSID_NmManager) )
{
hr = CoGetClassObject(rclsid, CLSCTX_LOCAL_SERVER, NULL, riid, ppv);
}
else
{
hr = _Module.GetClassObject(rclsid, riid, ppv);
}
return hr;
}
/* D L L G E T V E R S I O N */
/*-------------------------------------------------------------------------
%%Function: DllGetVersion
-------------------------------------------------------------------------*/
STDAPI DllGetVersion(IN OUT DLLVERSIONINFO * pinfo)
{
HRESULT hr;
if ((NULL == pinfo) ||
IsBadWritePtr(pinfo, sizeof(*pinfo)) ||
sizeof(*pinfo) != pinfo->cbSize)
{
hr = E_INVALIDARG;
}
else
{
pinfo->dwMajorVersion = (VER_PRODUCTVERSION_DW & 0xFF000000) >> 24;
pinfo->dwMinorVersion = (VER_PRODUCTVERSION_DW & 0x00FF0000) >> 16;
pinfo->dwBuildNumber = (VER_PRODUCTVERSION_DW & 0x0000FFFF);
pinfo->dwPlatformID = DLLVER_PLATFORM_WINDOWS;
hr = S_OK;
}
return hr;
}
/////////////////////////////////////////////////////////////////////////////
// DllRegisterServer - Adds entries to the system registry
STDAPI DllRegisterServer(void)
{
return _Module.RegisterServer();
}
/////////////////////////////////////////////////////////////////////////////
// DllUnregisterServer - Removes entries from the system registry
STDAPI DllUnregisterServer(void)
{
HRESULT hr = S_OK;
hr = _Module.UnregisterServer();
return hr;
}