/*++ Copyright (c) 1992 Microsoft Corporation Module Name: Data.h Abstract: This module declares the global data used by the NetWare redirector file system. Author: Colin Watson [ColinW] 15-Dec-1992 Anoop Anantha [AnoopA] 24-Jun-1998 Revision History: --*/ #ifndef _NWDATA_ #define _NWDATA_ extern PEPROCESS FspProcess; extern PDEVICE_OBJECT FileSystemDeviceObject; extern RCB NwRcb; extern KSPIN_LOCK ScbSpinLock; extern KSPIN_LOCK NwTimerSpinLock; extern LIST_ENTRY ScbQueue; extern NONPAGED_SCB NwPermanentNpScb; extern SCB NwPermanentScb; extern LARGE_INTEGER NwMaxLarge; extern ULONG NwAbsoluteTotalWaitTime; extern TDI_ADDRESS_IPX OurAddress; extern UNICODE_STRING IpxTransportName; extern HANDLE IpxHandle; extern PDEVICE_OBJECT pIpxDeviceObject; extern PFILE_OBJECT pIpxFileObject; extern LIST_ENTRY LogonList; extern LOGON Guest; extern LARGE_INTEGER DefaultLuid; extern LIST_ENTRY GlobalVcbList; extern ULONG CurrentVcbEntry; // // Drive mapping table of redirected drives. // extern PVCB GlobalDriveMapTable[]; //Terminal Server merge // NDS Preferred Server from registry key extern UNICODE_STRING NDSPreferredServer; //Terminal Server merge extern WCHAR NDSPrefSvrName[]; //Terminal Server merge //extern PVCB DriveMapTable[]; // // The global structure used to contain our fast I/O callbacks // extern FAST_IO_DISPATCH NwFastIoDispatch; // // Configurable paramaters // extern SHORT DefaultRetryCount; extern ULONG NwScavengerTickCount; extern ULONG NwScavengerTickRunCount; extern KSPIN_LOCK NwScavengerSpinLock; extern LIST_ENTRY NwGetMessageList; extern KSPIN_LOCK NwMessageSpinLock; extern LIST_ENTRY NwPendingLockList; extern KSPIN_LOCK NwPendingLockSpinLock; extern ERESOURCE NwOpenResource; extern LONG PreferNDSBrowsing; #if 0 extern LIST_ENTRY FnList; // HACKHACK #endif extern BOOLEAN NwBurstModeEnabled; extern ULONG NwMaxSendSize; extern ULONG NwMaxReceiveSize; extern ULONG NwPrintOptions; extern UNICODE_STRING NwProviderName; extern LONG MaxSendDelay; extern LONG MaxReceiveDelay; extern LONG MinSendDelay; extern LONG MinReceiveDelay; extern LONG BurstSuccessCount; extern LONG BurstSuccessCount2; extern LONG AllowGrowth; extern LONG DontShrink; extern LONG SendExtraNcp; extern LONG DefaultMaxPacketSize; extern LONG PacketThreshold; extern LONG LargePacketAdjustment; extern LONG LipPacketAdjustment; extern LONG LipAccuracy; extern LONG MaxWriteTimeout; extern LONG MaxReadTimeout; extern LONG WriteTimeoutMultiplier; extern LONG ReadTimeoutMultiplier; extern ULONG DisableAltFileName; #define MAX_NDS_OBJECT_CACHE_SIZE (0x00000080) extern ULONG NdsObjectCacheSize; #define MAX_NDS_OBJECT_CACHE_TIMEOUT (0x00000258) // (10 minutes) extern ULONG NdsObjectCacheTimeout; extern ULONG EnableMultipleConnects; extern ULONG AllowSeedServerRedirection; extern ULONG ReadExecOnlyFiles; extern KQUEUE KernelQueue; extern BOOLEAN WorkerThreadRunning; extern HANDLE WorkerThreadHandle; #ifdef _PNP_POWER_ extern BOOLEAN fSomePMDevicesAreActive; extern BOOLEAN fPoweringDown; #endif extern LONG Japan; // Controls special DBCS translation extern LONG Korean; // Controls special Korean translation extern LONG DisableReadCache ; extern LONG DisableWriteCache ; extern LONG FavourLongNames ; // use LFN where possible extern DWORD LongNameFlags; #define LFN_FLAG_DISABLE_LONG_NAMES (0x00000001) extern ULONG DirCacheEntries; #define MAX_DIR_CACHE_ENTRIES (0x00000080) extern LARGE_INTEGER TimeOutEventInterval; extern NW_REDIR_STATISTICS Stats; extern ULONG ContextCount; extern SECTION_DESCRIPTOR NwSectionDescriptor; extern ERESOURCE NwUnlockableCodeResource; extern ULONG LockTimeoutThreshold; #ifndef _PNP_POWER_ extern HANDLE TdiBindingHandle; extern UNICODE_STRING TdiIpxDeviceName; #endif extern BOOLEAN DelayedProcessLineChange; extern PIRP DelayedLineChangeIrp; #ifdef NWDBG #define DEBUG_TRACE_ALWAYS (0x00000000) #define DEBUG_TRACE_CLEANUP (0x00000001) #define DEBUG_TRACE_CLOSE (0x00000002) #define DEBUG_TRACE_CREATE (0x00000004) #define DEBUG_TRACE_FSCTRL (0x00000008) #define DEBUG_TRACE_IPX (0x00000010) #define DEBUG_TRACE_LOAD (0x00000020) #define DEBUG_TRACE_EXCHANGE (0x00000040) #define DEBUG_TRACE_FILOBSUP (0x00000080) #define DEBUG_TRACE_STRUCSUP (0x00000100) #define DEBUG_TRACE_FSP_DISPATCHER (0x00000200) #define DEBUG_TRACE_FSP_DUMP (0x00000400) #define DEBUG_TRACE_WORKQUE (0x00000800) #define DEBUG_TRACE_UNWIND (0x00001000) #define DEBUG_TRACE_CATCH_EXCEPTIONS (0x00002000) #define DEBUG_TRACE_ICBS (0x00004000) #define DEBUG_TRACE_FILEINFO (0x00008000) #define DEBUG_TRACE_DIRCTRL (0x00010000) #define DEBUG_TRACE_CONVERT (0x00020000) #define DEBUG_TRACE_WRITE (0x00040000) #define DEBUG_TRACE_READ (0x00080000) #define DEBUG_TRACE_VOLINFO (0x00100000) #define DEBUG_TRACE_LOCKCTRL (0x00200000) #define DEBUG_TRACE_USERNCP (0x00400000) #define DEBUG_TRACE_SECURITY (0x00800000) #define DEBUG_TRACE_CACHE (0x01000000) #define DEBUG_TRACE_LIP (0x02000000) #define DEBUG_TRACE_MDL (0x04000000) #define DEBUG_TRACE_PNP (0x08000000) #define DEBUG_TRACE_NDS (0x10000000) #define DEBUG_TRACE_SCAVENGER (0x40000000) #define DEBUG_TRACE_TIMER (0x80000000) extern ULONG NwDebug; extern ULONG NwMemDebug; extern LONG NwDebugTraceIndent; #define DebugTrace( I, L, M, P ) RealDebugTrace( I, L, "%08lx: %*s"M, (PVOID)(P) ) #define DebugUnwind(X) { \ if (AbnormalTermination()) { \ DebugTrace(0, DEBUG_TRACE_UNWIND, #X ", Abnormal termination.\n", 0); \ } \ } // // The following variables are used to keep track of the total amount // of requests processed by the file system, and the number of requests // that end up being processed by the Fsp thread. The first variable // is incremented whenever an Irp context is created (which is always // at the start of an Fsd entry point) and the second is incremented // by read request. // extern ULONG NwFsdEntryCount; extern ULONG NwFspEntryCount; extern ULONG NwIoCallDriverCount; extern ULONG NwTotalTicks[]; extern KSPIN_LOCK NwDebugInterlock; extern ERESOURCE NwDebugResource; extern LIST_ENTRY NwPagedPoolList; extern LIST_ENTRY NwNonpagedPoolList; extern ULONG MdlCount; extern ULONG IrpCount; #define DebugDoit(X) {X;} extern LONG NwPerformanceTimerLevel; #define TimerStart(LEVEL) { \ LARGE_INTEGER TStart, TEnd; \ LARGE_INTEGER TElapsed; \ TStart = KeQueryPerformanceCounter( NULL ); \ #define TimerStop(LEVEL,s) \ TEnd = KeQueryPerformanceCounter( NULL ); \ TElapsed = RtlLargeIntegerSubtract( TEnd, TStart ); \ /* NwTotalTicks[NwLogOf(LEVEL)] += TElapsed.LowPart; */ \ if (FlagOn( NwPerformanceTimerLevel, (LEVEL))) { \ DbgPrint("Time of %s %ld\n", (s), TElapsed.LowPart ); \ } \ } #else #define DebugTrace(INDENT,LEVEL,X,Y) {NOTHING;} #define DebugUnwind(X) {NOTHING;} #define DebugDoit(X) {NOTHING;} #define TimerStart(LEVEL) #define TimerStop(LEVEL,s) #endif // NWDBG #endif // _NWDATA_