Leaked source code of windows server 2003
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
/**********************************************************************/ /** Microsoft Passport **/ /** Copyright(c) Microsoft Corporation, 1999 - 2001 **/ /**********************************************************************/
/*
nexus.cpp implement exported functions from this dll
FILE HISTORY:
*/
#include "precomp.h"
PpNotificationThread g_NotificationThread; LONG g_bStarted;
//===========================================================================
//
// DllMain
// -- dll entry function
// -- manage creation/deletion of alert object or event log object
//
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);
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:
if (g_pAlert) { g_pAlert->closeLog(); 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; }
//===========================================================================
//
// RegisterCCDUpdateNotification
// -- set CCD e.g. partner.xml changing notification sink
//
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; }
//===========================================================================
//
// UnregisterCCDUpdateNotification
// -- remove CCD e.g. partner.xml changing notification sink
//
//
BOOL WINAPI UnregisterCCDUpdateNotification( HANDLE hNotificationHandle ) { return (g_NotificationThread.RemoveClient(hNotificationHandle) == S_OK); }
//===========================================================================
//
// RegisterConfigChangeNotification
// -- set registry setting change sink
//
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; }
//===========================================================================
//
// UnregisterConfigChangeNotification
// -- remove registry setting change sink
//
BOOL WINAPI UnregisterConfigChangeNotification( HANDLE hNotificationHandle ) { return (g_NotificationThread.RemoveClient(hNotificationHandle) == S_OK); }
//===========================================================================
//
// GetCCD
// -- get CCD, returns IXMLDocument object
// -- bForchFetch : if to fetch from Nexus server or to use local
//
BOOL WINAPI GetCCD( LPCTSTR pszCCDName, IXMLDocument** ppiXMLDocument, BOOL bForceFetch ) { return (g_NotificationThread.GetCCD(tstring(pszCCDName), ppiXMLDocument, bForceFetch) == S_OK); }
|