mirror of https://github.com/tongzx/nt5src
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.
169 lines
2.5 KiB
169 lines
2.5 KiB
/*++
|
|
|
|
Copyright (c) 1998 Microsoft Corporation
|
|
|
|
Module Name:
|
|
|
|
reftrace.c
|
|
|
|
Abstract:
|
|
|
|
This module implements a reference count tracing facility.
|
|
|
|
Author:
|
|
|
|
Keith Moore (keithmo) 01-May-1997
|
|
|
|
Revision History:
|
|
|
|
--*/
|
|
|
|
|
|
#include "spudp.h"
|
|
|
|
|
|
#if 0
|
|
NOT PAGEABLE -- CreateRefTraceLog
|
|
NOT PAGEABLE -- DestroyRefTraceLog
|
|
NOT PAGEABLE -- WriteRefTraceLog
|
|
#endif
|
|
|
|
|
|
//
|
|
// Public functions.
|
|
//
|
|
|
|
|
|
PTRACE_LOG
|
|
CreateRefTraceLog(
|
|
IN LONG LogSize,
|
|
IN LONG ExtraBytesInHeader
|
|
)
|
|
|
|
/*++
|
|
|
|
Routine Description:
|
|
|
|
Creates a new (empty) ref count trace log buffer.
|
|
|
|
Arguments:
|
|
|
|
LogSize - The number of entries in the log.
|
|
|
|
ExtraBytesInHeader - 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.
|
|
|
|
--*/
|
|
|
|
{
|
|
|
|
return CreateTraceLog(
|
|
LogSize,
|
|
ExtraBytesInHeader,
|
|
sizeof(REF_TRACE_LOG_ENTRY)
|
|
);
|
|
|
|
} // CreateRefTraceLog
|
|
|
|
|
|
VOID
|
|
DestroyRefTraceLog(
|
|
IN PTRACE_LOG Log
|
|
)
|
|
|
|
/*++
|
|
|
|
Routine Description:
|
|
|
|
Destroys a ref count trace log buffer created with CreateRefTraceLog().
|
|
|
|
Arguments:
|
|
|
|
Log - The ref count trace log buffer to destroy.
|
|
|
|
Return Value:
|
|
|
|
None.
|
|
|
|
--*/
|
|
|
|
{
|
|
|
|
DestroyTraceLog( Log );
|
|
|
|
} // DestroyRefTraceLog
|
|
|
|
|
|
VOID
|
|
WriteRefTraceLog(
|
|
IN PTRACE_LOG Log,
|
|
IN PVOID Object,
|
|
IN ULONG Operation,
|
|
IN PSTR FileName,
|
|
IN ULONG LineNumber
|
|
)
|
|
|
|
/*++
|
|
|
|
Routine Description:
|
|
|
|
Writes a new entry to the specified ref count trace log. The entry
|
|
written contains the object, operation (ref or deref), filename, and
|
|
line number of the caller.
|
|
|
|
Arguments:
|
|
|
|
Log - The log to write to.
|
|
|
|
Object - The object being referenced or dereferenced.
|
|
|
|
Operation - Usually either +1 (ref) or -1 (deref).
|
|
|
|
FileName - The file name of the caller.
|
|
|
|
LineNumber - The line number of the caller.
|
|
|
|
Return Value:
|
|
|
|
None.
|
|
|
|
--*/
|
|
|
|
{
|
|
|
|
REF_TRACE_LOG_ENTRY entry;
|
|
POBJECT_HEADER header;
|
|
|
|
//
|
|
// Initialize the entry.
|
|
//
|
|
|
|
entry.Object = Object;
|
|
entry.Operation = Operation;
|
|
entry.FileName = FileName;
|
|
entry.LineNumber = LineNumber;
|
|
|
|
header = OBJECT_TO_OBJECT_HEADER( Object );
|
|
|
|
entry.PointerCount = header->PointerCount;
|
|
entry.HandleCount = header->HandleCount;
|
|
entry.Type = header->Type;
|
|
entry.Header = header;
|
|
|
|
//
|
|
// Write it to the log.
|
|
//
|
|
|
|
WriteTraceLog(
|
|
Log,
|
|
&entry
|
|
);
|
|
|
|
} // WriteRefTraceLog
|
|
|