Logo Search packages:      
Sourcecode: postgresql-8.4 version File versions

pgevent.c

/*-------------------------------------------------------------------------
 *
 * pgevent.c
 *          Defines the entry point for pgevent dll.
 *          The DLL defines event source for backend
 *
 *
 * IDENTIFICATION
 *      $PostgreSQL$
 *
 *-------------------------------------------------------------------------
 */


#include <windows.h>
#include <olectl.h>
#include <string.h>

/* Global variables */
HANDLE            g_module = NULL;  /* hModule of DLL */

/* Prototypes */
STDAPI
DllRegisterServer(void);
STDAPI            DllUnregisterServer(void);
BOOL WINAPI DllMain(HANDLE hModule, DWORD ul_reason_for_call, LPVOID lpReserved);

/*
 * DllRegisterServer --- Instructs DLL to create its registry entries
 */

STDAPI
DllRegisterServer(void)
{
      HKEY        key;
      DWORD       data;
      char        buffer[_MAX_PATH];

      /* 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.
       */
      if (RegCreateKey(HKEY_LOCAL_MACHINE, "SYSTEM\\CurrentControlSet\\Services\\EventLog\\Application\\PostgreSQL", &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;
}

/*
 * DllUnregisterServer --- Instructs DLL to remove only those entries created through DllRegisterServer
 */

STDAPI
DllUnregisterServer(void)
{
      /*
       * Remove PostgreSQL source name as a subkey under the Application key in
       * the EventLog registry key.
       */

      if (RegDeleteKey(HKEY_LOCAL_MACHINE, "SYSTEM\\CurrentControlSet\\Services\\EventLog\\Application\\PostgreSQL"))
      {
            MessageBox(NULL, "Could not delete the registry key.", "PostgreSQL error", MB_OK | MB_ICONSTOP);
            return SELFREG_E_TYPELIB;
      }
      return S_OK;
}

/*
 * DllMain --- is an optional entry point into a DLL.
 */

BOOL        WINAPI
DllMain(HANDLE hModule,
            DWORD ul_reason_for_call,
            LPVOID lpReserved
)
{
      if (ul_reason_for_call == DLL_PROCESS_ATTACH)
            g_module = hModule;
      return TRUE;
}

Generated by  Doxygen 1.6.0   Back to index