mirror of https://github.com/tongzx/nt5src
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
203 lines
6.8 KiB
203 lines
6.8 KiB
/*++ BUILD Version: 0000 // Increment this if a change has global effects
|
|
|
|
Copyright (c) 1989 Microsoft Corporation
|
|
|
|
Module Name:
|
|
|
|
LfsData.c
|
|
|
|
Abstract:
|
|
|
|
This module declares the global data used by the Log File Service.
|
|
|
|
Author:
|
|
|
|
Brian Andrew [BrianAn] 20-June-1991
|
|
|
|
Revision History:
|
|
|
|
--*/
|
|
|
|
#ifndef _LFSDATA_
|
|
#define _LFSDATA_
|
|
|
|
//
|
|
// The global Lfs data record
|
|
//
|
|
|
|
extern LFS_DATA LfsData;
|
|
|
|
//
|
|
// Various large integer constants.
|
|
//
|
|
|
|
#define LfsMaximumFileSize (0x0000000100000000)
|
|
|
|
extern LARGE_INTEGER LfsLi0;
|
|
extern LARGE_INTEGER LfsLi1;
|
|
|
|
//
|
|
// The following Lsn is used as a starting point in the file.
|
|
//
|
|
|
|
extern LSN LfsStartingLsn;
|
|
|
|
#ifdef LFS_CLUSTER_CHECK
|
|
|
|
//
|
|
// Check for gaps in the log.
|
|
//
|
|
|
|
extern BOOLEAN LfsTestBreakOnAnyError;
|
|
extern BOOLEAN LfsTestCheckLbcb;
|
|
#endif
|
|
|
|
//
|
|
// Turn on pseudo-asserts if NTFS_FREE_ASSERTS is defined.
|
|
//
|
|
|
|
#if !DBG
|
|
#ifdef NTFS_FREE_ASSERTS
|
|
#undef ASSERT
|
|
#undef ASSERTMSG
|
|
#define ASSERT(exp) if (!(exp)) { extern PBOOLEAN KdDebuggerEnabled; DbgPrint("%s:%d %s\n",__FILE__,__LINE__,#exp); if (*KdDebuggerEnabled) { DbgBreakPoint(); } }
|
|
#define ASSERTMSG(msg,exp) if (!(exp)) { extern PBOOLEAN KdDebuggerEnabled; DbgPrint("%s:%d %s %s\n",__FILE__,__LINE__,msg,#exp); if (*KdDebuggerEnabled) { DbgBreakPoint(); } }
|
|
#endif
|
|
#endif
|
|
|
|
//
|
|
// The global Lfs debug level variable, its values are:
|
|
//
|
|
// 0x00000000 Always gets printed (used when about to bug check)
|
|
//
|
|
// 0x00000001 Error conditions
|
|
// 0x00000002 Debug hooks
|
|
// 0x00000004 Catch exceptions before completing Irp
|
|
// 0x00000008 Unwinding during error conditions
|
|
//
|
|
// 0x00000010 Lfs initialization
|
|
// 0x00000020 Lfs query log records
|
|
// 0x00000040 Lfs write log records
|
|
// 0x00000080 Lfs registry routines
|
|
//
|
|
// 0x00000100 Lfs worker thread routines
|
|
// 0x00000200
|
|
// 0x00000400
|
|
// 0x00000800
|
|
//
|
|
// 0x00001000 Log page support routines
|
|
// 0x00002000 Lsn support routines
|
|
// 0x00004000 Miscellaneous support routines
|
|
// 0x00008000 Support routines for cache operations
|
|
//
|
|
// 0x00010000 Structure support routines
|
|
// 0x00020000 Verify/validate support routines
|
|
// 0x00040000 Synchronization routines
|
|
// 0x00080000 Log buffer support routines
|
|
//
|
|
// 0x00100000 Support routines for manipulating log records
|
|
// 0x00200000 Support routines for manipulation lfs restart areas
|
|
// 0x00400000 Support routines for client restart operations
|
|
// 0x00800000
|
|
//
|
|
// 0x01000000
|
|
// 0x02000000
|
|
// 0x04000000
|
|
// 0x08000000
|
|
//
|
|
// 0x10000000
|
|
// 0x20000000
|
|
// 0x40000000
|
|
// 0x80000000
|
|
//
|
|
|
|
#ifdef LFSDBG
|
|
|
|
#define DEBUG_TRACE_ERROR (0x00000001)
|
|
#define DEBUG_TRACE_DEBUG_HOOKS (0x00000002)
|
|
#define DEBUG_TRACE_CATCH_EXCEPTIONS (0x00000004)
|
|
#define DEBUG_TRACE_UNWIND (0x00000008)
|
|
#define DEBUG_TRACE_INITIALIZATION (0x00000010)
|
|
#define DEBUG_TRACE_QUERY (0x00000020)
|
|
#define DEBUG_TRACE_WRITE (0x00000040)
|
|
#define DEBUG_TRACE_RESTART (0x00000080)
|
|
#define DEBUG_TRACE_REGISTRY (0x00000100)
|
|
#define DEBUG_TRACE_WORKER (0x00000200)
|
|
#define DEBUG_TRACE_0x00000400 (0x00000400)
|
|
#define DEBUG_TRACE_0x00000800 (0x00000800)
|
|
#define DEBUG_TRACE_LOG_PAGE_SUP (0x00001000)
|
|
#define DEBUG_TRACE_LSN_SUP (0x00002000)
|
|
#define DEBUG_TRACE_MISC_SUP (0x00004000)
|
|
#define DEBUG_TRACE_CACHE_SUP (0x00008000)
|
|
#define DEBUG_TRACE_STRUC_SUP (0x00010000)
|
|
#define DEBUG_TRACE_VERIFY_SUP (0x00020000)
|
|
#define DEBUG_TRACE_SYNCH_SUP (0x00040000)
|
|
#define DEBUG_TRACE_LBCB_SUP (0x00080000)
|
|
#define DEBUG_TRACE_LOG_RECORD_SUP (0x00100000)
|
|
#define DEBUG_TRACE_RESTART_SUP (0x00200000)
|
|
#define DEBUG_TRACE_0x00400000 (0x00400000)
|
|
#define DEBUG_TRACE_0x00800000 (0x00800000)
|
|
#define DEBUG_TRACE_0x01000000 (0x01000000)
|
|
#define DEBUG_TRACE_0x02000000 (0x02000000)
|
|
#define DEBUG_TRACE_0x04000000 (0x04000000)
|
|
#define DEBUG_TRACE_0x08000000 (0x08000000)
|
|
#define DEBUG_TRACE_0x10000000 (0x10000000)
|
|
#define DEBUG_TRACE_0x20000000 (0x20000000)
|
|
#define DEBUG_TRACE_0x40000000 (0x40000000)
|
|
#define DEBUG_TRACE_0x80000000 (0x80000000)
|
|
|
|
extern LONG LfsDebugTraceLevel;
|
|
extern LONG LfsDebugTraceIndent;
|
|
|
|
#define DebugTrace(INDENT,LEVEL,X,Y) { \
|
|
LONG _i; \
|
|
if (((LEVEL) == 0) || (LfsDebugTraceLevel & (LEVEL))) { \
|
|
_i = (ULONG)PsGetCurrentThread(); \
|
|
DbgPrint("%08lx:",_i); \
|
|
if ((INDENT) < 0) { \
|
|
LfsDebugTraceIndent += (INDENT); \
|
|
} \
|
|
if (LfsDebugTraceIndent < 0) { \
|
|
LfsDebugTraceIndent = 0; \
|
|
} \
|
|
for (_i = 0; _i < LfsDebugTraceIndent; _i += 1) { \
|
|
DbgPrint(" "); \
|
|
} \
|
|
DbgPrint(X,Y); \
|
|
if ((INDENT) > 0) { \
|
|
LfsDebugTraceIndent += (INDENT); \
|
|
} \
|
|
} \
|
|
}
|
|
|
|
#define DebugDump(STR,LEVEL,PTR) { \
|
|
ULONG _i; \
|
|
VOID LfsDump(); \
|
|
if (((LEVEL) == 0) || (LfsDebugTraceLevel & (LEVEL))) { \
|
|
_i = (ULONG)PsGetCurrentThread(); \
|
|
DbgPrint("%08lx:",_i); \
|
|
DbgPrint(STR); \
|
|
if (PTR != NULL) {LfsDump(PTR);} \
|
|
DbgBreakPoint(); \
|
|
} \
|
|
}
|
|
|
|
#define DebugUnwind(X) { \
|
|
if (AbnormalTermination()) { \
|
|
DebugTrace(0, DEBUG_TRACE_UNWIND, #X ", Abnormal termination.\n", 0); \
|
|
} \
|
|
}
|
|
|
|
#define DebugDoit(X) {X;}
|
|
|
|
#else
|
|
|
|
#define DebugTrace(INDENT,LEVEL,X,Y) {NOTHING;}
|
|
#define DebugDump(STR,LEVEL,PTR) {NOTHING;}
|
|
#define DebugUnwind(X) {NOTHING;}
|
|
#define DebugDoit(X) {NOTHING;}
|
|
|
|
#endif // LFSDBG
|
|
|
|
#endif // _LFSDATA_
|
|
|