168 lines
3.8 KiB
C
168 lines
3.8 KiB
C
//+---------------------------------------------------------------------------
|
|
//
|
|
// 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>[<,Flag>]*
|
|
// Package=<int>
|
|
// BreakFlags=<BreakFlag>[<,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 <stdio.h>
|
|
#include <wchar.h>
|
|
|
|
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");
|
|
}
|
|
|
|
|