void CServiceModule::Run() { _Module.dwThreadID = GetCurrentThreadId(); //HRESULT hr = CoInitialize(NULL); // If you are running on NT 4.0 or higher you can use the following call // instead to make the EXE free threaded. // This means that calls come in on a random RPC thread //Imago changed 6/25/08 HRESULT hr = CoInitializeEx(NULL, COINIT_MULTITHREADED); _ASSERTE(SUCCEEDED(hr)); // This provides a NULL DACL which will allow access to everyone. CSecurityDescriptor sd; sd.InitializeFromThreadToken(); hr = CoInitializeSecurity(sd, -1, NULL, NULL, RPC_C_AUTHN_LEVEL_PKT, RPC_C_IMP_LEVEL_IMPERSONATE, NULL, EOAC_NONE, NULL); _ASSERTE(SUCCEEDED(hr)); hr = _Module.RegisterClassObjects(CLSCTX_LOCAL_SERVER | CLSCTX_REMOTE_SERVER, REGCLS_MULTIPLEUSE); _ASSERTE(SUCCEEDED(hr)); LogEvent(EVENTLOG_INFORMATION_TYPE, LE_Started); if (m_bService) SetServiceStatus(SERVICE_RUNNING); { TRef<CLobbyApp> plobbyapp = new CLobbyApp(this); if SUCCEEDED(plobbyapp->Init()) plobbyapp->Run(); else LogEvent(EVENTLOG_ERROR_TYPE, LE_StartFailed); }
void CServiceModule::Run() { _Module.dwThreadID = GetCurrentThreadId(); HRESULT hr = CoInitialize(NULL); // If you are running on NT 4.0 or higher you can use the following call // instead to make the EXE free threaded. // This means that calls come in on a random RPC thread // HRESULT hr = CoInitializeEx(NULL, COINIT_MULTITHREADED); _ASSERTE(SUCCEEDED(hr)); // This provides a NULL DACL which will allow access to everyone. CSecurityDescriptor sd; sd.InitializeFromThreadToken(); hr = CoInitializeSecurity(sd, -1, NULL, NULL, RPC_C_AUTHN_LEVEL_PKT, RPC_C_IMP_LEVEL_IMPERSONATE, NULL, EOAC_NONE, NULL); _ASSERTE(SUCCEEDED(hr)); hr = _Module.RegisterClassObjects(CLSCTX_LOCAL_SERVER | CLSCTX_REMOTE_SERVER, REGCLS_MULTIPLEUSE); _ASSERTE(SUCCEEDED(hr)); LogEvent(_T("Service started")); if (m_bService) SetServiceStatus(SERVICE_RUNNING); MSG msg; while (GetMessage(&msg, 0, 0, 0)) DispatchMessage(&msg); _Module.RevokeClassObjects(); CoUninitialize(); }
void CServiceModule::Run() { HRESULT hr; _Module.dwThreadID = GetCurrentThreadId(); // If you are running on NT 4.0 or higher you can use the following call // to make your service free threaded. // This means that calls come in on a random RPC thread hr = CoInitializeEx(NULL, COINIT_MULTITHREADED); // Otherwise, for single threaded use // hr = CoInitialize(NULL); ATLASSERT(SUCCEEDED(hr)); // In NT 4.0 and higher where DCOM is supported you may wish to initialize // the security layer. The following code will give you a DCOM service which // would allow ALL users access to objects CSecurityDescriptor sd; sd.InitializeFromThreadToken(); hr = CoInitializeSecurity(NULL, -1, NULL, NULL, RPC_C_AUTHN_LEVEL_NONE, RPC_C_IMP_LEVEL_IDENTIFY, NULL, EOAC_NONE, NULL); ATLASSERT(SUCCEEDED(hr)); // If you wish to have your object creatable remotely using DCOM use the following hr = _Module.RegisterClassObjects(CLSCTX_LOCAL_SERVER | CLSCTX_REMOTE_SERVER, REGCLS_MULTIPLEUSE); // Otherwise, only local activation // hr = _Module.RegisterClassObjects(CLSCTX_LOCAL_SERVER, REGCLS_MULTIPLEUSE); ATLASSERT(SUCCEEDED(hr)); LogEvent(_T("Service started")); SetServiceStatus(SERVICE_RUNNING); MSG msg; while (GetMessage(&msg, 0, 0, 0)) DispatchMessage(&msg); _Module.RevokeClassObjects(); CoUninitialize(); }
void CServiceModule::Run() { _Module.dwThreadID = GetCurrentThreadId(); _CrtSetDbgFlag( _CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF); CEgTcpDriver::Init(); if(!CEgLibTraceManager::g_spTrace) { CEgTpTracePtr spTrace = CEgTpTracePtr(new CEgTpTrace()); if(spTrace) { spTrace->ReadTraceSettings(); CEgLibTraceManager::g_spTrace = boost::shared_static_cast<CEgLibTraceManager>(spTrace); } } // If you are running on NT 4.0 or higher you can use the following call // instead to make the EXE free threaded. // This means that calls come in on a random RPC thread // HRESULT hr = CoInitializeEx(NULL, COINIT_MULTITHREADED); HRESULT hRes; if(m_bService) { // This provides a NULL DACL which will allow access to everyone. CSecurityDescriptor sd; hRes = sd.InitializeFromThreadToken(); if(FAILED(hRes)) { Trace(1,_T("Transport Service Run"),_T("InitializeFromThreadToken error %X"),hRes); } hRes = CoInitializeSecurity(sd, -1, NULL, NULL, RPC_C_AUTHN_LEVEL_PKT, RPC_C_IMP_LEVEL_IMPERSONATE, NULL, EOAC_NONE, NULL); if(FAILED(hRes)) { Trace(1,_T("Transport Service Run"),_T("CoInitializeSecurity error %X"),hRes); } _ASSERTE(SUCCEEDED(hRes)); hRes = _Module.RegisterClassObjects(CLSCTX_LOCAL_SERVER | CLSCTX_REMOTE_SERVER, REGCLS_MULTIPLEUSE | REGCLS_SUSPENDED); if(FAILED(hRes)) { Trace(1,_T("Transport Service Run"),_T("RegisterClassObjects error %X"),hRes); } _ASSERTE(SUCCEEDED(hRes)); hRes = CoResumeClassObjects(); if(FAILED(hRes)) { Trace(1,_T("Transport Service Run"),_T("CoResumeClassObjects error %X"),hRes); } } else { #if _WIN32_WINNT >= 0x0400 & defined(_ATL_FREE_THREADED) hRes = _Module.RegisterClassObjects(CLSCTX_LOCAL_SERVER, REGCLS_MULTIPLEUSE | REGCLS_SUSPENDED); _ASSERTE(SUCCEEDED(hRes)); hRes = CoResumeClassObjects(); #else hRes = _Module.RegisterClassObjects(CLSCTX_LOCAL_SERVER, REGCLS_MULTIPLEUSE); _ASSERTE(SUCCEEDED(hRes)); #endif } DoSettings(); //EgAssert(g_pHost); //EgAssert(g_pRouter); if (m_bService) SetServiceStatus(SERVICE_RUNNING); CEgLibTraceManager::Trace(LogError,_T("Transport Service Run"),_T("Transport Service started")); m_isRunning = TRUE; MSG msg; while (GetMessage(&msg, 0, 0, 0)) DispatchMessage(&msg); m_isRunning = FALSE; _Module.RevokeClassObjects(); CEgLibTraceManager::Trace(LogError,_T("Transport Service Run"),_T("Transport Service stopped")); if(CEgLibTraceManager::g_spTrace!=NULL) CEgLibTraceManager::g_spTrace.reset(); if (m_bService) SetServiceStatus(SERVICE_STOPPED); CEgTcpDriver::Exit(); }