|
|
//+-------------------------------------------------------------------------
//
// Microsoft Windows
//
// Copyright (C) Microsoft Corporation, 1998 - 1999
//
// File: rrasprxy.cpp
//
//--------------------------------------------------------------------------
#include <stdafx.h>
#include <windows.h>
#include "remras.h"
#include "resource.h"
#define _ATL_APARTMENT_THREADED
#define _ATL_STATIC_REGISTRY
#include <atlbase.h>
//You may derive a class from CComModule and use it if you want to override
//something, but do not change the name of _Module
class CExeModule : public CComModule { public: LONG Unlock(); DWORD dwThreadID; }; CExeModule _Module; #include <atlcom.h>
#undef _ATL_DLL
#include <statreg.h>
#include <statreg.cpp>
#define _ATL_DLL
#include <atlimpl.cpp>
BEGIN_OBJECT_MAP(ObjectMap) // OBJECT_ENTRY(CLSID_RemoteRouterConfig, CRemCfg)
END_OBJECT_MAP()
extern "C" { extern BOOL WINAPI MidlGeneratedDllMain(HINSTANCE, DWORD, LPVOID); extern HRESULT STDAPICALLTYPE MidlGeneratedDllRegisterServer(); extern HRESULT STDAPICALLTYPE MidlGeneratedDllUnregisterServer(); extern HRESULT STDAPICALLTYPE MidlGeneratedDllGetClassObject(REFCLSID,REFIID, void **); extern HRESULT STDAPICALLTYPE MidlGeneratedDllCanUnloadNow(); };
LONG CExeModule::Unlock() { LONG l = CComModule::Unlock(); if (l == 0) { #if _WIN32_WINNT >= 0x0400
if (CoSuspendClassObjects() == S_OK) PostThreadMessage(dwThreadID, WM_QUIT, 0, 0); #else
PostThreadMessage(dwThreadID, WM_QUIT, 0, 0); #endif
} return l; }
/*!--------------------------------------------------------------------------
DllMain - Author: KennT ---------------------------------------------------------------------------*/ BOOL WINAPI DllMain(HINSTANCE hInstance, DWORD dwReason, LPVOID pvReserved) { BOOL fReturn = TRUE; if(dwReason == DLL_PROCESS_ATTACH){ _Module.Init(ObjectMap, hInstance); _Module.dwThreadID = GetCurrentThreadId();
fReturn = MidlGeneratedDllMain(hInstance, dwReason, pvReserved); } else if(dwReason == DLL_PROCESS_DETACH){ _Module.Term(); } return fReturn; }
/*!--------------------------------------------------------------------------
DllRegisterServer - Author: KennT ---------------------------------------------------------------------------*/ HRESULT STDAPICALLTYPE DllRegisterServer() { CRegObject ro; WCHAR swzPath[MAX_PATH*2 + 1] = {0}; WCHAR swzModule[MAX_PATH*2 + 1] = {0}; HRESULT hRes; int i, cLen;
if ( !GetModuleFileNameW(_Module.GetModuleInstance(), swzPath, MAX_PATH*2) ) { return GetLastError(); } lstrcpyW(swzModule, swzPath);
// Given this path, substitue remrras.exe for rrasprxy.dll
// ----------------------------------------------------------------
cLen = lstrlenW(swzPath); for (i=cLen; --i>=0; ) { // Ok, this is a path marker, copy over it
// ------------------------------------------------------------
if (swzPath[i] == L'\\') { lstrcpyW(swzPath+i+1, L"remrras.exe"); break; } } // Add in the substitute for the %REMRRAS%
// ----------------------------------------------------------------
ro.AddReplacement(L"REMRRAS", swzPath);
// We need to fix up the registrar.
// Go through and register the object CLSID for remrras.exe
// ----------------------------------------------------------------
ro.ResourceRegister(swzModule, ((UINT) LOWORD((DWORD)IDR_Remrras)), L"REGISTRY");
// Register the APPIDs
// ----------------------------------------------------------------
ro.ResourceRegister(swzModule, ((UINT) LOWORD((DWORD) IDR_REMCFG)), L"REGISTRY");
// Register the type library for REMRRAS
// ----------------------------------------------------------------
hRes = AtlModuleRegisterTypeLib(&_Module, NULL);
// Call the MIDL-generated registration (to register the
// proxy dll).
// ----------------------------------------------------------------
if (SUCCEEDED(hRes)) hRes = MidlGeneratedDllRegisterServer();
return hRes; }
/*!--------------------------------------------------------------------------
DllUnregisterServer - Author: KennT ---------------------------------------------------------------------------*/ HRESULT STDAPICALLTYPE DllUnregisterServer() { CRegObject ro; WCHAR swzPath[MAX_PATH*2 + 1] = {0}; WCHAR swzModule[MAX_PATH*2 + 1] = {0}; HRESULT hRes; int i, cLen;
if ( !GetModuleFileNameW(_Module.GetModuleInstance(), swzPath, MAX_PATH*2) ) { return GetLastError(); } lstrcpynW(swzModule, swzPath, MAX_PATH);
// Given this path, substitue remrras.exe for rrasprxy.dll
// ----------------------------------------------------------------
cLen = lstrlenW(swzPath); for (i=cLen; --i>=0; ) { // Ok, this is a path marker, copy over it
// ------------------------------------------------------------
if (swzPath[i] == L'\\') { lstrcpyW(swzPath+i+1, L"remrras.exe"); break; } }
// Add in the substitute for the %REMRRAS%
// ----------------------------------------------------------------
ro.AddReplacement(L"REMRRAS", swzPath);
// We need to fix up the registrar.
// Go through and register the object CLSID for remrras.exe
// ----------------------------------------------------------------
ro.ResourceUnregister(swzModule, ((UINT) LOWORD((DWORD)IDR_Remrras)), L"REGISTRY");
// Unregister the APPID
// ----------------------------------------------------------------
ro.ResourceUnregister(swzModule, ((UINT) LOWORD((DWORD)IDR_REMCFG)), L"REGISTRY");
// Unregister the type library
// ----------------------------------------------------------------
hRes = UnRegisterTypeLib(LIBID_REMRRASLib, 1, 0, // version 1.0
LOCALE_SYSTEM_DEFAULT, SYS_WIN32); // Call the MIDL-generated registration (to unregister the
// proxy dll).
// ----------------------------------------------------------------
hRes = MidlGeneratedDllUnregisterServer();
return hRes; }
/*!--------------------------------------------------------------------------
DllGetClassObject - Author: KennT ---------------------------------------------------------------------------*/ HRESULT STDAPICALLTYPE DllGetClassObject(REFCLSID rclsid, REFIID riid, void **ppv) { return MidlGeneratedDllGetClassObject(rclsid, riid, ppv); }
/*!--------------------------------------------------------------------------
DllCanUnloadNow - Author: KennT ---------------------------------------------------------------------------*/ HRESULT STDAPICALLTYPE DllCanUnloadNow() { return MidlGeneratedDllCanUnloadNow(); }
|