/*++ Copyright (c) 1998 Microsoft Corporation Module Name: spudp.h Abstract: This is the local header file for SPUD. It includes all other necessary header files for SPUD. Author: John Ballard (jballard) 21-Oct-1996 Revision History: --*/ #ifndef _SPUDP_H_ #define _SPUDP_H_ // // N.B. ntos\inc\init.h and ntos\inc\ke.h declare NtBuildNumber and // KeServiceDescriptorTable without the additional level of indirection // necessary to access them through an export thunk. To get around this, // we'll #define them to goofy values, include the header files, then // undef them before declaring them properly. // #include #include #include // // Our device name. // #define SPUD_DEVICE_NAME L"\\Device\\Spud" // // Priority boost for completed I/O requests. // #define SPUD_PRIORITY_BOOST 2 // // Set ENABLE_OB_TRACING to enable OB reference count tracing. // // Set ALLOW_UNLOAD to allow the driver to be conditionally unloaded. // // Set USE_SPUD_COUNTERS to enable SPUD activity counters. // #if DBG #define ENABLE_OB_TRACING 1 #define ALLOW_UNLOAD 0 #define USE_SPUD_COUNTERS 1 #else #define ENABLE_OB_TRACING 0 #define ALLOW_UNLOAD 0 #define USE_SPUD_COUNTERS 1 #endif // // Pool tags. // #define SPUD_NONPAGED_DATA_POOL_TAG 'NupS' #define SPUD_HANDLE_TABLE_POOL_TAG 'HupS' #define SPUD_TRACE_LOG_POOL_TAG 'TupS' #define SPUD_REQ_CONTEXT_POOL_TAG 'RupS' typedef struct _TRANSMIT_FILE_BUFFERS { PVOID Head; ULONG HeadLength; PVOID Tail; ULONG TailLength; } TRANSMIT_FILE_BUFFERS, *PTRANSMIT_FILE_BUFFERS, *LPTRANSMIT_FILE_BUFFERS; // // Goodies stolen from WINSOCK2.H (to make AFD.H happy). // #ifndef SG_UNCONSTRAINED_GROUP #define SG_UNCONSTRAINED_GROUP 0x01 #endif #ifndef SG_CONSTRAINED_GROUP #define SG_CONSTRAINED_GROUP 0x02 #endif #include #include #include "spudstr.h" #include "spudproc.h" #include "spuddata.h" #include "reftrace.h" // // Pool allocators. // #define SPUD_ALLOCATE_POOL(a,b,t) ExAllocatePoolWithTag(a,b,t) #define SPUD_FREE_POOL(a) ExFreePool(a) // // Debug-specific stuff. // #if DBG // // Define our own assert so that we can actually catch assertion failures // when running a checked SPUD on a free kernel. // VOID SpudAssert( PVOID FailedAssertion, PVOID FileName, ULONG LineNumber, PCHAR Message ); #undef ASSERT #define ASSERT( exp ) \ if (!(exp)) \ SpudAssert( #exp, __FILE__, __LINE__, NULL ) #undef ASSERTMSG #define ASSERTMSG( msg, exp ) \ if (!(exp)) \ SpudAssert( #exp, __FILE__, __LINE__, msg ) #endif // DBG // // OB reference tracing stuff. // #if ENABLE_OB_TRACING #define TRACE_OB_REFERENCE( obj ) \ if( SpudTraceLog != NULL ) { \ WriteRefTraceLog( \ SpudTraceLog, \ (PVOID)(obj), \ +1, \ __FILE__, \ __LINE__ \ ); \ } else #define TRACE_OB_DEREFERENCE( obj ) \ if( SpudTraceLog != NULL ) { \ WriteRefTraceLog( \ SpudTraceLog, \ (PVOID)(obj), \ -1, \ __FILE__, \ __LINE__ \ ); \ } else #else // !ENABLE_OB_TRACING #define TRACE_OB_REFERENCE( obj ) #define TRACE_OB_DEREFERENCE( obj ) #endif // ENABLE_OB_TRACING // // Activity counters. // #if USE_SPUD_COUNTERS #define BumpCount(c) InterlockedIncrement( &SpudCounters.c ) #else // !USE_SPUD_COUNTERS #define BumpCount(c) ((void)0) #endif // USE_SPUD_COUNTERS #endif // _SPUDP_H_