// hsmconpt.cpp : Implementation of CHsmConnPoint #include "stdafx.h" #include "Hsmservr.h" #include "hsmconpt.h" // define for access to global server objects extern IHsmServer *g_pEngServer; extern IFsaServer *g_pFsaServer; extern CRITICAL_SECTION g_FsaCriticalSection; extern CRITICAL_SECTION g_EngCriticalSection; extern BOOL g_bEngInitialized; extern BOOL g_bFsaInitialized; static USHORT iCount = 0; // Count of existing objects ///////////////////////////////////////////////////////////////////////////// // CHsmConnPoint STDMETHODIMP CHsmConnPoint::FinalConstruct(void) /*++ Implements: CComObjectRoot::FinalConstruct(). --*/ { HRESULT hr = S_OK; WsbTraceIn(OLESTR("CHsmConnPoint::FinalConstruct"), OLESTR("")); try { WsbAffirmHr(CComObjectRoot::FinalConstruct()); // currently, no private initialization // Add class to object table WSB_OBJECT_ADD(CLSID_CFsaScanItemNTFS, this); } WsbCatch(hr); iCount++; WsbTraceOut(OLESTR("CHsmConnPoint::FinalConstruct"), OLESTR("hr = <%ls>, Count is <%d>"), WsbHrAsString(hr), iCount); return(hr); } STDMETHODIMP CHsmConnPoint::FinalRelease(void) /*++ Implements: CComObjectRoot::FinalRelease(). --*/ { HRESULT hr = S_OK; WsbTraceIn(OLESTR("CHsmConnPoint::FinalRelease"), OLESTR("")); // Subtract class from object table WSB_OBJECT_SUB(CLSID_CFsaScanItemNTFS, this); // currently, no private cleanup // Let the parent class do his thing. CComObjectRoot::FinalRelease(); iCount--; WsbTraceOut(OLESTR("CHsmConnPoint::FinalRelease"), OLESTR("hr = <%ls>, Count is <%d>"), WsbHrAsString(hr), iCount); return (hr); } STDMETHODIMP CHsmConnPoint::GetEngineServer(IHsmServer **ppHsmServer) { // If Engine server has been created, return the pointer. Otherwise, fail. HRESULT hr = S_OK; WsbTraceIn(OLESTR("CHsmConnPoint::GetEngineServer"), OLESTR("")); try { // verify that pointers are valid WsbAssert (ppHsmServer != 0, E_POINTER); WsbAffirm (g_pEngServer != 0, HSM_E_NOT_READY); // assign in a safe manner (only if manager object is already initializaed) EnterCriticalSection(&g_EngCriticalSection); if (g_bEngInitialized) { _ASSERTE(g_pEngServer != 0); // shouldn't happen *ppHsmServer = g_pEngServer; g_pEngServer->AddRef(); } else { hr = HSM_E_NOT_READY; } LeaveCriticalSection (&g_EngCriticalSection); } WsbCatch (hr); WsbTraceOut(OLESTR("CHsmConnPoint::GetEngineServer"), OLESTR("hr = <%ls>"), WsbHrAsString(hr)); return (hr); } STDMETHODIMP CHsmConnPoint::GetFsaServer(IFsaServer **ppFsaServer) { // If Fsa server has been created, return the pointer. Otherwise, fail. HRESULT hr = S_OK; WsbTraceIn(OLESTR("CHsmConnPoint::GetFsaServer"), OLESTR("")); try { // verify that pointers are valid WsbAssert (ppFsaServer != 0, E_POINTER); WsbAffirm (g_pFsaServer != 0, FSA_E_NOT_READY); // assign in a safe manner (only if manager object is already initializaed) EnterCriticalSection(&g_FsaCriticalSection); if (g_bFsaInitialized) { _ASSERTE(g_pFsaServer != 0); // shouldn't happen *ppFsaServer = g_pFsaServer; g_pFsaServer->AddRef(); } else { hr = FSA_E_NOT_READY; } LeaveCriticalSection(&g_FsaCriticalSection); } WsbCatch (hr); WsbTraceOut(OLESTR("CHsmConnPoint::GetFsaServer"), OLESTR("hr = <%ls>"), WsbHrAsString(hr)); return (hr); }