205 lines
5 KiB
C++
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
|