windows-nt/Source/XPSP1/NT/shell/osshell/control/t1instal/errors.c
2020-09-26 16:20:57 +08:00

111 lines
2.5 KiB
C

/***
**
** Module: T1Instal
**
** Description:
** This is a Win32 DLL specific module, that implements
** the error logging mechanism under Win32.
**
** Author: Michael Jansson
** Created: 12/18/93
**
***/
/***** INCLUDES */
#include <windows.h>
#include "types.h"
#include "t1local.h"
#ifdef NOMSGBOX
#include <stdio.h>
#endif
/***** CONSTANTS */
/*-none-*/
/***** GLOBALS */
extern HANDLE hInst; /* Cached in the T1Instal module. */
/***** PROTOTYPES */
extern int __cdecl sprintf(char *, const char *, ...);
/***
** Function: LogError
**
** Description:
** Add another message to the error log.
***/
void LogError(const long type, const long id, const char *arg)
{
char caption[256];
char msg[256];
WORD etype;
HANDLE h;
DWORD logit;
DWORD size;
HKEY key;
/* Map the internal envent type to EventLog type. */
if (type==MSG_INFO)
etype = EVENTLOG_INFORMATION_TYPE;
else if (type==MSG_WARNING)
etype = EVENTLOG_WARNING_TYPE;
else
etype = EVENTLOG_ERROR_TYPE;
/* Access the REG data base. */
if (RegOpenKeyEx(HKEY_LOCAL_MACHINE, SUBKEY_TYPE1INSTAL, 0,
KEY_QUERY_VALUE, &key)==ERROR_SUCCESS) {
size = sizeof(logit);
if (RegQueryValueEx(key, (LPTSTR)SUBKEY_LOGFILE, NULL,
NULL, (LPVOID)&logit, &size)==ERROR_SUCCESS &&
logit!=0) {
h = RegisterEventSource(NULL, STR_APPNAME);
if (h!=NULL) {
ReportEvent(h, etype, 0, id, NULL, 1, 0, (LPSTR *)&arg, NULL);
DeregisterEventSource(h);
}
if (etype==EVENTLOG_WARNING_TYPE) {
LoadString(hInst, (UINT)id, caption, sizeof(caption));
sprintf(msg, caption, arg);
LoadString(hInst, IDS_CAPTION, caption, sizeof(caption));
#if NOMSGBOX
fputs("WARNING- ", stderr);
fputs(msg, stderr);
fputs("\n", stderr);
#else
MessageBox(NULL, msg, caption, INFO);
#endif
SetLastError(0); /* MessageBox(NULL,...) is broken */
}
}
if (etype==EVENTLOG_ERROR_TYPE) {
LoadString(hInst, (UINT)id, caption, sizeof(caption));
sprintf(msg, caption, arg);
LoadString(hInst, IDS_CAPTION, caption, sizeof(caption));
#if NOMSGBOX
fputs("ERROR - ", stderr);
fputs(msg, stderr);
fputs("\n", stderr);
#else
MessageBox(NULL, msg, caption, INFO);
#endif
SetLastError(0); /* MessageBox(NULL,...) is broken */
}
RegCloseKey(key);
}
}