/*++ Copyright (c) 1989 Microsoft Corporation Module Name: rxtrace.h Abstract: This module defines the macros which provide debugging support ( tracing ). Author: Revision History: --*/ #ifndef _RDBSSTRACE_INCLUDED_ #define _RDBSSTRACE_INCLUDED_ #if !DBG #undef RDBSSTRACE #endif // !DBG typedef struct _DEBUG_TRACE_CONTROLPOINT{ ULONG ControlPointNumber; PSZ Name; } DEBUG_TRACE_CONTROLPOINT, *PDEBUG_TRACE_CONTROLPOINT; typedef struct { LONG PrintLevel; ULONG BreakMask; PSZ Name; } RX_DEBUG_TRACE_CONTROL, *PRX_DEBUG_TRACE_CONTROL; #ifdef RDBSSTRACE //define so that &RX_DEBUG_TRACE_CONTROL is NULL typedef struct { RX_DEBUG_TRACE_CONTROL Junk; } rxrxrx_AlwaysHelper; #define RX_DEBUG_TRACE_ALWAYS (((rxrxrx_AlwaysHelper*)0)->Junk) // The following macros provide fine grained control for selectively enabling // and disabling tracing. #define RXDT_Extern(__x) extern DEBUG_TRACE_CONTROLPOINT RX_DEBUG_TRACE_##__x #define RXDT_DeclareCategory(__x) extern DEBUG_TRACE_CONTROLPOINT RX_DEBUG_TRACE_##__x #define RXDT_DefineCategory(__x) DEBUG_TRACE_CONTROLPOINT RX_DEBUG_TRACE_##__x = {0,#__x} RXDT_Extern(ERROR); RXDT_Extern(HOOKS); RXDT_Extern(CATCH_EXCEPTIONS); RXDT_Extern(UNWIND); RXDT_Extern(CLEANUP); RXDT_Extern(CLOSE); RXDT_Extern(CREATE); RXDT_Extern(DIRCTRL); RXDT_Extern(EA); RXDT_Extern(FILEINFO); RXDT_Extern(FSCTRL); RXDT_Extern(LOCKCTRL); RXDT_Extern(READ); RXDT_Extern(VOLINFO); RXDT_Extern(WRITE); RXDT_Extern(FLUSH); RXDT_Extern(DEVCTRL); RXDT_Extern(SHUTDOWN); RXDT_Extern(PREFIX); RXDT_Extern(DEVFCB); RXDT_Extern(ACCHKSUP); RXDT_Extern(ALLOCSUP); RXDT_Extern(DIRSUP); RXDT_Extern(FILOBSUP); RXDT_Extern(NAMESUP); RXDT_Extern(VERFYSUP); RXDT_Extern(CACHESUP); RXDT_Extern(SPLAYSUP); RXDT_Extern(DEVIOSUP); RXDT_Extern(FCBSTRUCTS); RXDT_Extern(STRUCSUP); RXDT_Extern(FSP_DISPATCHER); RXDT_Extern(FSP_DUMP); RXDT_Extern(RXCONTX); RXDT_Extern(DISPATCH); RXDT_Extern(NTFASTIO); RXDT_Extern(LOWIO); RXDT_Extern(MINIRDR); RXDT_Extern(DISCCODE); //for the browser interface stuff RXDT_Extern(BROWSER); RXDT_Extern(CONNECT); RXDT_Extern(NTTIMER); RXDT_Extern(SCAVTHRD); RXDT_Extern(SCAVENGER); RXDT_Extern(SHAREACCESS); RXDT_Extern(NAMECACHE); //connection engines categories RXDT_Extern(RXCEBINDING); RXDT_Extern(RXCEDBIMPLEMENTATION); RXDT_Extern(RXCEMANAGEMENT); RXDT_Extern(RXCEXMIT); RXDT_Extern(RXCEPOOL); RXDT_Extern(RXCETDI); #else //RDBSSTRACE #define RXDT_Extern(__x) #define RXDT_DeclareCategory(__x) #define RXDT_DefineCategory(__x) #endif //RDBSSTRACE #ifdef RDBSSTRACE extern BOOLEAN RxGlobalTraceSuppress, RxNextGlobalTraceSuppress; extern ULONG RxGlobalTraceIrpCount; VOID RxInitializeDebugTrace(void); #define RxDbgTraceDoit(___x) ___x #ifndef MINIRDR__NAME extern LONG RxDebugTraceIndent; #else #define RxDebugTraceIndent (*(*___MINIRDR_IMPORTS_NAME).pRxDebugTraceIndent) #endif #else #define RxInitializeDebugTrace() #define RxDbgTraceDoit(___x) #endif //RDBSSTRACE #if DBG #define RxDT_INDENT_EXCESS 16 //this is the offset for excess-n for the indent #define RxDT_INDENT_SHIFT 20 #define RxDT_INDENT_MASK 0x3f #define RxDT_LEVEL_MASK ((1<BreakMask & (1<<((MASKBIT)-1)) )) { \ DbgBreakPoint(); \ } \ } #define DebugUnwind(X) { \ if (AbnormalTermination()) { \ RxDbgTrace(0, (DEBUG_TRACE_UNWIND), ( #X ", Abnormal termination.\n", 0)); \ } \ } #ifdef RX_PERFPORMANCE_TIMER extern LONG RxPerformanceTimerLevel; #define TimerStart(LEVEL) { \ LARGE_INTEGER TStart, TEnd; \ LARGE_INTEGER TElapsed; \ TStart = KeQueryPerformanceCounter( NULL ); \ #define TimerStop(LEVEL,s) \ TEnd = KeQueryPerformanceCounter( NULL ); \ TElapsed.QuadPart = TEnd.QuadPart - TStart.QuadPart; \ RxTotalTicks[RxLogOf(LEVEL)] += TElapsed.LowPart; \ if (FlagOn( RxPerformanceTimerLevel, (LEVEL))) { \ DbgPrint("Time of %s %ld\n", (s), TElapsed.LowPart ); \ } \ } #endif //RX_PERFPORMANCE_TIMER #else // RDBSSTRACE #define RxDbgTraceLV__norx_reverseaction(INDENT,CONTROLPOINT,LEVEL,Z) {NOTHING;} #define RxDbgTraceLV(INDENT,CONTROLPOINTNUM,LEVEL,Z) {NOTHING;} #define RxDbgTraceLVUnIndent(INDENT,CONTROLPOINTNUM,LEVEL) {NOTHING;} #define RxDbgTrace(INDENT,CONTROLPOINTNUM,Z) {NOTHING;} #define RxDbgTraceUnIndent(INDENT,CONTROLPOINTNUM) {NOTHING;} #define DebugBreakPoint(CONTROLPOINTNUM,MASKBIT) {NOTHING;} #define DebugUnwind(X) {NOTHING;} #define RxDbgTraceDisableGlobally() FALSE #define RxDbgTraceEnableGlobally(f) {NOTHING;} #ifdef RX_PERFPORMANCE_TIMER #define TimerStart(LEVEL) #define TimerStop(LEVEL,s) #endif #endif // RDBSSTRACE #endif // _RDBSSTRACE_INCLUDED_