reactos/sdk/lib/drivers/wdf/shared/object/dbgtrace.cpp
Victor Perevertkin 1f377076d7
[WDF] Fix KMDF so it can compile with ReactOS SDK
Not all files are included, but these are necessary to compile cdrom driver.
So far it can only be statically linked with drivers, a proper
implementation requires wdfldr helper driver
2020-11-03 00:06:27 +03:00

131 lines
2.8 KiB
C++

/*++
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