|
|
/*++
Copyright (c) 1992 Microsoft Corporation
Module Name:
errorlog.h
Abstract:
This module contains the manifests and macros used for error logging in the Afp server.
!!! This module must be nonpageable.
Author:
Jameel Hyder (microsoft!jameelh)
Revision History: 10 Jun 1992 Initial Version
--*/
#ifndef _ERRORLOG_
#define _ERRORLOG_
//
// Debug levels used with DBGPRINT and DBGBRK
//
#define DBG_LEVEL_INFO 0x0000
#define DBG_LEVEL_WARN 0x1000
#define DBG_LEVEL_ERR 0x2000
#define DBG_LEVEL_FATAL 0x3000
//
// Component types used with DBGPRINT
//
#define DBG_COMP_INIT 0x00000001
#define DBG_COMP_MEMORY 0x00000002
#define DBG_COMP_FILEIO 0x00000004
#define DBG_COMP_SCVGR 0x00000008
#define DBG_COMP_LOCKS 0x00000010
#define DBG_COMP_CHGNOTIFY 0x00000020
#define DBG_COMP_SDA 0x00000040
#define DBG_COMP_FORKS 0x00000080
#define DBG_COMP_DESKTOP 0x00000100
#define DBG_COMP_VOLUME 0x00000200
#define DBG_COMP_AFPINFO 0x00000400
#define DBG_COMP_IDINDEX 0x00000800
#define DBG_COMP_STACKIF 0x00001000
#define DBG_COMP_SECURITY 0x00002000
#define DBG_COMP_ADMINAPI 0x00004000
#define DBG_COMP_ADMINAPI_SC 0x00008000
#define DBG_COMP_ADMINAPI_STAT 0x00010000
#define DBG_COMP_ADMINAPI_SRV 0x00020000
#define DBG_COMP_ADMINAPI_VOL 0x00040000
#define DBG_COMP_ADMINAPI_SESS 0x00080000
#define DBG_COMP_ADMINAPI_CONN 0x00100000
#define DBG_COMP_ADMINAPI_FORK 0x00200000
#define DBG_COMP_ADMINAPI_DIR 0x00400000
#define DBG_COMP_ADMINAPI_ALL 0x007FC000
#define DBG_COMP_AFPAPI 0x00800000
#define DBG_COMP_AFPAPI_DTP 0x01000000
#define DBG_COMP_AFPAPI_FORK 0x02000000
#define DBG_COMP_AFPAPI_FILE 0x04000000
#define DBG_COMP_AFPAPI_DIR 0x08000000
#define DBG_COMP_AFPAPI_FD 0x10000000
#define DBG_COMP_AFPAPI_VOL 0x20000000
#define DBG_COMP_AFPAPI_SRV 0x40000000
#define DBG_COMP_AFPAPI_ALL 0x7F800000
#define DBG_COMP_NOHEADER 0x80000000
#define DBG_COMP_ALL 0x7FFFFFFF
// Change this to level of debugging desired. This can also be changed on the
// fly via the kernel debugger
#if DBG
GLOBAL LONG AfpDebugLevel EQU DBG_LEVEL_ERR; GLOBAL LONG AfpDebugComponent EQU DBG_COMP_ALL; GLOBAL LONG AfpDebugRefcount EQU 0;
#define DBGPRINT(Component, Level, Fmt) \
if ((Level >= AfpDebugLevel) && (AfpDebugComponent & Component)) \ { \ if (!(Component & DBG_COMP_NOHEADER)) \ DbgPrint("***AFPSRV*** "); \ DbgPrint Fmt; \ }
#define DBGBRK(Level) \
if (Level >= AfpDebugLevel) \ DbgBreakPoint()
#define DBGREFCOUNT(Fmt) \
if (AfpDebugRefcount) \ { \ DbgPrint("***AFPSRV*** "); \ DbgPrint Fmt; \ }
#else
#define DBGPRINT(Component, Level, Fmt)
#define DBGBRK(Level)
#define DBGREFCOUNT(Fmt)
#endif
//
// The types of events that can be logged.
// (cut-n-pasted from ntelfapi.h, after the "use ntsrv.h, not ntos.h" changes)
//
#define EVENTLOG_ERROR_TYPE 0x0001
#define EVENTLOG_INFORMATION_TYPE 0x0004
// This method of logging will end up calling the IoWriteErrorlogEntry. It
// should be used in places where for some reason do not want to queue up
// the errorlog to be logged from the usermode service. It takes ONE insertion
// string max. pInsertionString is a PUNICODE_STRING. An example of where this
// should be used is in the AllocNonPagedMem routines, because if we were
// to call the AfpLogEvent routine from there, it would again turn around and
// call the alloc mem routine. Also any routines that are called during
// server initialization/deinitialization should use this logging method since
// the usermode utility worker component is not guaranteed to be up accepting
// error log requests!
#define AFPLOG_DDERROR(ErrMsgNum, NtStatus, RawData, RawDataLen, pInsertionString) \
DBGPRINT(DBG_COMP_ALL, DBG_LEVEL_WARN, ("AFP_ERRORLOG: %s (%d) Status %lx\n", \ __FILE__, __LINE__, NtStatus)); \ AfpWriteErrorLogEntry(ErrMsgNum, FILENUM + __LINE__, NtStatus, \ RawData, RawDataLen, \ pInsertionString)
// This is the most basic method of logging; takes ONE insertion string max.
// pInsertionString is a PUNICODE_STRING. This will cause the errorlog to
// be sent up to the usermode service to be logged.
#define AFPLOG_ERROR(ErrMsgNum, NtStatus, RawData, RawDataLen, pInsertionString) \
DBGPRINT(DBG_COMP_ALL, DBG_LEVEL_WARN, ("AFP_ERRORLOG: %s (%d) Status %lx\n", \ __FILE__, __LINE__, NtStatus)); \ AfpLogEvent(EVENTLOG_ERROR_TYPE, ErrMsgNum, FILENUM + __LINE__, NtStatus, \ (PBYTE)RawData, RawDataLen, 0, \ (pInsertionString == NULL) ? 0 : ((PUNICODE_STRING)(pInsertionString))->Length, \ (pInsertionString == NULL) ? NULL : ((PUNICODE_STRING)(pInsertionString))->Buffer);
// This method of errorlogging takes a file handle and extracts the
// corresponding filename to use as the *first* insertion string.
#define AFPLOG_HERROR(ErrMsgNum, NtStatus, RawData, RawDataLen, Handle) \
DBGPRINT(DBG_COMP_ALL, DBG_LEVEL_ERR, ("AFP_ERRORLOG: %s (%d) Status %lx\n", \ __FILE__, __LINE__, NtStatus)); \ AfpLogEvent(EVENTLOG_ERROR_TYPE, ErrMsgNum, FILENUM + __LINE__, NtStatus, \ (PBYTE)RawData, RawDataLen, Handle, 0, NULL)
// This is the most basic method of logging; takes ONE insertion string max.
// pInsertionString is a PUNICODE_STRING. This will cause the eventlog to
// be sent up to the usermode service to be logged.
#define AFPLOG_INFO(ErrMsgNum, NtStatus, RawData, RawDataLen, pInsertionString) \
DBGPRINT(DBG_COMP_ALL, DBG_LEVEL_INFO, ("AFP_EVENTLOG: %s (%d) Status %lx\n", \ __FILE__, __LINE__, NtStatus)); \ AfpLogEvent(EVENTLOG_INFORMATION_TYPE, ErrMsgNum, FILENUM + __LINE__, NtStatus, \ (PBYTE)RawData, RawDataLen, 0, \ (pInsertionString == NULL) ? 0 : ((PUNICODE_STRING)(pInsertionString))->Length, \ (pInsertionString == NULL) ? NULL : ((PUNICODE_STRING)(pInsertionString))->Buffer);
//
// Error levels used with AfpWriteErrorLogEntry
//
#define ERROR_LEVEL_EXPECTED 0
#define ERROR_LEVEL_UNEXPECTED 1
#define ERROR_LEVEL_IMPOSSIBLE 2
#define ERROR_LEVEL_FATAL 3
extern VOID AfpWriteErrorLogEntry( IN ULONG EventCode, IN LONG UniqueErrorCode OPTIONAL, IN NTSTATUS NtStatusCode, IN PVOID RawDataBuf OPTIONAL, IN LONG RawDataLen, IN PUNICODE_STRING pInsertionString OPTIONAL );
// This routine is implemented in secutil.c
extern VOID AfpLogEvent( IN USHORT EventType, IN ULONG MsgId, IN DWORD File_Line OPTIONAL, IN NTSTATUS Status OPTIONAL, IN PBYTE RawDataBuf OPTIONAL, IN LONG RawDataLen, IN HANDLE FileHandle OPTIONAL, IN LONG String1Len, IN PWSTR String1 OPTIONAL );
#endif // _ERRORLOG_
|