windows-nt/Source/XPSP1/NT/drivers/wdm/usb/driver/usbser/debugwdm.h
2020-09-26 16:20:57 +08:00

227 lines
4.5 KiB
C
Raw Permalink Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/****************************************************************************
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__