|
|
// ConnMgr.cpp : Implementation of WinMain
// Note: Proxy/Stub Information
// To build a separate proxy/stub DLL,
// run nmake -f ConnMgrps.mk in the project directory.
#include "stdafx.h"
#include "resource.h"
#include "initguid.h"
#include "Connection.h"
#include "ConnMgr.h"
#include "ConnMgr_i.c"
#include "ConnectionManager.h"
class CConnApp : public CWinApp { public: virtual BOOL InitInstance(); virtual int ExitInstance(); BOOL InitCOMSecurity(); };
CConnApp theApp;
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; }
HRESULT CExeModule::UpdateRegistry(LPCOLESTR lpszRes, BOOL bRegister) { USES_CONVERSION;
CComPtr<IRegistrar> p;
HRESULT hRes = CoCreateInstance(CLSID_Registrar, NULL, CLSCTX_INPROC_SERVER, IID_IRegistrar, (void**)&p); if (FAILED(hRes)) { AfxMessageBox(_T("Failed to create ATL Registrar! Try updated version of ATL.DLL.")); return hRes; }
_ATL_MODULE* pM = this; TCHAR szModule[_MAX_PATH]; GetModuleFileName(pM->m_hInst, szModule, _MAX_PATH); p->AddReplacement(OLESTR("Module"), T2OLE(szModule));
LPCOLESTR szType = OLESTR("REGISTRY"); GetModuleFileName(pM->m_hInstResource, szModule, _MAX_PATH); LPOLESTR pszModule = T2OLE(szModule); #ifdef SAVE
if (HIWORD(lpszRes)==0) { if (bRegister) hRes = p->ResourceRegister(pszModule, ((UINT)LOWORD((DWORD)lpszRes)), szType); else hRes = p->ResourceUnregister(pszModule, ((UINT)LOWORD((DWORD)lpszRes)), szType); } else { #endif
if (bRegister) hRes = p->ResourceRegisterSz(pszModule, lpszRes, szType); else hRes = p->ResourceUnregisterSz(pszModule, lpszRes, szType); #ifdef SAVE
} #endif
return hRes;
}
CExeModule _Module;
BEGIN_OBJECT_MAP(ObjectMap) OBJECT_ENTRY(CLSID_ConnectionManager, CConnectionManager) END_OBJECT_MAP()
LPCTSTR FindOneOf(LPCTSTR p1, LPCTSTR p2) { while (*p1 != NULL) { LPCTSTR p = p2; while (*p != NULL) { if (*p1 == *p++) return p1+1; } p1++; } return NULL; }
BOOL CConnApp::InitCOMSecurity() { HRESULT hRes = CoInitializeSecurity(NULL, -1, NULL, NULL, RPC_C_AUTHN_LEVEL_CONNECT, RPC_C_IMP_LEVEL_IMPERSONATE, NULL, EOAC_NONE, NULL); if (FAILED(hRes)) return false;
return true; }
BOOL CConnApp::InitInstance() { // CG: The following block was added by the Windows Sockets component.
{ if (!AfxSocketInit()) { AfxMessageBox(CG_IDS_SOCKETS_INIT_FAILED); return FALSE; }
} // Initialize OLE libraries
HRESULT hr = CoInitializeEx(NULL,COINIT_MULTITHREADED); if (FAILED(hr)) { AfxMessageBox(_T("OLE Initialization Failed!")); return FALSE; }
// Initialize COM Security
if (!InitCOMSecurity()) { AfxMessageBox(_T("Security Initialization Failed!")); return FALSE; }
// Initialize the ATL Module
_Module.Init(ObjectMap,m_hInstance); _Module.dwThreadID = GetCurrentThreadId();
#ifdef _AFXDLL
Enable3dControls(); // Call this when using MFC in a shared DLL
#else
Enable3dControlsStatic(); #endif
// Check command line arguments
TCHAR szTokens[] = _T("-/"); BOOL bRun = TRUE; LPCTSTR lpszToken = FindOneOf(m_lpCmdLine, szTokens); while (lpszToken != NULL) { // Register ATL/MFC class factories
if (lstrcmpi(lpszToken, _T("Embedding")) == 0 || lstrcmpi(lpszToken, _T("Automation")) == 0) { AfxOleSetUserCtrl(FALSE); break; } else if (lstrcmpi(lpszToken, _T("UnregServer")) == 0) { _Module.UpdateRegistryFromResource(IDR_ConnMgr, FALSE); // _Module.UpdateRegistry((LPCOLESTR)MAKEINTRESOURCE(IDR_CONNECTIONMANAGER), false);
_Module.UpdateRegistry(_T("connectionmanager.rgs"), false);
bRun = FALSE; break; } else if (lstrcmpi(lpszToken, _T("RegServer")) == 0) { _Module.UpdateRegistryFromResource(IDR_ConnMgr, TRUE); // _Module.UpdateRegistry((LPCOLESTR)MAKEINTRESOURCE(IDR_CONNECTIONMANAGER), true);
_Module.UpdateRegistry(_T("connectionmanager.rgs"), true); COleObjectFactory::UpdateRegistryAll(); bRun = FALSE; break; } lpszToken = FindOneOf(lpszToken, szTokens); }
if (bRun) { _Module.RegisterClassObjects(CLSCTX_LOCAL_SERVER,REGCLS_MULTIPLEUSE); COleObjectFactory::RegisterAll(); }
return TRUE; }
int CConnApp::ExitInstance() { CoUninitialize(); // MFC's class factories registration is
// automatically revoked by MFC itself
_Module.RevokeClassObjects(); // Revoke class factories for ATL
_Module.Term(); // cleanup ATL Global Module
CoUninitialize(); return CWinApp::ExitInstance(); }
|