Leaked source code of windows server 2003
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.
 
 
 
 
 
 

105 lines
2.9 KiB

//*********************************************************************
//* Microsoft Windows **
//* Copyright (c) 1994-1998 Microsoft Corporation **
//*********************************************************************
// ############################################################################
// Debugging routines
#include "pch.hpp"
BOOL fInAssert=FALSE;
// ############################################################################
// DebugSz
//
// This function outputs debug string
//
// Created 1/28/96, Chris Kauffman
// ############################################################################
void DebugSz(PCSTR psz)
{
OutputDebugString(psz);
} // DebugSz
// ############################################################################
// Debug Printf to debug output screen
void Dprintf(PCSTR pcsz, ...)
{
#ifdef DEBUG
va_list argp;
char szBuf[1024];
va_start(argp, pcsz);
wvsprintf(szBuf, pcsz, argp);
DebugSz(szBuf);
va_end(argp);
#endif
} // Dprintf()
// ############################################################################
// Handle asserts
BOOL FAssertProc(PCSTR szFile, DWORD dwLine, PCSTR szMsg, DWORD dwFlags)
{
char szMsgEx[1024], szTitle[255], szFileName[MAX_PATH];
int id;
UINT fuStyle;
BOOL fAssertIntoDebugger = FALSE;
LPTSTR pszCommandLine = GetCommandLine();
HANDLE hAssertTxt;
//BYTE szTime[80];
CHAR szTime[80];
SYSTEMTIME st;
DWORD cbWritten;
// no recursive asserts
if (fInAssert)
{
DebugSz("***Recursive Assert***\r\n");
return(FALSE);
}
fInAssert = TRUE;
GetModuleFileName(NULL, szFileName, MAX_PATH);
wsprintf(szMsgEx,"%s:#%d\r\nProcess ID: %d %s, Thread ID: %d\r\n%s",
szFile,dwLine,GetCurrentProcessId(),szFileName,GetCurrentThreadId(),szMsg);
wsprintf(szTitle,"Assertion Failed");
fuStyle = MB_APPLMODAL | MB_ABORTRETRYIGNORE;
fuStyle |= MB_ICONSTOP;
DebugSz(szTitle);
DebugSz(szMsgEx);
// dump the assert into ASSERT.TXT
hAssertTxt = CreateFile("assert.txt", GENERIC_WRITE, 0, NULL, OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL | FILE_FLAG_WRITE_THROUGH, NULL);
if (INVALID_HANDLE_VALUE != hAssertTxt)
{
SetFilePointer(hAssertTxt, 0, NULL, FILE_END);
GetLocalTime(&st);
wsprintf(szTime, "\r\n\r\n%02d/%02d/%02d %d:%02d:%02d\r\n", st.wMonth, st.wDay, st.wYear, st.wHour, st.wMinute, st.wSecond);
WriteFile(hAssertTxt, szTime, lstrlen(szTime), &cbWritten, NULL);
WriteFile(hAssertTxt, szMsgEx, lstrlen(szMsgEx), &cbWritten, NULL);
CloseHandle(hAssertTxt);
}
id = MessageBox(NULL, szMsgEx, szTitle, fuStyle);
switch (id)
{
case IDABORT:
ExitProcess(0);
break;
case IDCANCEL:
case IDIGNORE:
break;
case IDRETRY:
fAssertIntoDebugger = TRUE;
break;
}
fInAssert = FALSE;
return(fAssertIntoDebugger);
} // AssertProc()