Exemplo n.º 1
0
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);
    }
Exemplo n.º 2
0
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();
}
Exemplo n.º 3
0
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();
}
Exemplo n.º 4
0
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();
}