/**************************************************************************** Copyright (c) 1998 Microsoft Corporation Module Name: DEBUGWDM.H Abstract: This header file is for debug and diagnostics for a WDM driver Environment: Kernel mode and user mode Notes: THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A PARTICULAR PURPOSE. Copyright (c) 1998 Microsoft Corporation. All Rights Reserved. Revision History: 12/23/97 : created Author: Tom Green ****************************************************************************/ #ifndef __DEBUGWDM_H__ #define __DEBUGWDM_H__ // this makes it easy to hide static vars, make visible for debug #if DBG #define LOCAL #define GLOBAL #else #define LOCAL static #define GLOBAL #endif #ifdef POOL_TAGGING #undef ExAllocatePool #define ExAllocatePool(type, size) ExAllocatePoolWithTag(type, size, 'CBSU') #endif #if DBG #define DEBUG_TRACE1(_x_) { \ if(Usbser_Debug_Trace_Level >= 1) \ { \ DbgPrint _x_ ; \ } \ } #define DEBUG_TRACE2(_x_) { \ if(Usbser_Debug_Trace_Level >= 2) \ { \ DbgPrint("%s: ",DriverName); \ DbgPrint _x_ ; \ } \ } #define DEBUG_TRACE3(_x_) { \ if(Usbser_Debug_Trace_Level >= 3) \ { \ DbgPrint("%s: ",DriverName); \ DbgPrint _x_ ; \ } \ } #define DEBUG_TRAP() DbgBreakPoint() #else #define DEBUG_TRACE1(_x_) #define DEBUG_TRACE2(_x_) #define DEBUG_TRACE3(_x_) #define DEBUG_TRAP() DbgBreakPoint() #endif // DBG // these macros are for logging things, avoid subroutine call // if they are disabled (number of entries = 0) #ifdef PROFILING_ENABLED // need these for creating macros for speed in logging and history extern GLOBAL ULONG IRPHistorySize; extern GLOBAL ULONG DebugPathSize; extern GLOBAL ULONG ErrorLogSize; #define DEBUG_LOG_IRP_HIST(dobj, pirp, majfunc, buff, bufflen) { \ if(IRPHistorySize) \ Debug_LogIrpHist(dobj, pirp, majfunc, buff, bufflen); \ } #define DEBUG_LOG_PATH(path) { \ if(DebugPathSize) \ Debug_LogPath(path); \ } #define DEBUG_LOG_ERROR(status) { \ if(ErrorLogSize) \ Debug_LogError(status); \ } #define DEBUG_ASSERT(msg, exp) { \ if(!(exp)) \ Debug_Assert(#exp, __FILE__, __LINE__, msg); \ } #define DEBUG_OPEN Debug_OpenWDMDebug #define DEBUG_CLOSE Debug_CloseWDMDebug #define DEBUG_MEMALLOC Debug_MemAlloc #define DEBUG_MEMFREE Debug_MemFree #define DEBUG_CHECKMEM Debug_CheckAllocations // prototypes NTSTATUS Debug_OpenWDMDebug(VOID); VOID Debug_CloseWDMDebug(VOID); NTSTATUS Debug_SizeIRPHistoryTable(IN ULONG Size); NTSTATUS Debug_SizeDebugPathHist(IN ULONG Size); NTSTATUS Debug_SizeErrorLog(ULONG Size); VOID Debug_LogIrpHist(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp, IN ULONG MajorFunction, IN PVOID IoBuffer, IN ULONG BufferLen); VOID Debug_LogPath(IN PCHAR Path); VOID Debug_LogError(IN NTSTATUS NtStatus); VOID Debug_Trap(IN PCHAR TrapCause); VOID Debug_Assert(IN PVOID FailedAssertion, IN PVOID FileName, IN ULONG LineNumber, IN PCHAR Message); ULONG Debug_ExtractAttachedDevices(IN PDRIVER_OBJECT DriverObject, OUT PCHAR Buffer, IN ULONG BuffSize); ULONG Debug_GetDriverInfo(OUT PCHAR Buffer, IN ULONG BuffSize); ULONG Debug_ExtractIRPHist(OUT PCHAR Buffer, IN ULONG BuffSize); ULONG Debug_ExtractPathHist(OUT PCHAR Buffer, IN ULONG BuffSize); ULONG Debug_ExtractErrorLog(OUT PCHAR Buffer, IN ULONG BuffSize); ULONG Debug_DumpDriverLog(IN PDEVICE_OBJECT DeviceObject, OUT PCHAR Buffer, IN ULONG BuffSize); PCHAR Debug_TranslateStatus(IN NTSTATUS NtStatus); PCHAR Debug_TranslateIoctl(IN LONG Ioctl); #else VOID Debug_CheckAllocations(VOID); PVOID Debug_MemAlloc(IN POOL_TYPE PoolType, IN ULONG NumberOfBytes); VOID Debug_MemFree(IN PVOID pMem); #define DEBUG_LOG_IRP_HIST(dobj, pirp, majfunc, buff, bufflen) #define DEBUG_LOG_PATH(path) #define DEBUG_LOG_ERROR(status) #define DEBUG_ASSERT(msg, exp) #define DEBUG_OPEN() STATUS_SUCCESS #define DEBUG_CLOSE() #define DEBUG_MEMALLOC Debug_MemAlloc #define DEBUG_MEMFREE Debug_MemFree #define DEBUG_CHECKMEM Debug_CheckAllocations #endif // PROFILING_ENABLED #endif // __DEBUGWDM_H__