/*++ Copyright (c) 1999-2001 Microsoft Corporation Module Name: irptrace.h Abstract: This module contains public declarations and definitions for tracing and debugging IRP problems. This module uses the generic TRACE_LOG facility in tracelog.h. Author: Keith Moore (keithmo) 10-Aug-1999 Revision History: --*/ #ifndef _IRPTRACE_H_ #define _IRPTRACE_H_ #if defined(__cplusplus) extern "C" { #endif // __cplusplus // // This defines the entry written to the trace log. // #define ENABLE_IRP_CAPTURE 1 #define MAX_CAPTURED_IRP_SIZE \ (sizeof(IRP) + (DEFAULT_IRP_STACK_SIZE * sizeof(IO_STACK_LOCATION))) typedef struct _IRP_TRACE_LOG_ENTRY { PIRP pIrp; PVOID pFileName; PEPROCESS pProcess; PETHREAD pThread; PVOID pCaller; PVOID pCallersCaller; USHORT LineNumber; UCHAR Action; UCHAR Processor; #if ENABLE_IRP_CAPTURE ULONG CapturedIrp[MAX_CAPTURED_IRP_SIZE / sizeof(ULONG)]; #endif } IRP_TRACE_LOG_ENTRY, *PIRP_TRACE_LOG_ENTRY; // // Action codes. // // N.B. These codes must be contiguous, starting at zero. If you update // this list, you must also update the corresponding array in // ul\ulkd\irp.c. // #define IRP_ACTION_INCOMING_IRP 0 #define IRP_ACTION_ALLOCATE_IRP 1 #define IRP_ACTION_FREE_IRP 2 #define IRP_ACTION_CALL_DRIVER 3 #define IRP_ACTION_COMPLETE_IRP 4 #define IRP_ACTION_COUNT 5 #define IRP_TRACE_LOG_SIGNATURE ((LONG)'gLrI') // // Manipulators. // PTRACE_LOG CreateIrpTraceLog( IN LONG LogSize, IN LONG ExtraBytesInHeader ); VOID DestroyIrpTraceLog( IN PTRACE_LOG pLog ); VOID WriteIrpTraceLog( IN PTRACE_LOG pLog, IN UCHAR Action, IN PIRP pIrp, IN PVOID pFileName, IN USHORT LineNumber ); #if ENABLE_IRP_TRACE #define CREATE_IRP_TRACE_LOG( ptr, size, extra ) \ (ptr) = CreateIrpTraceLog( (size), (extra) ) #define DESTROY_IRP_TRACE_LOG( ptr ) \ do \ { \ DestroyIrpTraceLog( ptr ); \ (ptr) = NULL; \ } while (FALSE) #define WRITE_IRP_TRACE_LOG( plog, act, pirp, pfile, line ) \ WriteIrpTraceLog( \ (plog), \ (act), \ (pirp), \ (pfile), \ (line) \ ) #else // !ENABLE_IRP_TRACE #define CREATE_IRP_TRACE_LOG( ptr, size, extra ) #define DESTROY_IRP_TRACE_LOG( ptr ) #define WRITE_IRP_TRACE_LOG( plog, act, ref, pfile, line ) #endif // ENABLE_IRP_TRACE #define TRACE_IRP( act, pirp ) \ WRITE_IRP_TRACE_LOG( \ g_pIrpTraceLog, \ (act), \ (pirp), \ (PVOID)__FILE__, \ (USHORT)__LINE__ \ ) #if defined(__cplusplus) } // extern "C" #endif // __cplusplus #endif // _IRPTRACE_H_