reactos/sdk/lib/drivers/wdf/shared/object/dbgtrace.cpp

131 lines
2.8 KiB
C++
Raw Normal View History

/*++
Copyright (c) Microsoft Corporation
ModuleName:
DbgTrace.cpp
Abstract:
Temporary file to be used until ETW can be used
for UM
Author:
Revision History:
--*/
#include "fxobjectpch.hpp"
#if FX_CORE_MODE==FX_CORE_USER_MODE
#include "strsafe.h"
#endif
#if !defined(EVENT_TRACING)
VOID
__cdecl
DoTraceLevelMessage(
__in PVOID FxDriverGlobals,
__in ULONG DebugPrintLevel,
__in ULONG DebugPrintFlag,
__drv_formatString(FormatMessage)
__in PCSTR DebugMessage,
...
)
/*++
Routine Description:
Print the trace message to debugger.
Arguments:
TraceEventsLevel - print level between 0 and 3, with 3 the most verbose
Return Value:
None.
--*/
{
#if DBG
UNREFERENCED_PARAMETER(FxDriverGlobals);
#define TEMP_BUFFER_SIZE 1024
va_list list;
CHAR debugMessageBuffer[TEMP_BUFFER_SIZE];
NTSTATUS status;
va_start(list, DebugMessage);
if (DebugMessage) {
//
// Using new safe string functions instead of _vsnprintf.
// This function takes care of NULL terminating if the message
// is longer than the buffer.
//
#if FX_CORE_MODE==FX_CORE_KERNEL_MODE
status = RtlStringCbVPrintfA( debugMessageBuffer,
sizeof(debugMessageBuffer),
DebugMessage,
list );
#else
HRESULT hr;
hr = StringCbVPrintfA( debugMessageBuffer,
sizeof(debugMessageBuffer),
DebugMessage,
list );
if (HRESULT_FACILITY(hr) == FACILITY_WIN32)
{
status = WinErrorToNtStatus(HRESULT_CODE(hr));
}
else
{
status = SUCCEEDED(hr) ? STATUS_SUCCESS : STATUS_UNSUCCESSFUL;
}
#endif
if(!NT_SUCCESS(status)) {
#if FX_CORE_MODE==FX_CORE_KERNEL_MODE
DbgPrint ("WDFTrace: RtlStringCbVPrintfA failed 0x%x\n", status);
#else
OutputDebugString("WDFTrace: Unable to expand: ");
OutputDebugString(DebugMessage);
#endif
return;
}
if (DebugPrintLevel <= TRACE_LEVEL_ERROR ||
(DebugPrintLevel <= DebugLevel &&
((DebugPrintFlag & DebugFlag) == DebugPrintFlag))) {
#if FX_CORE_MODE==FX_CORE_KERNEL_MODE
DbgPrint("WDFTrace: %s\n", debugMessageBuffer);
#else
OutputDebugString("WDFTrace: ");
OutputDebugString(DebugMessage);
#endif
}
}
va_end(list);
return;
#else
UNREFERENCED_PARAMETER(FxDriverGlobals);
UNREFERENCED_PARAMETER(DebugPrintLevel);
UNREFERENCED_PARAMETER(DebugPrintFlag);
UNREFERENCED_PARAMETER(DebugMessage);
#endif
}
#endif