227 lines
4.5 KiB
C
227 lines
4.5 KiB
C
|
/****************************************************************************
|
|||
|
|
|||
|
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__
|
|||
|
|