Windows NT 4.0 source code leak
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

182 lines
4.7 KiB

#include "all.h"
#pragma hdrstop
#include "dbg.h"
#ifdef DEBUG
#pragma message("informational warning: DEBUG build")
/* Global variables that hold the debug masks */
UINT DbgActnMask = DEF_DBG_MASK;
UINT AppZoneMask = DEF_APP_MASK; /* want at least 32 bits */
TCHAR const szModuleName[] = {"NTIE20: "}; /* leader for all debug output */
TCHAR const szEmpty[] = {""}; /* used as a dummy */
TCHAR const cszLogFileName[] = {"ntie20.log"}; /* filename of logfile to write debug output to */
TCHAR const cszCRLF[] = {"\r\n"};
/* internal private function prototype */
BOOL WINAPI DBGLogOutputDebugString(LPCTSTR pcsz);
/* _FormatMessage uses a static buffer to put the message into */
#define MAX_DEBUG_MESSAGE_SIZE 64*1024 /* arbitrary */
//#ifndef MAX_PATH
//#define MAX_PATH 260
//#endif
UINT WINAPI DBGSetDebugMask(UINT mask)
{
UINT wOld = AppZoneMask;
AppZoneMask = mask;
return wOld;
}
UINT WINAPI DBGSetDebugInternalMask(UINT mask)
{
UINT wOld = DbgActnMask;
DbgActnMask = mask;
return wOld;
}
UINT WINAPI DBGGetDebugMask()
{
return AppZoneMask;
}
UINT WINAPI DBGGetDebugInternalMask()
{
return DbgActnMask;
}
void WINAPI DBGAssertFailed(LPCTSTR pszFile, int line, LPCTSTR pszExpr, LPCTSTR pszMsg)
{
LPCTSTR psz;
TCHAR ach[256];
static TCHAR const szAssertFailed[] = TEXT("NTIE20: assert %s failed in %s, line %d: %s\r\n");
// Strip off path info from filename string, if present.
//
if (DbgActnMask & DM_ASSERT) // macro just checks if the assert failed
{
for (psz = pszFile + lstrlen(pszFile); psz != pszFile; psz=CharPrev(pszFile, psz))
{
if ((CharPrev(pszFile, psz)!= (psz-2)) && *(psz - 1) == TEXT('\\'))
break;
}
if (!pszMsg) pszMsg = szEmpty;
wsprintf(ach, szAssertFailed, pszExpr, psz, line, pszMsg);
OutputDebugString (szModuleName);
OutputDebugString (ach);
if (DbgActnMask & DM_LOG)
{
DBGLogOutputDebugString (szModuleName);
DBGLogOutputDebugString (ach);
}
}
if (DbgActnMask & DM_ASSERTTRAP)
DEBUG_BREAK
}
void __cdecl DBGDebugMsg(LPCTSTR pszMsg, ...)
{
TCHAR ach[5*MAX_PATH+40]; // Handles 5*largest path + slop for message
UINT ul = 0;
#ifdef WINNT
va_list ArgList;
va_start(ArgList, pszMsg);
try {
ul = wvsprintf(ach, pszMsg, ArgList);
} except (EXCEPTION_EXECUTE_HANDLER) {
OutputDebugString(TEXT("NTIE20: DebugMsg exception: "));
OutputDebugString(pszMsg);
if (DbgActnMask & DM_LOG)
{
DBGLogOutputDebugString (szModuleName);
DBGLogOutputDebugString (ach);
}
}
va_end(ArgList);
#else
ul = wvsprintf(ach, pszMsg, (LPVOID)(&pszMsg + 1));
#endif
if (!ul || ul && ach[ul-1] != '\n') /* append CRLF if appears there isnt one */
lstrcat(ach, cszCRLF);
OutputDebugString(szModuleName);
OutputDebugString(ach);
if (DbgActnMask & DM_LOG)
{
DBGLogOutputDebugString (szModuleName);
DBGLogOutputDebugString (ach);
}
}
/* DBGFormatMessage
* AssertMsg macro/function need to format and get
* at the args as well as the line and file info
*
* Arguments: series of args form of (argv, ...) as for printf
*
* Return: Pointer to buffer with string neatly formated via wvsprintf
*
* Comments: This is a static buffer that is reused, this is
* ugly, but necessary.
*/
LPCTSTR __cdecl DBGFormatMessage(LPCTSTR pszMsg, ...)
{
static unsigned char ach[MAX_DEBUG_MESSAGE_SIZE];
va_list ArgList;
va_start(ArgList, pszMsg);
wvsprintf(ach, pszMsg, ArgList);
va_end(ArgList);
return (ach);
}
/*
** DBGLogOutputDebugString()
** Write the contents of pcsz to the logfile.
**
** Arguments: null terminated buffer with string to write
**
** Returns: True | False
**
** Side Effects: none
*/
BOOL WINAPI DBGLogOutputDebugString(LPCTSTR pcsz)
{
BOOL bResult = FALSE;
UINT ucb;
TCHAR szLogFile[MAX_PATH_LEN];
ucb = GetWindowsDirectory(szLogFile, sizeof (szLogFile));
if (ucb > 0 && ucb < sizeof (szLogFile))
{
HANDLE hfLog;
lstrcat (szLogFile, "\\");
lstrcat (szLogFile, cszLogFileName);
hfLog = CreateFile(szLogFile, GENERIC_WRITE, 0, NULL, OPEN_ALWAYS,
FILE_FLAG_WRITE_THROUGH, NULL);
if (hfLog != INVALID_HANDLE_VALUE)
{
if (SetFilePointer(hfLog, 0, NULL, FILE_END) != INVALID_FILE_SIZE)
{
DWORD dwcbWritten;
bResult = WriteFile(hfLog, pcsz, lstrlen(pcsz), &dwcbWritten, NULL);
if (! CloseHandle(hfLog) && bResult)
bResult = FALSE;
}
}
}
return(bResult);
}
#endif // DEBUG