81 lines
2 KiB
C++
81 lines
2 KiB
C++
//+-------------------------------------------------------------------------
|
|
//
|
|
// Microsoft Windows
|
|
//
|
|
// Copyright (C) Microsoft Corporation, 1997 - 1999
|
|
//
|
|
// File: uihooks.cpp
|
|
//
|
|
//--------------------------------------------------------------------------
|
|
|
|
// uihooks.cpp
|
|
// Hook Function extensions for CSC UI
|
|
|
|
#include "pch.h"
|
|
#include "uihooks.h"
|
|
|
|
#ifdef CSCUI_HOOKS
|
|
|
|
// This is the registry key where we put the DLL name
|
|
TCHAR const c_szUIHookKey[] = TEXT("Software\\Microsoft\\Windows\\CurrentVersion\\NetCache");
|
|
TCHAR const c_szUIHookValue[] = TEXT("CSCUI Hook DLL");
|
|
char const c_szUIHookProc[] = "CSCUIHook";
|
|
|
|
typedef void (WINAPI *PFNCSCHOOK)(DWORD, LPCWSTR);
|
|
|
|
static HINSTANCE g_hHookDll = NULL;
|
|
static PFNCSCHOOK g_pfnCscHook = NULL;
|
|
static BOOL g_bHooksInitialized = FALSE;
|
|
|
|
// Checks the reg key, and sets up function pointers if necessary
|
|
void CSCUIExt_InitializeHooks()
|
|
{
|
|
HKEY hRegKey;
|
|
|
|
g_bHooksInitialized = TRUE;
|
|
|
|
// Lets check if the reg key is there
|
|
if(RegOpenKeyEx(HKEY_LOCAL_MACHINE, c_szUIHookKey, 0, KEY_READ, &hRegKey) == ERROR_SUCCESS)
|
|
{
|
|
TCHAR szHookDll[MAX_PATH];
|
|
DWORD dwSize = sizeof(szHookDll);
|
|
if(RegQueryValueEx(hRegKey, c_szUIHookValue, 0, NULL, (LPBYTE)szHookDll, &dwSize) == ERROR_SUCCESS)
|
|
{
|
|
g_hHookDll = LoadLibrary(szHookDll);
|
|
if(g_hHookDll != NULL)
|
|
g_pfnCscHook = (PFNCSCHOOK)GetProcAddress(g_hHookDll, c_szUIHookProc);
|
|
}
|
|
RegCloseKey(hRegKey);
|
|
}
|
|
}
|
|
|
|
void CSCUIExt_CleanupHooks()
|
|
{
|
|
if(g_hHookDll)
|
|
{
|
|
FreeLibrary(g_hHookDll);
|
|
g_hHookDll = NULL;
|
|
g_pfnCscHook = NULL;
|
|
}
|
|
}
|
|
|
|
void CSCUIExt_NotifyHook(DWORD csch, LPCTSTR psz, ...)
|
|
{
|
|
USES_CONVERSION;
|
|
|
|
if(!g_bHooksInitialized)
|
|
CSCUIExt_InitializeHooks();
|
|
if(g_pfnCscHook)
|
|
{
|
|
LPTSTR pszMsg = NULL;
|
|
va_list va;
|
|
va_start(va, psz);
|
|
vFormatString(&pszMsg, psz, &va);
|
|
(*g_pfnCscHook)(csch, T2CW(pszMsg));
|
|
LocalFreeString(&pszMsg);
|
|
va_end(va);
|
|
}
|
|
}
|
|
|
|
#endif // CSCUI_HOOKS
|