+++ /dev/null
-////////////////////////////////////////////////////////////////////
-// Copyright (C) Alexander Telyatnikov, Ivan Keliukh, Yegor Anchishkin, SKIF Software, 1999-2013. Kiev, Ukraine
-// All rights reserved
-// This file was released under the GPLv2 on June 2015.
-////////////////////////////////////////////////////////////////////
-/*
- Module name:
-
- Udf_dbg.h
-
- Abstract:
-
- This file contains small set of debug macroses.
- It is used by the UDF project.
-
-*/
-
-#ifndef _UDF_DEBUG_H_
-#define _UDF_DEBUG_H_
-
-//======================================
-
-//#define ALWAYS_CHECK_WAIT_TIMEOUT
-//#define PRINT_ALWAYS
-
-#ifdef UDF_DBG
-
-//#define CHECK_ALLOC_FRAMES
-
-//#define TRACK_SYS_ALLOCS
-//#define TRACK_SYS_ALLOC_CALLERS
-
-// Use internal deadlock detector
-//#define USE_DLD
-
-#endif //UDF_DBG
-
-#define PROTECTED_MEM_RTL
-
-//#define UDF_SIMULATE_WRITES
-
-//#define USE_PERF_PRINT
-
-#define USE_KD_PRINT
-#define USE_MM_PRINT
-#define USE_AD_PRINT
-#define UDF_DUMP_EXTENT
-//#define USE_TH_PRINT
-//#define USE_TIME_PRINT
-//#define CHECK_REF_COUNTS
-
-//======================================
-
-#if defined UDF_DBG || defined PRINT_ALWAYS
-
- ULONG
- _cdecl
- DbgPrint(
- PCH Format,
- ...
- );
-
-
- #ifdef KdPrint
- #undef KdPrint
- #endif
-
- #ifdef USE_KD_PRINT
- #define KdPrint(_x_) DbgPrint _x_
- #else
- #define KdPrint(a) {NOTHING;}
- #endif //USE_KD_PRINT
-
- #ifdef USE_MM_PRINT
- #define MmPrint(_x_) DbgPrint _x_
- #else
- #define MmPrint(_x_) {NOTHING;}
- #endif //USE_MM_PRINT
-
- #ifdef USE_TIME_PRINT
- extern ULONG UdfTimeStamp;
- #define TmPrint(_x_) {UdfTimeStamp++;KdPrint(("TM:%d: ",UdfTimeStamp));KdPrint(_x_);}
- #else
- #define TmPrint KdPrint
- #endif //USE_MM_PRINT
-
- #ifdef USE_PERF_PRINT
- #define PerfPrint(_x_) DbgPrint _x_
- #else
- #define PerfPrint(_x_) {NOTHING;}
- #endif //USE_MM_PRINT
-
- #ifdef USE_AD_PRINT
- #define AdPrint(_x_) {DbgPrint("Thrd:%x:",PsGetCurrentThread());DbgPrint _x_;}
- #else
- #define AdPrint(_x_) {NOTHING;}
- #endif
-
- #ifdef USE_TH_PRINT
- #define ThPrint(_x_) {DbgPrint("Thrd:%x:",PsGetCurrentThread());DbgPrint _x_;}
- #else
- #define ThPrint(_x_) {NOTHING;}
- #endif
-
- #ifdef UDF_DUMP_EXTENT
- #define ExtPrint(_x_) KdPrint(_x_)
- #else
- #define ExtPrint(_x_) {NOTHING;}
- #endif
-
-#else // defined UDF_DBG || defined PRINT_ALWAYS
-
- #define MmPrint(_x_) {NOTHING;}
- #define TmPrint(_x_) {NOTHING;}
- #define PerfPrint(_x_) {NOTHING;}
- #define AdPrint(_x_) {NOTHING;}
- #define ThPrint(_x_) {NOTHING;}
- #define ExtPrint(_x_) {NOTHING;}
-
-#endif // defined UDF_DBG || defined PRINT_ALWAYS
-
-NTSTATUS
-DbgWaitForSingleObject_(
- IN PVOID Object,
- IN PLARGE_INTEGER Timeout OPTIONAL
- );
-
-#if defined ALWAYS_CHECK_WAIT_TIMEOUT
- #define DbgWaitForSingleObject(o, to) DbgWaitForSingleObject_(o, to)
-#else
- #define DbgWaitForSingleObject(o, to) KeWaitForSingleObject(o, Executive, KernelMode, FALSE, to);
-#endif
-
-#ifdef UDF_DBG
-
-#ifdef _X86_
-// This is an illegal use of INT3
-#define UDFBreakPoint() { __asm int 3 }
-#else // _X86_
-
-#define UDFBreakPoint() DbgBreakPoint()
-#endif // _X86_
-
-#ifdef BRUTE
-#define BrutePoint() UDFBreakPoint()
-#else
-#define BrutePoint() {}
-#endif // BRUTE
-
-#ifdef CHECK_REF_COUNTS
-#define ASSERT_REF(_a_) ASSERT(_a_)
-#else
-#define ASSERT_REF(_a_) {NOTHING;}
-#endif //CHECK_REF_COUNTS
-
-#ifdef TRACK_SYS_ALLOCS
-
-PVOID DebugAllocatePool(POOL_TYPE Type,ULONG size
-#ifdef TRACK_SYS_ALLOC_CALLERS
-, ULONG SrcId, ULONG SrcLine
-#endif //TRACK_SYS_ALLOC_CALLERS
-);
-VOID DebugFreePool(PVOID addr);
-
-#ifdef TRACK_SYS_ALLOC_CALLERS
- #define DbgAllocatePoolWithTag(a,b,c) DebugAllocatePool(a,b,UDF_BUG_CHECK_ID,__LINE__)
- #define DbgAllocatePool(x,y) DebugAllocatePool(x,y,UDF_BUG_CHECK_ID,__LINE__)
-#else //TRACK_SYS_ALLOC_CALLERS
- #define DbgAllocatePoolWithTag(a,b,c) DebugAllocatePool(a,b)
- #define DbgAllocatePool(x,y) DebugAllocatePool(x,y)
-#endif //TRACK_SYS_ALLOC_CALLERS
-#define DbgFreePool(x) DebugFreePool(x)
-
-#else //TRACK_SYS_ALLOCS
-
-#define DbgAllocatePoolWithTag(a,b,c) ExAllocatePoolWithTag(a,b,c)
-#define DbgAllocatePool(x,y) ExAllocatePoolWithTag(x,y,'Fnwd')
-#define DbgFreePool(x) ExFreePool(x)
-
-#endif //TRACK_SYS_ALLOCS
-
-
-#ifdef PROTECTED_MEM_RTL
-
-#define DbgMoveMemory(d, s, l) \
-_SEH2_TRY { \
- RtlMoveMemory(d, s, l); \
-} _SEH2_EXCEPT (EXCEPTION_EXECUTE_HANDLER) { \
- BrutePoint(); \
-} _SEH2_END;
-
-#define DbgCopyMemory(d, s, l) \
-_SEH2_TRY { \
- RtlCopyMemory(d, s, l); \
-} _SEH2_EXCEPT (EXCEPTION_EXECUTE_HANDLER) { \
- BrutePoint(); \
-} _SEH2_END;
-
-__inline
-ULONG
-DbgCompareMemory(PVOID d, PVOID s, ULONG l) {
- _SEH2_TRY {
- return RtlCompareMemory(d, s, l);
- } _SEH2_EXCEPT (EXCEPTION_EXECUTE_HANDLER) {
- BrutePoint();
- } _SEH2_END;
- return -1;
-}
-
-#else //PROTECTED_MEM_RTL
-
-#define DbgMoveMemory(d, s, l) RtlMoveMemory(d, s, l)
-#define DbgCopyMemory(d, s, l) RtlCopyMemory(d, s, l)
-#define DbgCompareMemory(d, s, l) RtlCompareMemory(d, s, l)
-
-#endif //PROTECTED_MEM_RTL
-
-//#define KdPrint(_x_)
-
-#ifdef VALIDATE_STRUCTURES
-#define ValidateFileInfo(fi) \
-{ /* validate FileInfo */ \
- if(!fi || (fi)->IntegrityTag) { \
- KdPrint(("UDF: ERROR! Using deallocated structure !!!\n"));\
- BrutePoint(); \
- } \
- if(fi && !fi->Dloc) { \
- KdPrint(("UDF: ERROR! FI without Dloc !!!\n"));\
- BrutePoint(); \
- } \
-}
-
-#else
-#define ValidateFileInfo(fi) {}
-#endif
-
-#if defined (_X86_) && defined (_MSC_VER)
-
-__inline VOID UDFTouch(IN PVOID addr)
-{
- __asm {
- mov eax,addr
- mov al,[byte ptr eax]
- }
-}
-
-#else // NO X86 optimization , use generic C/C++
-
-__inline VOID UDFTouch(IN PVOID addr)
-{
- UCHAR a = ((PUCHAR)addr)[0];
- a = a;
-}
-
-#endif // _X86_
-
-#else // UDF_DBG
-
-#define DbgAllocatePool(x,y) ExAllocatePoolWithTag(x,y,'Fnwd')
-#define DbgFreePool(x) ExFreePool(x)
-#define DbgAllocatePoolWithTag(a,b,c) ExAllocatePoolWithTag(a,b,c)
-
-#define DbgMoveMemory(d, s, l) RtlMoveMemory(d, s, l)
-#define DbgCopyMemory(d, s, l) RtlCopyMemory(d, s, l)
-#define DbgCompareMemory(d, s, l) RtlCompareMemory(d, s, l)
-
-#define ASSERT_REF(_a_) {NOTHING;}
-
-#define UDFBreakPoint() {}
-#define BrutePoint() {}
-#define ValidateFileInfo(fi) {}
-
-#define UDFTouch(addr) {}
-
-#endif // UDF_DBG
-
-#if defined UDF_DBG || defined PRINT_ALWAYS
-
-#define KdDump(a,b) \
-if((a)!=NULL) { \
- ULONG i; \
- for(i=0; i<(b); i++) { \
- ULONG c; \
- c = (ULONG)(*(((PUCHAR)(a))+i)); \
- KdPrint(("%2.2x ",c)); \
- if ((i & 0x0f) == 0x0f) KdPrint(("\n")); \
- } \
- KdPrint(("\n")); \
-}
-
-#else
-
-#define KdDump(a,b) {}
-
-#endif // UDF_DBG
-
-#define UserPrint KdPrint
-
-#endif // _UDF_DEBUG_H_