166 lines
3 KiB
C++
166 lines
3 KiB
C++
|
/*++
|
||
|
|
||
|
Copyright (C) 1997-1999 Microsoft Corporation
|
||
|
|
||
|
Module Name:
|
||
|
|
||
|
dllinit.cpp
|
||
|
|
||
|
Abstract:
|
||
|
|
||
|
This module implements the dll related function
|
||
|
|
||
|
Author:
|
||
|
|
||
|
William Hsieh (williamh) created
|
||
|
|
||
|
Revision History:
|
||
|
|
||
|
|
||
|
--*/
|
||
|
|
||
|
#include "devmgr.h"
|
||
|
#include "factory.h"
|
||
|
|
||
|
LPCTSTR DEVMGR_DEVICEID_SWITCH = TEXT("DMDeviceId");
|
||
|
LPCTSTR DEVMGR_MACHINENAME_SWITCH = TEXT("DMMachineName");
|
||
|
LPCTSTR DEVMGR_COMMAND_SWITCH = TEXT("DMCommand");
|
||
|
|
||
|
//
|
||
|
// DLL main entry point
|
||
|
// INPUT:
|
||
|
// HINSTANCE hInstance -- module instance handle
|
||
|
// DWORD dwReason -- the reason why we are called.
|
||
|
// LPVOID lpReserved -- no used here
|
||
|
|
||
|
BOOL
|
||
|
DllMain(
|
||
|
HINSTANCE hInstance,
|
||
|
DWORD dwReason,
|
||
|
LPVOID lpReserved
|
||
|
)
|
||
|
{
|
||
|
switch (dwReason)
|
||
|
{
|
||
|
case DLL_PROCESS_ATTACH:
|
||
|
|
||
|
// we do not need thread attach/detach calls
|
||
|
DisableThreadLibraryCalls(hInstance);
|
||
|
|
||
|
SHFusionInitializeFromModule(hInstance);
|
||
|
|
||
|
// do must be done
|
||
|
InitCommonControls();
|
||
|
|
||
|
INITCOMMONCONTROLSEX icce;
|
||
|
|
||
|
icce.dwSize = sizeof(icce);
|
||
|
icce.dwICC = ICC_DATE_CLASSES;
|
||
|
InitCommonControlsEx(&icce);
|
||
|
|
||
|
// initiailze our global stuff
|
||
|
InitGlobals(hInstance);
|
||
|
|
||
|
break;
|
||
|
|
||
|
case DLL_PROCESS_DETACH:
|
||
|
// do the clean up here.....
|
||
|
SHFusionUninitialize();
|
||
|
break;
|
||
|
}
|
||
|
return(TRUE);
|
||
|
}
|
||
|
|
||
|
BOOL InitGlobals(
|
||
|
HINSTANCE hInstance
|
||
|
)
|
||
|
{
|
||
|
g_hInstance = hInstance;
|
||
|
|
||
|
// preload memory allocation error message
|
||
|
TCHAR tszTemp[256];
|
||
|
::LoadString(hInstance, IDS_ERROR_NOMEMORY, tszTemp, ARRAYLEN(tszTemp));
|
||
|
g_MemoryException.SetMessage(tszTemp);
|
||
|
::LoadString(hInstance, IDS_NAME_DEVMGR, tszTemp, ARRAYLEN(tszTemp));
|
||
|
g_MemoryException.SetCaption(tszTemp);
|
||
|
|
||
|
try
|
||
|
{
|
||
|
//preload strings
|
||
|
g_strDevMgr.LoadString(hInstance, IDS_NAME_DEVMGR);
|
||
|
|
||
|
// parse the command line and establish machine name and etc
|
||
|
CDMCommandLine CmdLine;
|
||
|
CmdLine.ParseCommandLine(GetCommandLine());
|
||
|
g_strStartupMachineName = CmdLine.GetMachineName();
|
||
|
g_strStartupDeviceId = CmdLine.GetDeviceId();
|
||
|
g_strStartupCommand = CmdLine.GetCommand();
|
||
|
}
|
||
|
|
||
|
catch (CMemoryException* e)
|
||
|
{
|
||
|
e->ReportError();
|
||
|
e->Delete();
|
||
|
return FALSE;
|
||
|
}
|
||
|
|
||
|
return TRUE;
|
||
|
}
|
||
|
|
||
|
//
|
||
|
// Overloaded allocation operators
|
||
|
//
|
||
|
void * __cdecl operator new(
|
||
|
size_t size)
|
||
|
{
|
||
|
return ((void *)LocalAlloc(LPTR, size));
|
||
|
}
|
||
|
|
||
|
void __cdecl operator delete(
|
||
|
void *ptr)
|
||
|
{
|
||
|
LocalFree(ptr);
|
||
|
}
|
||
|
|
||
|
__cdecl _purecall(void)
|
||
|
{
|
||
|
return (0);
|
||
|
}
|
||
|
|
||
|
|
||
|
//
|
||
|
// Standard APIs for a OLE server. They are all routed to CClassFactory
|
||
|
// support functions
|
||
|
//
|
||
|
//
|
||
|
|
||
|
STDAPI
|
||
|
DllRegisterServer()
|
||
|
{
|
||
|
return CClassFactory::RegisterAll();
|
||
|
}
|
||
|
|
||
|
STDAPI
|
||
|
DllUnregisterServer()
|
||
|
{
|
||
|
return CClassFactory::UnregisterAll();
|
||
|
}
|
||
|
|
||
|
|
||
|
STDAPI
|
||
|
DllCanUnloadNow()
|
||
|
{
|
||
|
return CClassFactory::CanUnloadNow();
|
||
|
}
|
||
|
|
||
|
|
||
|
STDAPI
|
||
|
DllGetClassObject(
|
||
|
REFCLSID rclsid,
|
||
|
REFIID riid,
|
||
|
void** ppv
|
||
|
)
|
||
|
{
|
||
|
return CClassFactory::GetClassObject(rclsid, riid, ppv);
|
||
|
}
|