windows-nt/Source/XPSP1/NT/base/fs/utils/dfrg/errmsg.cpp
2020-09-26 16:20:57 +08:00

114 lines
3.3 KiB
C++

//=============================================================================*
// COPYRIGHT© 2001 Microsoft Corporation and Executive Software International, Inc.
//=============================================================================*
// File: ErrMsg.cpp
//=============================================================================*
#include "stdafx.h"
#include <windows.h>
#include "ErrMacro.h"
#include "Message.h"
#include "ErrLog.h"
#include "Dfrgres.h"
#include "IntFuncs.h"
#include "vString.hpp"
#include "GetDfrgRes.h" // to use the GetDfrgResHandle()
//This logfile capability is activated only for the engines.
#if defined(DFRGFAT) || defined(DFRGNTFS)
#include "LogFile.h"
extern BOOL bLogFile;
#endif
extern BOOL bPopups;
extern BOOL bIdentifiedErrorPath;
extern HINSTANCE hInst;
//-------------------------------------------------------------------*
// function: ErrorMessageBox
//
// returns: None
// note:
//-------------------------------------------------------------------*
BOOL
ErrorMessageBox(
TCHAR* cMsg,
TCHAR* cTitle
)
{
//Added cNewMsg code to take care of the case where cMsg == NULL, so that we put some message
//out instead of nothing.
TCHAR cNewMsg[256];
if(cMsg == NULL)
{
FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM, // source and processing options
NULL, // message source
NULL, // message identifier
NULL, // language identifier
cNewMsg, // message buffer
255, // maximum size of message buffer
NULL // array of message inserts
);
} else
{
wcscpy(cNewMsg, cMsg);
}
#ifndef OFFLINEDK
//Write the error to the error log.
WriteErrorToErrorLog(cNewMsg, -1, NULL);
//This logfile capability is activated only for the engines.
#if defined(DFRGFAT) || defined(DFRGNTFS)
//If the logfile for the test harness is enabled, then log it there too.
if(bLogFile){
WriteStringToLogFile(cNewMsg);
//return TRUE; //Have to bail out here so we don't print the messagebox below.
}
#endif
//If this is set for messageboxes (not IoStress) then pop up a messagebox too.
if(bPopups && !bIdentifiedErrorPath){
MessageBox(NULL, cNewMsg, cTitle, MB_ICONSTOP|MB_OK);
//Once an error message has been printed, don't print another.
bIdentifiedErrorPath = TRUE;
}
#endif
return TRUE;
}
//-------------------------------------------------------------------*
// function: FileBugReportMessage
//
// returns: Always TRUE
// FileBugReportMessage is identical to ErrorMessageBox, except that it puts up
// a generic message telling the user to give us a log file
// rather than pop up a message explaining the error.
// This function is used when there is a code error, not when it isn't a bug, such as
// when the user tells us to run on a volume that doesn't exist.
//-------------------------------------------------------------------*
BOOL
FileBugReportMessage(
TCHAR* cMsg,
TCHAR* cTitle
)
{
#ifndef OFFLINEDK
VString msg(IDS_FILE_BUG_MESSAGE, GetDfrgResHandle());
//Write the error to the error log.
WriteErrorToErrorLog(cMsg, -1, NULL);
//If this is set for messageboxes (not IoStress) then pop up a messagebox too.
if(bPopups && !bIdentifiedErrorPath){
MessageBox(NULL, msg.GetBuffer(), cTitle, MB_OK|MB_ICONSTOP);
//Once an error message has been printed, don't print another.
bIdentifiedErrorPath = TRUE;
}
#endif
return TRUE;
}