//+--------------------------------------------------------------------------- // // Microsoft Windows // Copyright (C) Microsoft Corporation, 1992 - 1993. // // File: debug.c // // Contents: Debugging support functions // // Classes: // // Functions: // // Note: This file is not compiled for retail builds // // History: 4-29-93 RichardW Created. // //---------------------------------------------------------------------------- // // For ease of debugging the SPMgr, all the debug support functions have // been stuck here. Basically, we read info from win.ini, since that allows // us to configure the debug level via a text file (and DOS, for example). // // Format is: // // win.ini // // [SPMgr] // DebugFlags=[<,Flag>]* // Package= // BreakFlags=[<,BreakFlags>]* // // WHERE: // Flag is one of the following: // Error, Warning, Trace, Verbose, BreakOnError, Helpers, // RefMon, Locator, WAPI, Init, Audit, Db, Lsa // // Package is the name of the dll implementing the package, e.g. // NTLM=3 // // BreakFlags will cause SPMgr to break, if BreakOnError is set in // DebugFlags: // InitBegin, InitEnd, Connect, Exception, Problem, Load // // #include "testgina.h" #include #include FILE * LogFile; // Debugging support functions. // These two functions do not exist in Non-Debug builds. They are wrappers // to the commnot functions (maybe I should get rid of that as well...) // that echo the message to a log file. //+--------------------------------------------------------------------------- // // Function: LogEvent // // Synopsis: Logs an event to the console and, optionally, a file. // // Effects: // // Arguments: [Mask] -- // [Format] -- // [Format] -- // // Requires: // // Returns: // // Signals: // // Modifies: // // Algorithm: // // History: 4-29-93 RichardW Created // // Notes: // //---------------------------------------------------------------------------- void LogEvent( long Mask, const char * Format, ...) { va_list ArgList; int Level = 0; int PrefixSize = 0; char szOutString[256]; long OriginalMask = Mask; if (1) { // // Make the prefix first: "Process.Thread> GINA-XXX" // PrefixSize = sprintf(szOutString, "%d.%d> %s: ", GetCurrentProcessId(), GetCurrentThreadId(), "TestGINA"); va_start(ArgList, Format); if (_vsnprintf(&szOutString[PrefixSize], sizeof(szOutString) - PrefixSize, Format, ArgList) < 0) { // // Less than zero indicates that the string could not be // fitted into the buffer. Output a special message indicating // that: // OutputDebugStringA("GINA!LogEvent: Could not pack string into 256 bytes\n"); } else { OutputDebugStringA(szOutString); } if (LogFile) { SYSTEMTIME stTime; FILETIME ftTime; FILETIME localtime; NtQuerySystemTime((PLARGE_INTEGER) &ftTime); FileTimeToLocalFileTime(&ftTime, &localtime); FileTimeToSystemTime(&localtime, &stTime); fprintf(LogFile, "%02d:%02d:%02d.%03d: %s\n", stTime.wHour, stTime.wMinute, stTime.wSecond, stTime.wMilliseconds, szOutString); fflush(LogFile); } } } void OpenLogFile(LPSTR pszLogFile) { LogFile = fopen(pszLogFile, "a"); if (!LogFile) { OutputDebugStringA("GINA: Could not open logfile for append"); OutputDebugStringA(pszLogFile); } LogEvent(0, "Log File Begins\n"); }