aboutsummaryrefslogtreecommitdiff
path: root/src/bin/pgevent/pgevent.c
blob: 71d08b603f9eff33fc802bf5f8aab371ee10fdbc (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
/*-------------------------------------------------------------------------
 *
 * pgevent.c
 *		Defines the entry point for pgevent dll.
 *      The DLL defines event source for backend
 *
 *
 * IDENTIFICATION
 *	  $PostgreSQL: pgsql/src/bin/pgevent/pgevent.c,v 1.1 2004/06/20 01:32:49 momjian Exp $
 *
 *-------------------------------------------------------------------------
 */


#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;
}