246 lines
6.7 KiB
C
246 lines
6.7 KiB
C
|
/*++
|
|||
|
|
|||
|
Copyright (c) 1992 Microsoft Corporation
|
|||
|
|
|||
|
Module Name:
|
|||
|
|
|||
|
spxerror.h
|
|||
|
|
|||
|
Abstract:
|
|||
|
|
|||
|
This module contains some error definitions for spx.
|
|||
|
|
|||
|
Author:
|
|||
|
|
|||
|
Nikhil Kamkolkar (nikhilk@microsoft.com)
|
|||
|
|
|||
|
Revision History:
|
|||
|
|
|||
|
Notes: Tab stop: 4
|
|||
|
--*/
|
|||
|
|
|||
|
// Define the modules names for SPX - use the high bits.
|
|||
|
#define SPXDRVR 0x00010000
|
|||
|
#define SPXREG 0x00020000
|
|||
|
#define SPXDEV 0x00030000
|
|||
|
#define SPXBIND 0x00040000
|
|||
|
#define SPXRECV 0x00050000
|
|||
|
#define SPXSEND 0x00060000
|
|||
|
#define SPXTIMER 0x00070000
|
|||
|
#define SPXERROR 0x00080000
|
|||
|
#define SPXPKT 0x00090000
|
|||
|
#define SPXUTILS 0x000a0000
|
|||
|
#define SPXCPKT 0x000b0000
|
|||
|
#define SPXCONN 0x000c0000
|
|||
|
#define SPXADDR 0x000d0000
|
|||
|
#define SPXCUTIL 0x000e0000
|
|||
|
#define SPXINIT 0x000f0000
|
|||
|
#define SPXMEM 0x00100000
|
|||
|
#define SPXQUERY 0x00200000
|
|||
|
|
|||
|
// DEBUGGING SUPPORT:
|
|||
|
// Debugging messages are provided per-subsystem defined here, and within
|
|||
|
// the subsystems, there are 4 levels of messages.
|
|||
|
//
|
|||
|
// The four levels of debug messages are:
|
|||
|
//
|
|||
|
// INFO: Informational messages, eg., entry exit in routines
|
|||
|
// DBG: Used when debugging some msgs are turned from info to dbg
|
|||
|
// WARN: Something went wrong, but its not an error, eg., packet was not ours
|
|||
|
// ERR: Error situations, but we can still run if a retry happens
|
|||
|
// FATAL: In this situation, the driver is not operational
|
|||
|
|
|||
|
#define DBG_LEVEL_INFO 0x4000
|
|||
|
#define DBG_LEVEL_DBG 0x5000
|
|||
|
#define DBG_LEVEL_DBG1 0x5001
|
|||
|
#define DBG_LEVEL_DBG2 0x5002
|
|||
|
#define DBG_LEVEL_DBG3 0x5003
|
|||
|
#define DBG_LEVEL_WARN 0x6000
|
|||
|
#define DBG_LEVEL_ERR 0x7000
|
|||
|
#define DBG_LEVEL_FATAL 0x8000
|
|||
|
|
|||
|
// SUBSYSTEMS
|
|||
|
#define DBG_COMP_DEVICE 0x00000001
|
|||
|
#define DBG_COMP_CREATE 0x00000002
|
|||
|
#define DBG_COMP_ADDRESS 0x00000004
|
|||
|
#define DBG_COMP_SEND 0x00000008
|
|||
|
#define DBG_COMP_NDIS 0x00000010
|
|||
|
#define DBG_COMP_RECEIVE 0x00000020
|
|||
|
#define DBG_COMP_CONFIG 0x00000040
|
|||
|
#define DBG_COMP_PACKET 0x00000080
|
|||
|
#define DBG_COMP_RESOURCES 0x00000100
|
|||
|
#define DBG_COMP_BIND 0x00000200
|
|||
|
#define DBG_COMP_UNLOAD 0x00000400
|
|||
|
#define DBG_COMP_DUMP 0x00000800
|
|||
|
#define DBG_COMP_REFCOUNTS 0x00001000
|
|||
|
#define DBG_COMP_SYSTEM 0x00002000
|
|||
|
#define DBG_COMP_CRITSEC 0x00004000
|
|||
|
#define DBG_COMP_UTILS 0x00008000
|
|||
|
#define DBG_COMP_TDI 0x00010000
|
|||
|
#define DBG_COMP_CONNECT 0x00020000
|
|||
|
#define DBG_COMP_DISC 0x00040000
|
|||
|
#define DBG_COMP_ACTION 0x00080000
|
|||
|
#define DBG_COMP_STATE 0x00100000
|
|||
|
|
|||
|
#define DBG_COMP_MOST (DBG_COMP_DEVICE | \
|
|||
|
DBG_COMP_CREATE | \
|
|||
|
DBG_COMP_ADDRESS | \
|
|||
|
DBG_COMP_SEND | \
|
|||
|
DBG_COMP_NDIS | \
|
|||
|
DBG_COMP_RECEIVE | \
|
|||
|
DBG_COMP_CONFIG | \
|
|||
|
DBG_COMP_PACKET | \
|
|||
|
DBG_COMP_RESOURCES | \
|
|||
|
DBG_COMP_BIND | \
|
|||
|
DBG_COMP_UNLOAD | \
|
|||
|
DBG_COMP_DUMP | \
|
|||
|
DBG_COMP_REFCOUNTS | \
|
|||
|
DBG_COMP_SYSTEM | \
|
|||
|
DBG_COMP_CRITSEC | \
|
|||
|
DBG_COMP_UTILS | \
|
|||
|
DBG_COMP_TDI | \
|
|||
|
DBG_COMP_CONNECT | \
|
|||
|
DBG_COMP_DISC | \
|
|||
|
DBG_COMP_ACTION | \
|
|||
|
DBG_COMP_STATE)
|
|||
|
|
|||
|
|
|||
|
// More debugging support. These values define the dumping components.
|
|||
|
// There are a max of 32 such components that can be defined. Each of
|
|||
|
// these are associated with a dump routine. It one is specified and
|
|||
|
// enabled, periodically it is called. It is upto that component to
|
|||
|
// decide what it wants to do
|
|||
|
|
|||
|
#define DBG_DUMP_DEF_INTERVAL 30 // In Seconds
|
|||
|
|
|||
|
// This defines the number of times an error has to happen consecutively before
|
|||
|
// it gets logged again.
|
|||
|
#define ERROR_CONSEQ_FREQ 200
|
|||
|
#define ERROR_CONSEQ_TIME (60*30) // 30 minutes
|
|||
|
|
|||
|
#ifdef DBG
|
|||
|
typedef VOID (*DUMP_ROUTINE)(VOID);
|
|||
|
|
|||
|
extern
|
|||
|
BOOLEAN
|
|||
|
SpxDumpComponents(
|
|||
|
IN PVOID Context);
|
|||
|
|
|||
|
#endif
|
|||
|
|
|||
|
//
|
|||
|
// PROTOTYPES
|
|||
|
//
|
|||
|
|
|||
|
BOOLEAN
|
|||
|
SpxFilterErrorLogEntry(
|
|||
|
IN NTSTATUS UniqueErrorCode,
|
|||
|
IN NTSTATUS NtStatusCode,
|
|||
|
IN PVOID RawDataBuf OPTIONAL,
|
|||
|
IN LONG RawDataLen);
|
|||
|
VOID
|
|||
|
SpxWriteResourceErrorLog(
|
|||
|
IN PDEVICE Device,
|
|||
|
IN ULONG BytesNeeded,
|
|||
|
IN ULONG UniqueErrorValue);
|
|||
|
|
|||
|
VOID
|
|||
|
SpxWriteGeneralErrorLog(
|
|||
|
IN PDEVICE Device,
|
|||
|
IN NTSTATUS ErrorCode,
|
|||
|
IN ULONG UniqueErrorValue,
|
|||
|
IN NTSTATUS FinalStatus,
|
|||
|
IN PWSTR SecondString,
|
|||
|
IN PVOID RawDataBuf OPTIONAL,
|
|||
|
IN LONG RawDataLen);
|
|||
|
|
|||
|
|
|||
|
//
|
|||
|
// MACROS
|
|||
|
//
|
|||
|
|
|||
|
#if DBG
|
|||
|
#define LOG_ERROR(Error, NtStatus, SecondString, RawData, RawDataLen) \
|
|||
|
{ \
|
|||
|
SpxWriteGeneralErrorLog( \
|
|||
|
SpxDevice, \
|
|||
|
Error, \
|
|||
|
FILENUM | __LINE__, \
|
|||
|
NtStatus, \
|
|||
|
SecondString, \
|
|||
|
RawData, \
|
|||
|
RawDataLen); \
|
|||
|
}
|
|||
|
|
|||
|
#define RES_LOG_ERROR(BytesNeeded) \
|
|||
|
{ \
|
|||
|
SpxWriteResourceErrorLog( \
|
|||
|
SpxDevice, \
|
|||
|
BytesNeeded, \
|
|||
|
FILENUM | __LINE__); \
|
|||
|
}
|
|||
|
|
|||
|
#else
|
|||
|
|
|||
|
#define LOG_ERROR(Error, NtStatus, SecondString, RawData, RawDataLen) \
|
|||
|
{ \
|
|||
|
SpxWriteGeneralErrorLog( \
|
|||
|
SpxDevice, \
|
|||
|
Error, \
|
|||
|
FILENUM | __LINE__, \
|
|||
|
NtStatus, \
|
|||
|
SecondString, \
|
|||
|
RawData, \
|
|||
|
RawDataLen); \
|
|||
|
}
|
|||
|
|
|||
|
#define RES_LOG_ERROR(BytesNeeded) \
|
|||
|
{ \
|
|||
|
SpxWriteResourceErrorLog( \
|
|||
|
SpxDevice, \
|
|||
|
BytesNeeded, \
|
|||
|
FILENUM | __LINE__); \
|
|||
|
}
|
|||
|
|
|||
|
#endif
|
|||
|
|
|||
|
|
|||
|
#if DBG
|
|||
|
|
|||
|
#define DBGPRINT(Component, Level, Fmt) \
|
|||
|
{ \
|
|||
|
if (((DBG_LEVEL_ ## Level) >= SpxDebugLevel) && \
|
|||
|
(SpxDebugSystems & (DBG_COMP_ ## Component))) \
|
|||
|
{ \
|
|||
|
DbgPrint("SPX: "); \
|
|||
|
DbgPrint Fmt; \
|
|||
|
} \
|
|||
|
}
|
|||
|
|
|||
|
#define DBGBRK(Level) \
|
|||
|
{ \
|
|||
|
if ((DBG_LEVEL_ ## Level) >= SpxDebugLevel) \
|
|||
|
DbgBreakPoint(); \
|
|||
|
}
|
|||
|
|
|||
|
#define TMPLOGERR() \
|
|||
|
{ \
|
|||
|
DBGPRINT(MOST, ERR, \
|
|||
|
("TempErrLog: %s, Line %ld\n", __FILE__, __LINE__)); \
|
|||
|
}
|
|||
|
|
|||
|
#else
|
|||
|
#define DBGPRINT(Component, Level, Fmt)
|
|||
|
#define DBGBRK(Level)
|
|||
|
#define TMPLOGERR()
|
|||
|
#endif
|
|||
|
|
|||
|
extern
|
|||
|
VOID
|
|||
|
SpxWriteErrorLogEntry(
|
|||
|
IN NTSTATUS UniqueErrorCode,
|
|||
|
IN ULONG UniqueErrorValue,
|
|||
|
IN NTSTATUS NtStatusCode,
|
|||
|
IN PVOID RawDataBuf OPTIONAL,
|
|||
|
IN LONG RawDataLen);
|
|||
|
|