133 lines
2.8 KiB
C++
133 lines
2.8 KiB
C++
#include "precomp.h"
|
|
|
|
PpNotificationThread g_NotificationThread;
|
|
LONG g_bStarted;
|
|
|
|
BOOL WINAPI DllMain(
|
|
HINSTANCE hinstDLL, // handle to DLL module
|
|
DWORD fdwReason, // reason for calling function
|
|
LPVOID lpvReserved // reserved
|
|
)
|
|
{
|
|
switch(fdwReason)
|
|
{
|
|
case DLL_PROCESS_ATTACH:
|
|
|
|
g_bStarted = FALSE;
|
|
|
|
DisableThreadLibraryCalls(hinstDLL);
|
|
|
|
#ifdef MEM_DBG
|
|
{
|
|
int tmpFlag = _CrtSetDbgFlag( _CRTDBG_REPORT_FLAG );
|
|
tmpFlag |= _CRTDBG_ALLOC_MEM_DF;
|
|
tmpFlag |= _CRTDBG_LEAK_CHECK_DF;
|
|
_CrtSetDbgFlag( tmpFlag );
|
|
char *myBuf = new char[64];
|
|
strcpy(myBuf, "Nexus leak ok!"); // Let em know it's working
|
|
}
|
|
#endif
|
|
|
|
if(!g_pAlert)
|
|
{
|
|
g_pAlert = CreatePassportAlertObject(PassportAlertInterface::EVENT_TYPE);
|
|
if(g_pAlert)
|
|
{
|
|
g_pAlert->initLog(PM_ALERTS_REGISTRY_KEY, EVCAT_NEXUS, NULL, 1);
|
|
}
|
|
else
|
|
_ASSERT(g_pAlert);
|
|
}
|
|
|
|
break;
|
|
|
|
case DLL_PROCESS_DETACH:
|
|
|
|
delete g_pAlert;
|
|
|
|
if(g_bStarted)
|
|
{
|
|
// DARRENAN 4092
|
|
// Remove lines that wait for thread to stop, a
|
|
// guaranteed deadlock.
|
|
|
|
g_NotificationThread.stop();
|
|
}
|
|
|
|
break;
|
|
|
|
default:
|
|
|
|
break;
|
|
}
|
|
|
|
return TRUE;
|
|
}
|
|
|
|
HANDLE WINAPI
|
|
RegisterCCDUpdateNotification(
|
|
LPCTSTR pszCCDName,
|
|
ICCDUpdate* piCCDUpdate
|
|
)
|
|
{
|
|
HANDLE hClientHandle;
|
|
HRESULT hr;
|
|
|
|
hr = g_NotificationThread.AddCCDClient(tstring(pszCCDName), piCCDUpdate, &hClientHandle);
|
|
if(hr != S_OK)
|
|
{
|
|
hClientHandle = NULL;
|
|
}
|
|
|
|
if(!InterlockedExchange(&g_bStarted, TRUE))
|
|
g_NotificationThread.start();
|
|
|
|
return hClientHandle;
|
|
}
|
|
|
|
BOOL WINAPI
|
|
UnregisterCCDUpdateNotification(
|
|
HANDLE hNotificationHandle
|
|
)
|
|
{
|
|
return (g_NotificationThread.RemoveClient(hNotificationHandle) == S_OK);
|
|
}
|
|
|
|
HANDLE WINAPI
|
|
RegisterConfigChangeNotification(
|
|
IConfigurationUpdate* piConfigUpdate
|
|
)
|
|
{
|
|
HANDLE hClientHandle;
|
|
HRESULT hr;
|
|
|
|
hr = g_NotificationThread.AddLocalConfigClient(piConfigUpdate, &hClientHandle);
|
|
if(hr != S_OK)
|
|
{
|
|
hClientHandle = NULL;
|
|
}
|
|
|
|
if(!InterlockedExchange(&g_bStarted, TRUE))
|
|
g_NotificationThread.start();
|
|
|
|
return hClientHandle;
|
|
}
|
|
|
|
BOOL WINAPI
|
|
UnregisterConfigChangeNotification(
|
|
HANDLE hNotificationHandle
|
|
)
|
|
{
|
|
return (g_NotificationThread.RemoveClient(hNotificationHandle) == S_OK);
|
|
}
|
|
|
|
BOOL WINAPI
|
|
GetCCD(
|
|
LPCTSTR pszCCDName,
|
|
IXMLDocument** ppiXMLDocument,
|
|
BOOL bForceFetch
|
|
)
|
|
{
|
|
return (g_NotificationThread.GetCCD(tstring(pszCCDName), ppiXMLDocument, bForceFetch) == S_OK);
|
|
}
|