#include <windows.h>
#include <olectl.h>
#include <string.h>
#include <stdio.h>
#include <stdlib.h>
Go to the source code of this file.
Functions | |
HRESULT | DllInstall (BOOL bInstall, LPCWSTR pszCmdLine) |
STDAPI | DllRegisterServer (void) |
STDAPI | DllUnregisterServer (void) |
BOOL WINAPI | DllMain (HANDLE hModule, DWORD ul_reason_for_call, LPVOID lpReserved) |
Variables | |
HANDLE | g_module = NULL |
char | event_source [256] = "PostgreSQL" |
HRESULT DllInstall | ( | BOOL | bInstall, | |
LPCWSTR | pszCmdLine | |||
) |
Definition at line 42 of file pgevent.c.
References DllRegisterServer(), and event_source.
{ if (pszCmdLine && *pszCmdLine != '\0') wcstombs(event_source, pszCmdLine, sizeof(event_source)); /* * This is an ugly hack due to the strange behavior of "regsvr32 /i". * * When installing, regsvr32 calls DllRegisterServer before DllInstall. * When uninstalling (i.e. "regsvr32 /u /i"), on the other hand, regsvr32 * calls DllInstall and then DllUnregisterServer as expected. * * This strange behavior forces us to specify -n (i.e. "regsvr32 /n /i"). * Without -n, DllRegisterServer called before DllInstall would mistakenly * overwrite the default "PostgreSQL" event source registration. */ if (bInstall) DllRegisterServer(); return S_OK; }
BOOL WINAPI DllMain | ( | HANDLE | hModule, | |
DWORD | ul_reason_for_call, | |||
LPVOID | lpReserved | |||
) |
STDAPI DllRegisterServer | ( | void | ) |
Definition at line 70 of file pgevent.c.
References event_source, g_module, and NULL.
Referenced by DllInstall().
{ HKEY key; DWORD data; char buffer[_MAX_PATH]; char key_name[400]; /* Set the name of DLL full path name. */ if (!GetModuleFileName((HMODULE) g_module, buffer, sizeof(buffer))) { MessageBox(NULL, "Could not retrieve DLL filename", "PostgreSQL error", MB_OK | MB_ICONSTOP); return SELFREG_E_TYPELIB; } /* * Add PostgreSQL source name as a subkey under the Application key in the * EventLog registry key. */ _snprintf(key_name, sizeof(key_name), "SYSTEM\\CurrentControlSet\\Services\\EventLog\\Application\\%s", event_source); if (RegCreateKey(HKEY_LOCAL_MACHINE, key_name, &key)) { MessageBox(NULL, "Could not create the registry key.", "PostgreSQL error", MB_OK | MB_ICONSTOP); return SELFREG_E_TYPELIB; } /* Add the name to the EventMessageFile subkey. */ if (RegSetValueEx(key, "EventMessageFile", 0, REG_EXPAND_SZ, (LPBYTE) buffer, strlen(buffer) + 1)) { MessageBox(NULL, "Could not set the event message file.", "PostgreSQL error", MB_OK | MB_ICONSTOP); return SELFREG_E_TYPELIB; } /* Set the supported event types in the TypesSupported subkey. */ data = EVENTLOG_ERROR_TYPE | EVENTLOG_WARNING_TYPE | EVENTLOG_INFORMATION_TYPE; if (RegSetValueEx(key, "TypesSupported", 0, REG_DWORD, (LPBYTE) &data, sizeof(DWORD))) { MessageBox(NULL, "Could not set the supported types.", "PostgreSQL error", MB_OK | MB_ICONSTOP); return SELFREG_E_TYPELIB; } RegCloseKey(key); return S_OK; }
STDAPI DllUnregisterServer | ( | void | ) |
Definition at line 132 of file pgevent.c.
References event_source, and NULL.
{ char key_name[400]; /* * Remove PostgreSQL source name as a subkey under the Application key in * the EventLog registry key. */ _snprintf(key_name, sizeof(key_name), "SYSTEM\\CurrentControlSet\\Services\\EventLog\\Application\\%s", event_source); if (RegDeleteKey(HKEY_LOCAL_MACHINE, key_name)) { MessageBox(NULL, "Could not delete the registry key.", "PostgreSQL error", MB_OK | MB_ICONSTOP); return SELFREG_E_TYPELIB; } return S_OK; }
char event_source[256] = "PostgreSQL" |
HANDLE g_module = NULL |
Definition at line 22 of file pgevent.c.
Referenced by DllMain(), and DllRegisterServer().