149 lines
3 KiB
C
149 lines
3 KiB
C
/*++
|
|
|
|
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;
|
|
|