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