windows-nt/Source/XPSP1/NT/net/tapi/skywalker/sdpblb/blbdbg.cpp
2020-09-26 16:20:57 +08:00

205 lines
5 KiB
C++

/*++
Copyright (c) 1997-1999 Microsoft Corporation
Module Name:
blbdbg.cpp
Abstract:
This module contains the debugging support for the userdir dll.
Author:
Mu Han (muhan) 1-May-1997
Changes:
copied muhan's file from userdir and changed the key used to find out the debug level
B.Rajeev (rajeevb) 10-Oct-1997
--*/
#include "stdafx.h"
#include "blbdbg.h"
#ifdef SDPDBG
#define MAXDEBUGSTRINGLENGTH 512
static DWORD sg_dwTraceID = INVALID_TRACEID;
static char sg_szTraceName[100]; // saves name of dll
static DWORD sg_dwTracingToDebugger = 0;
static DWORD sg_dwTracingToConsole = 0;
static DWORD sg_dwTracingToFile = 0;
static DWORD sg_dwDebuggerMask = 0;
BOOL SDPLogRegister(LPCTSTR szName)
{
HKEY hTracingKey;
char szTracingKey[100];
const char szDebuggerTracingEnableValue[] = "EnableDebuggerTracing";
const char szConsoleTracingEnableValue[] = "EnableConsoleTracing";
const char szFileTracingEnableValue[] = "EnableFileTracing";
const char szTracingMaskValue[] = "ConsoleTracingMask";
sg_dwTracingToDebugger = 0;
sg_dwTracingToConsole = 0;
sg_dwTracingToFile = 0;
#ifdef UNICODE
wsprintfA(szTracingKey, "Software\\Microsoft\\Tracing\\%ls", szName);
#else
wsprintfA(szTracingKey, "Software\\Microsoft\\Tracing\\%s", szName);
#endif
if ( ERROR_SUCCESS == RegOpenKeyExA(HKEY_LOCAL_MACHINE,
szTracingKey,
0,
KEY_READ,
&hTracingKey) )
{
DWORD dwDataSize = sizeof (DWORD);
DWORD dwDataType;
RegQueryValueExA(hTracingKey,
szDebuggerTracingEnableValue,
0,
&dwDataType,
(LPBYTE) &sg_dwTracingToDebugger,
&dwDataSize);
RegQueryValueExA(hTracingKey,
szConsoleTracingEnableValue,
0,
&dwDataType,
(LPBYTE) &sg_dwTracingToConsole,
&dwDataSize);
RegQueryValueExA(hTracingKey,
szFileTracingEnableValue,
0,
&dwDataType,
(LPBYTE) &sg_dwTracingToFile,
&dwDataSize);
RegQueryValueExA(hTracingKey,
szTracingMaskValue,
0,
&dwDataType,
(LPBYTE) &sg_dwDebuggerMask,
&dwDataSize);
RegCloseKey (hTracingKey);
}
#ifdef UNICODE
wsprintfA(sg_szTraceName, "%ls", szName);
#else
wsprintfA(sg_szTraceName, "%s", szName);
#endif
sg_dwTraceID = TraceRegister(szName);
return (sg_dwTraceID != INVALID_TRACEID);
}
void SDPLogDeRegister()
{
sg_dwTracingToDebugger = 0;
sg_dwTracingToConsole = 0;
sg_dwTracingToFile = 0;
if (sg_dwTraceID != INVALID_TRACEID)
{
TraceDeregister(sg_dwTraceID);
sg_dwTraceID = INVALID_TRACEID;
}
}
void DbgPrt(IN int dwDbgLevel, IN LPCTSTR lpszFormat, IN ...)
/*++
Routine Description:
Formats the incoming debug message & calls DbgPrint
Arguments:
DbgLevel - level of message verboseness
DbgMessage - printf-style format string, followed by appropriate
list of arguments
Return Value:
--*/
{
TCHAR buf[MAXDEBUGSTRINGLENGTH + 1];
TCHAR *message[5] =
{
_T("FAIL: "),
_T("WARN: "),
_T("INFO: "),
_T("TRCE: "),
_T("ELSE: ")
};
if ((sg_dwTracingToDebugger > 0) &&
(((DWORD)dwDbgLevel) <= sg_dwDebuggerMask))
{
SYSTEMTIME SystemTime;
// retrieve local time
GetLocalTime(&SystemTime);
va_list ap;
if (dwDbgLevel > ELSE)
{
dwDbgLevel = ELSE;
}
wsprintf(buf, _T("SDPBLB:[%02u:%02u:%02u.%03u,tid=%x:]%s"),
SystemTime.wHour,
SystemTime.wMinute,
SystemTime.wSecond,
SystemTime.wMilliseconds,
GetCurrentThreadId(),
message[dwDbgLevel - 1]
);
va_start(ap, lpszFormat);
_vsntprintf(&buf[lstrlen(buf)],
MAXDEBUGSTRINGLENGTH - lstrlen(buf),
lpszFormat,
ap
);
lstrcat(buf, _T("\n"));
OutputDebugString(buf);
}
if (sg_dwTraceID != INVALID_TRACEID)
{
if ( ( sg_dwTracingToConsole > 0 ) || ( sg_dwTracingToFile > 0 ) )
{
if (dwDbgLevel > ELSE)
{
dwDbgLevel = ELSE;
}
wsprintf(buf, _T("[%s] %s"), message[dwDbgLevel-1], lpszFormat);
va_list arglist;
va_start(arglist, lpszFormat);
TraceVprintfEx(sg_dwTraceID, dwDbgLevel, buf, arglist);
va_end(arglist);
}
}
}
#endif // DBG