windows-nt/Source/XPSP1/NT/net/config/common/ncdebug/diagctx.cpp

109 lines
2.1 KiB
C++
Raw Normal View History

2020-09-26 03:20:57 -05:00
//+---------------------------------------------------------------------------
//
// Microsoft Windows
// Copyright (C) Microsoft Corporation, 1999.
//
// File: D I A G C T X . C P P
//
// Contents: Implements the optional diagnostic context used by
// CNetConfig.
//
// Notes:
//
// Author: shaunco 10 Feb 1999
//
//----------------------------------------------------------------------------
#include <pch.h>
#pragma hdrstop
#include "diagctx.h"
CDiagContext* g_pDiagCtx;
DWORD
CDiagContext::Flags () const
{
return (this) ? m_dwFlags : 0;
}
VOID
CDiagContext::SetFlags (
DWORD dwFlags /* DIAG_FLAGS */)
{
Assert (this);
m_dwFlags = dwFlags;
if ((dwFlags & DF_SHOW_CONSOLE_OUTPUT) && !m_pCtx)
{
m_pCtx = (DIAG_CONTEXT*) MemAlloc (sizeof(DIAG_CONTEXT));
}
}
VOID
CDiagContext::Printf (
TRACETAGID ttid,
PCSTR pszFormat,
...
)
{
va_list argList;
DWORD cch;
CHAR* pszPrintBuffer = NULL;
INT cchPrintBuffer;
Assert (pszFormat);
if (this && (m_dwFlags & DF_SHOW_CONSOLE_OUTPUT) && m_pCtx)
{
pszPrintBuffer = m_pCtx->szPrintBuffer;
cchPrintBuffer = sizeof(m_pCtx->szPrintBuffer);
}
else
{
#ifdef ENABLETRACE
if (!g_TraceTags[ttid].fOutputDebugString)
{
return;
}
static CHAR szPrintfBuffer [2048];
pszPrintBuffer = szPrintfBuffer;
cchPrintBuffer = sizeof(szPrintfBuffer);
#else
return;
#endif
}
Assert (pszPrintBuffer);
// Do the standard variable argument stuff
va_start (argList, pszFormat);
cch = _vsnprintf (pszPrintBuffer, cchPrintBuffer, pszFormat, argList);
va_end(argList);
TraceTag (ttid, pszPrintBuffer);
if (this && (m_dwFlags & DF_SHOW_CONSOLE_OUTPUT))
{
HANDLE hStdOut;
hStdOut = GetStdHandle(STD_OUTPUT_HANDLE);
if (INVALID_HANDLE_VALUE != hStdOut)
{
DWORD cbWritten;
if (WriteFile(hStdOut, pszPrintBuffer, cch * sizeof(CHAR), &cbWritten, NULL) == FALSE)
{
return;
}
}
}
}