mirror of https://github.com/tongzx/nt5src
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
184 lines
5.9 KiB
184 lines
5.9 KiB
/*++
|
|
|
|
Copyright (C) Microsoft Corporation, 1999 - 1999
|
|
|
|
Module Name:
|
|
|
|
debug.h
|
|
|
|
Abstract:
|
|
|
|
Prototypes and definitions for debugging.
|
|
|
|
Author:
|
|
|
|
Keisuke Tsuchida (KeisukeT)
|
|
|
|
Environment:
|
|
|
|
user mode only
|
|
|
|
Notes:
|
|
|
|
Revision History:
|
|
|
|
--*/
|
|
|
|
#ifndef __MYDEBUG__
|
|
#define __MYDEBUG__
|
|
|
|
//
|
|
// Include custom debug header.
|
|
//
|
|
#include <windows.h>
|
|
#include <coredbg.h>
|
|
//
|
|
// Driver specific definition
|
|
//
|
|
|
|
|
|
#define NAME_DRIVER TEXT("STI_CI.DLL: ") // Prefix of output message. (Should be driver name)
|
|
#define REGVAL_DEBUGLEVEL TEXT("STICIDebugLevel") // Debug trace level for this binary.
|
|
|
|
//
|
|
// Defines
|
|
//
|
|
|
|
#define MAX_TEMPBUF 256
|
|
|
|
|
|
// Bit mask for trace level and flags
|
|
#define BITMASK_TRACE_LEVEL 0x0000000f
|
|
#define BITMASK_TRACE_FLAG 0x00000ff0
|
|
#define BITMASK_DEBUG_FLAG 0x0000f000
|
|
|
|
// Basic trace level
|
|
#define NO_TRACE 0 // Shows nothing.
|
|
#define MIN_TRACE 1 // Shows only error or warning.
|
|
#define MAX_TRACE 2 // Shows progress and status.
|
|
#define ULTRA_TRACE 3 // Shows progress and status in retail.
|
|
#define NEVER_TRACE 4 // Never show this unless specific bit is set.
|
|
|
|
// Trace flag to enable specific message spew. (1=on)
|
|
#define TRACE_FLAG_PROC 0x010 // Show message when entering process.(1=on)
|
|
#define TRACE_FLAG_RET 0x020 // Show message when leaving process.(1=on)
|
|
#define TRACE_FLAG_DUMP 0x040 // Show transaction data dump.
|
|
#define TRACE_IGNORE_TAG 0x080 // Disable tag check (1=disabled).
|
|
#define TRACE_MESSAGEBOX 0x100 // Show MessageBox instead of debug spew.
|
|
|
|
// Conbination of trace level and flag.
|
|
#define TRACE_PROC_ENTER ULTRA_TRACE | TRACE_FLAG_PROC // Entering procedure.
|
|
#define TRACE_PROC_LEAVE ULTRA_TRACE | TRACE_FLAG_RET // Leaving procedure.
|
|
#define TRACE_CRITICAL MIN_TRACE // Critical error. Spew always.
|
|
#define TRACE_ERROR MIN_TRACE // Error.
|
|
#define TRACE_WARNING MIN_TRACE // Possible wrong behavior.
|
|
#define TRACE_DUMP_DATA NEVER_TRACE | TRACE_FLAG_DUMP // Dump transaction data.
|
|
#define TRACE_DEVICE_DATA MAX_TRACE // Show device data.
|
|
#define TRACE_STATUS MAX_TRACE // Show status.
|
|
|
|
// Debug flag to enable/disable DEBUG_BREAKPOINT()
|
|
#define DEBUG_FLAG_DISABLE 0x1000 // Disable DEBUG_BREAK. (1=disable)
|
|
#define DEBUG_PROC_BREAK 0x2000 // Stop at the beginning of each procedure.
|
|
|
|
|
|
|
|
//
|
|
// Prototypes
|
|
//
|
|
|
|
|
|
VOID
|
|
MyDebugInit(
|
|
VOID
|
|
);
|
|
|
|
void __cdecl
|
|
DbgPrint(
|
|
LPSTR lpstrMessage,
|
|
...
|
|
);
|
|
|
|
void __cdecl
|
|
DbgPrint(
|
|
LPWSTR lpstrMessage,
|
|
...
|
|
);
|
|
|
|
//
|
|
// Macro
|
|
//
|
|
|
|
#define DebugTrace(_t_, _x_) { \
|
|
if((TRACE_ERROR & BITMASK_TRACE_LEVEL) == (_t_ & BITMASK_TRACE_LEVEL )){ \
|
|
DBG_ERR(_x_); \
|
|
} else if((TRACE_WARNING & BITMASK_TRACE_LEVEL) == (_t_ & BITMASK_TRACE_LEVEL )){ \
|
|
DBG_WRN(_x_); \
|
|
} else if((TRACE_STATUS & BITMASK_TRACE_LEVEL) == (_t_ & BITMASK_TRACE_LEVEL )){ \
|
|
DBG_TRC(_x_); \
|
|
} else if( (_t_ & TRACE_FLAG_PROC) || (_t_ & TRACE_FLAG_RET )){ \
|
|
DBG_TRC(_x_); \
|
|
} \
|
|
}
|
|
|
|
#if DBG
|
|
|
|
//
|
|
// Macro for BreakPoint
|
|
//
|
|
|
|
#define DEBUG_BREAKPOINT() { \
|
|
if (DebugTraceLevel & DEBUG_FLAG_DISABLE) { \
|
|
DbgPrint(NAME_DRIVER); \
|
|
DbgPrint("*** Hit DEBUG_BREAKPOINT ***\r\n"); \
|
|
} else { \
|
|
DebugBreak(); \
|
|
} \
|
|
}
|
|
|
|
#else // DBG
|
|
|
|
#define DEBUG_BREAKPOINT()
|
|
|
|
#endif // DBG
|
|
|
|
|
|
|
|
//
|
|
// Original debug macro.
|
|
//
|
|
|
|
#if ORIGINAL_DEBUG
|
|
#if DBG
|
|
|
|
//
|
|
// Macro for debug output
|
|
//
|
|
// Note: If trace level is higher than DebugTraceLevel or specific bit is set,
|
|
// debug message will be shown.
|
|
//
|
|
|
|
#define DebugTrace(_t_, _x_) { \
|
|
if ( ((DebugTraceLevel & BITMASK_TRACE_LEVEL) >= (_t_ & BITMASK_TRACE_LEVEL )) || \
|
|
(DebugTraceLevel & BITMASK_TRACE_FLAG & (_t_)) ) { \
|
|
DbgPrint(NAME_DRIVER); \
|
|
DbgPrint _x_ ; \
|
|
} \
|
|
if( (DebugTraceLevel & DEBUG_PROC_BREAK & (_t_)) && \
|
|
(DebugTraceLevel & TRACE_FLAG_PROC) ) { \
|
|
DEBUG_BREAKPOINT(); \
|
|
} \
|
|
}
|
|
|
|
|
|
#else // DBG
|
|
#define DebugTrace(_t_, _x_)
|
|
#endif // DBG
|
|
#endif // ORIGINAL_DEBUG
|
|
|
|
//
|
|
// Obsolete
|
|
//
|
|
|
|
#define Report(_x_)
|
|
|
|
#endif // __MYDEBUG__
|