|
|
/*++
Copyright (c) 1989 Microsoft Corporation
Module Name:
NpData.c
Abstract:
This module declares the global data used by the Named Pipe file system.
Author:
Gary Kimura [GaryKi] 20-Aug-1990
Revision History:
--*/
#ifndef _NPDATA_
#define _NPDATA_
extern PVCB NpVcb;
//
// The global structure used to contain our fast I/O callbacks
//
extern FAST_IO_DISPATCH NpFastIoDispatch;
//
// Lists of pipe name aliases.
//
#define MIN_LENGTH_ALIAS_ARRAY (5 * sizeof(WCHAR)) // includes '\'
#define MAX_LENGTH_ALIAS_ARRAY (9 * sizeof(WCHAR))
extern SINGLE_LIST_ENTRY NpAliasListByLength[(MAX_LENGTH_ALIAS_ARRAY-MIN_LENGTH_ALIAS_ARRAY)/sizeof(WCHAR)+1]; extern SINGLE_LIST_ENTRY NpAliasList;
extern PVOID NpAliases; // single allocation containing all aliases
//
// The global Named Pipe debug level variable, its values are:
//
// 0x00000000 Always gets printed (used when about to bug check)
//
// 0x00000001
// 0x00000002
// 0x00000004
// 0x00000008
//
// 0x00000010
// 0x00000020
// 0x00000040
// 0x00000080
//
// 0x00000100
// 0x00000200
// 0x00000400
// 0x00000800
//
// 0x00001000
// 0x00002000
// 0x00004000
// 0x00008000
//
// 0x00010000
// 0x00020000
// 0x00040000
// 0x00080000
//
// 0x00100000
// 0x00200000
// 0x00400000
// 0x00800000
//
// 0x01000000
// 0x02000000
// 0x04000000
// 0x08000000
//
// 0x10000000
// 0x20000000
// 0x40000000
// 0x80000000
//
#ifdef NPDBG
#define DEBUG_TRACE_ERROR (0x00000001)
#define DEBUG_TRACE_DEBUG_HOOKS (0x00000002)
#define DEBUG_TRACE_CATCH_EXCEPTIONS (0x00000004)
#define DEBUG_TRACE_CREATE (0x00000008)
#define DEBUG_TRACE_CLOSE (0x00000010)
#define DEBUG_TRACE_READ (0x00000020)
#define DEBUG_TRACE_WRITE (0x00000040)
#define DEBUG_TRACE_FILEINFO (0x00000080)
#define DEBUG_TRACE_CLEANUP (0x00000100)
#define DEBUG_TRACE_DIR (0x00000200)
#define DEBUG_TRACE_FSCONTRL (0x00000400)
#define DEBUG_TRACE_CREATE_NAMED_PIPE (0x00000800)
#define DEBUG_TRACE_FLUSH_BUFFERS (0x00001000)
#define DEBUG_TRACE_VOLINFO (0x00002000)
#define DEBUG_TRACE_SEINFO (0x00004000)
#define DEBUG_TRACE_0x00008000 (0x00008000)
#define DEBUG_TRACE_0x00010000 (0x00010000)
#define DEBUG_TRACE_SECURSUP (0x00020000)
#define DEBUG_TRACE_DEVIOSUP (0x00040000)
#define DEBUG_TRACE_RESRCSUP (0x00080000)
#define DEBUG_TRACE_READSUP (0x00100000)
#define DEBUG_TRACE_WRITESUP (0x00200000)
#define DEBUG_TRACE_STATESUP (0x00400000)
#define DEBUG_TRACE_FILOBSUP (0x00800000)
#define DEBUG_TRACE_PREFXSUP (0x01000000)
#define DEBUG_TRACE_CNTXTSUP (0x02000000)
#define DEBUG_TRACE_DATASUP (0x04000000)
#define DEBUG_TRACE_WAITSUP (0x08000000)
#define DEBUG_TRACE_EVENTSUP (0x10000000)
#define DEBUG_TRACE_STRUCSUP (0x20000000)
extern LONG NpDebugTraceLevel; extern LONG NpDebugTraceIndent;
#define DebugTrace(INDENT,LEVEL,X,Y) { \
LONG _i; \ if (((LEVEL) == 0) || (NpDebugTraceLevel & (LEVEL))) { \ DbgPrint("%p:",PsGetCurrentThread()); \ if ((INDENT) < 0) { \ NpDebugTraceIndent += (INDENT); \ } \ if (NpDebugTraceIndent < 0) { \ NpDebugTraceIndent = 0; \ } \ for (_i=0; _i<NpDebugTraceIndent; _i+=1) { \ DbgPrint(" "); \ } \ DbgPrint(X,Y); \ if ((INDENT) > 0) { \ NpDebugTraceIndent += (INDENT); \ } \ } \ }
#define DebugDump(STR,LEVEL,PTR) { \
VOID NpDump(PVOID Ptr); \ if (((LEVEL) == 0) || (NpDebugTraceLevel & (LEVEL))) { \ DbgPrint("%p:",PsGetCurrentThread()); \ DbgPrint(STR); \ if (PTR != NULL) {NpDump(PTR);} \ DbgBreakPoint(); \ } \ }
#else
#define DebugTrace(INDENT,LEVEL,X,Y) {NOTHING;}
#define DebugDump(STR,LEVEL,PTR) {NOTHING;}
#endif // NPDBG
//
// The following macro is for all people who compile with the DBG switch
// set, not just fastfat dbg users
//
#if DBG
#define DbgDoit(X) {X;}
#else
#define DbgDoit(X) {NOTHING;}
#endif // DBG
//
// Some global debug routines to verify the shape and consistency of various
// data structures.
//
#ifdef DBG
_inline VOID NpfsVerifyCcb( IN PCHAR FileName, IN ULONG Line, IN PCCB Ccb ) { PFILE_OBJECT FileObject; if ((FileObject = Ccb->FileObject[ FILE_PIPE_CLIENT_END ]) != NULL) { if ((ULONG_PTR)FileObject->FsContext != (ULONG_PTR)Ccb) { DbgPrint("%s(%d) Ccb @ %p with bad client\n", FileName, Line, Ccb ); DbgBreakPoint(); } } if ((FileObject = Ccb->FileObject[ FILE_PIPE_SERVER_END ]) != NULL) { if (((ULONG_PTR)FileObject->FsContext & ~0x00000001) != (ULONG_PTR)Ccb) { DbgPrint("%s(%d) Ccb @ %p with bad server\n", FileName, Line, Ccb ); DbgBreakPoint(); } } } #else
#define NpfsVerifyCcb( IN PCHAR FileName, IN ULONG Line, IN PCCB Ccb )
#endif
#endif // _NPDATA_
|