Source code of Windows XP (NT5)
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.
|
|
/*++
Copyright (c) 1989 Microsoft Corporation
Module Name:
RxLog.h
Abstract:
This module declares the prototypes and global data used by the RDBSS debug logging facilities.
Author:
Joe Linn [JoeLinn] 1-aug-1994
Revision History:
Balan Sethu Raman [SethuR] 23-April-95 revised log layout
Notes:
The log records are stored in a circular buffer. Each record is bounded on either side by a record descriptor. This record descriptor is four bytes long.
--*/
#ifndef _RDBSSLOG_INCLUDED_
#define _RDBSSLOG_INCLUDED_
typedef enum { RX_LOG_UNINITIALIZED, RX_LOG_ENABLED, RX_LOG_DISABLED, RX_LOG_ERROR } RX_LOGGING_STATE;
typedef struct RX_LOG_ENTRY_HEADER { PCHAR Buffer; } RX_LOG_ENTRY_HEADER, *PRX_LOG_ENTRY_HEADER;
typedef struct RX_LOG { RX_SPIN_LOCK SpinLock; RX_LOGGING_STATE State; PRX_LOG_ENTRY_HEADER CurrentEntry; PRX_LOG_ENTRY_HEADER BaseEntry; PRX_LOG_ENTRY_HEADER EntryLimit; ULONG LogBufferSizeInEntries; ULONG NumberOfEntriesIgnored; ULONG NumberOfLogWriteAttempts; ULONG NumberOfLogWraps; } RX_LOG, *PRX_LOG;
//the logging facilities are always present. what RDBSSLOG does is to enable generation
//of the calls! on checked builds, you even get the calls unless NO_RDBSSLOG is set.
//extern
//VOID
//RxLogInterlockedAddUlong(
// PULONG Result,
// PULONG Counter,
// ULONG Addend);
extern VOID RxDebugControlCommand ( IN char *ControlString );
extern NTSTATUS RxInitializeLog(void);
extern VOID RxUninitializeLog(void);
extern VOID _RxPrintLog(IN ULONG EntriesToPrint OPTIONAL);
extern VOID _RxPauseLog(void);
extern VOID _RxResumeLog (void);
extern VOID _RxLog(char *format, ...);
#define MAX_RX_LOG_ENTRY_SIZE (48)
#define RDBSSLOG_ASYNC_NAME_PREFIX "[nowait]"
#define RXCONTX_OPERATION_NAME(MajorFunction,Wait) \
(RxContxOperationNames[(MajorFunction)]+((Wait)?(sizeof(RDBSSLOG_ASYNC_NAME_PREFIX)-1):0)) extern PUCHAR RxContxOperationNames[];
#ifdef RDBSSLOG
//
// The arguments to RxLog must be enclosed with an additional pair of parenthesis to enable
// transalation into a null call when logging should be turned off.
// e.g. RxLog(("%s %d", FILE, LINE))
#if DBG
#define RxLog(Args) _RxLog##Args
#define RxLogRetail(Args) _RxLog##Args
#else
#define RxLogRetail(Args) _RxLog##Args
#define RxLog(Args) {NOTHING;}
#endif
#define RxPauseLog() _RxPauseLog()
#define RxResumeLog() _RxResumeLog()
#else //if notdef RDBSSLOG
#define RxLog(Args) {NOTHING;}
#define RxLogRetail(Args) {NOTHING;}
#define RxPauseLog() {NOTHING;}
#define RxResumeLog() {NOTHING;}
#endif
#endif // _RDBSSLOG_INCLUDED_
#if DBG
#define RxDbgPrint(Args) DbgPrint##Args
#else
#define RxDbgPrint(Args) NOTHING
#endif
LIST_ENTRY RxIrpsList; KSPIN_LOCK RxIrpsListSpinLock;
typedef struct _RX_IRP_LIST_ITEM { LIST_ENTRY IrpsList; PIRP pIrp; PMDL CopyDataBuffer; ULONG Completed; } RX_IRP_LIST_ITEM, *PRX_IRP_LIST_ITEM;
|