Leaked source code of windows server 2003
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.
 
 
 
 
 
 

189 lines
4.2 KiB

/*++
Copyright (c) 1998-2002 Microsoft Corporation
Module Name:
reftrace.c
Abstract:
This module implements a reference count tracing facility.
Author:
Keith Moore (keithmo) 10-Jun-1998
Revision History:
--*/
#include "precomp.h"
#if !REFERENCE_DEBUG
static int g_RefTraceDummyDeclarationToKeepW4WarningsQuiet;
#else
/***************************************************************************++
Routine Description:
Creates a new (empty) ref count trace log buffer.
Arguments:
LogSize - Supplies the number of entries in the log.
ExtraBytesInHeader - Supplies the number of extra bytes to include
in the log header. This is useful for adding application-
specific data to the log.
Return Value:
PTRACE_LOG - Pointer to the newly created log if successful,
NULL otherwise.
--***************************************************************************/
PTRACE_LOG
CreateRefTraceLog(
IN ULONG LogSize,
IN ULONG ExtraBytesInHeader,
IN TRACELOG_PRIORITY AllocationPriority,
IN ULONG PoolTag
)
{
return CreateTraceLog(
REF_TRACELOG_SIGNATURE,
LogSize,
ExtraBytesInHeader,
sizeof(REF_TRACE_LOG_ENTRY),
AllocationPriority,
PoolTag
);
} // CreateRefTraceLog
/***************************************************************************++
Routine Description:
Destroys a ref count trace log buffer created with CreateRefTraceLog().
Arguments:
pLog - Supplies the ref count trace log buffer to destroy.
--***************************************************************************/
VOID
DestroyRefTraceLog(
IN PTRACE_LOG pLog,
IN ULONG PoolTag
)
{
DestroyTraceLog( pLog, PoolTag );
} // DestroyRefTraceLog
/***************************************************************************++
Routine Description:
W/O destroying the ref trace this function simply does reset and cleanup.
Arguments:
pLog - Supplies the ref count trace log buffer to destroy.
--***************************************************************************/
VOID
ResetRefTraceLog(
IN PTRACE_LOG pLog
)
{
ResetTraceLog( pLog );
} // ResetTraceLog
/***************************************************************************++
Routine Description:
Writes a new entry to the specified ref count trace log.
Arguments:
pLog - Supplies the log to write to.
pLog2 - Supplies a secondary log to write to.
Action - Supplies an action code for the new log entry.
NewRefCount - Supplies the updated reference count.
pContext - Supplies an uninterpreted context to associate with
the log entry.
pFileName - Supplies the filename of the routine writing the log entry.
LineNumber - Supplies he line number of the routine writing the log
entry.
--***************************************************************************/
LONGLONG
WriteRefTraceLog(
IN PTRACE_LOG pLog,
IN PTRACE_LOG pLog2,
IN USHORT Action,
IN LONG NewRefCount,
IN PVOID pContext,
IN PCSTR pFileName,
IN USHORT LineNumber
)
{
REF_TRACE_LOG_ENTRY entry;
LONGLONG index;
ULONG hash;
ASSERT(Action < (1 << REF_TRACE_ACTION_BITS));
//
// Initialize the entry.
//
RtlCaptureStackBackTrace(
2,
REF_TRACE_CALL_STACK_DEPTH,
entry.CallStack,
&hash
);
entry.NewRefCount = NewRefCount;
entry.pContext = pContext;
entry.pFileName = pFileName;
entry.LineNumber = LineNumber;
entry.Action = Action;
entry.Processor = (UCHAR)KeGetCurrentProcessorNumber();
entry.pThread = PsGetCurrentThread();
//
// Write it to the logs.
//
WriteTraceLog( g_pMondoGlobalTraceLog, &entry );
index = WriteTraceLog( pLog, &entry );
if (pLog2 != NULL)
index = WriteTraceLog( pLog2, &entry );
return index;
} // WriteRefTraceLog
#endif // REFERENCE_DEBUG