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