[commit] r2759 - in trunk: . GME/Gme GME/Lib/CrashRpt/bin GME/Lib/CrashRpt/bin/x64 GME/Lib/CrashRpt/include GME/Lib/CrashRpt/lib GME/Lib/CrashRpt/lib/x64 GME/MgaUtil Install
GMESRC Repository Notifications
gme-commit at list.isis.vanderbilt.edu
Fri Oct 19 13:41:47 CDT 2018
Author: ksmyth
Date: Fri Oct 19 13:41:47 2018
New Revision: 2759
Log:
CrashRpt 1403
Deleted:
trunk/GME/Lib/CrashRpt/bin/CrashRpt.dll
trunk/GME/Lib/CrashRpt/bin/CrashRptd.dll
trunk/GME/Lib/CrashRpt/bin/CrashRptd.pdb
trunk/GME/Lib/CrashRpt/bin/CrashSender.exe
trunk/GME/Lib/CrashRpt/bin/CrashSenderd.exe
trunk/GME/Lib/CrashRpt/bin/CrashSenderd.pdb
trunk/GME/Lib/CrashRpt/bin/x64/CrashRpt.dll
trunk/GME/Lib/CrashRpt/bin/x64/CrashRptd.dll
trunk/GME/Lib/CrashRpt/bin/x64/CrashSender.exe
trunk/GME/Lib/CrashRpt/bin/x64/CrashSenderd.exe
trunk/GME/Lib/CrashRpt/lib/CrashRpt.lib
trunk/GME/Lib/CrashRpt/lib/CrashRptd.lib
trunk/GME/Lib/CrashRpt/lib/x64/CrashRpt.lib
trunk/GME/Lib/CrashRpt/lib/x64/CrashRptd.lib
Modified:
trunk/.gitignore
trunk/GME/Gme/GME.vcxproj
trunk/GME/Gme/GMEApp.cpp
trunk/GME/Lib/CrashRpt/bin/crashrpt_lang.ini
trunk/GME/Lib/CrashRpt/bin/x64/crashrpt_lang.ini
trunk/GME/Lib/CrashRpt/include/CrashRpt.h
trunk/GME/MgaUtil/MgaLauncher.cpp
trunk/GME/MgaUtil/MgaUtil.vcxproj
trunk/Install/GME_bin.wxs
trunk/Install/GME_bundle.wxs
Modified: trunk/.gitignore
==============================================================================
--- trunk/.gitignore Fri Oct 19 13:41:42 2018 (r2758)
+++ trunk/.gitignore Fri Oct 19 13:41:47 2018 (r2759)
@@ -78,7 +78,6 @@
GME/Interfaces/dlldata.c
GME/Meta/Release/
GME/Mga/Release/
-GME/MgaUtil/CrashRpt.dll
GME/MgaUtil/Release/
GME/Common/Debug
GME/Console/Debug
Modified: trunk/GME/Gme/GME.vcxproj
==============================================================================
--- trunk/GME/Gme/GME.vcxproj Fri Oct 19 13:41:42 2018 (r2758)
+++ trunk/GME/Gme/GME.vcxproj Fri Oct 19 13:41:47 2018 (r2759)
@@ -102,8 +102,8 @@
<CustomBuildStep>
<Message>Copying required CrashRpt files</Message>
<Command>xcopy /Y/D/F ..\CSGUI\bin\Release\CSGUI.dll "$(OutDir)" && ^
-xcopy /Y/D/F ..\Lib\CrashRpt\bin\CrashRpt.dll "$(OutDir)" && ^
-xcopy /Y/D/F ..\Lib\CrashRpt\bin\CrashSender.exe "$(OutDir)" && ^
+xcopy /Y/D/F ..\Lib\CrashRpt\bin\CrashRpt1403.dll "$(OutDir)" && ^
+xcopy /Y/D/F ..\Lib\CrashRpt\bin\CrashSender1403.exe "$(OutDir)" && ^
xcopy /Y/D/F ..\Lib\CrashRpt\bin\crashrpt_lang.ini "$(OutDir)"
</Command>
<Outputs>$(OutDir)crashrpt_lang.ini;%(Outputs)</Outputs>
@@ -148,8 +148,8 @@
<CustomBuildStep>
<Message>Copying required CrashRpt files</Message>
<Command>xcopy /Y/D/F ..\CSGUI\bin\Release\CSGUI.dll "$(OutDir)" && ^
-xcopy /Y/D/F ..\Lib\CrashRpt\bin\x64\CrashRpt.dll "$(OutDir)" && ^
-xcopy /Y/D/F ..\Lib\CrashRpt\bin\x64\CrashSender.exe "$(OutDir)" && ^
+xcopy /Y/D/F ..\Lib\CrashRpt\bin\x64\CrashRpt1403.dll "$(OutDir)" && ^
+xcopy /Y/D/F ..\Lib\CrashRpt\bin\x64\CrashSender1403.exe "$(OutDir)" && ^
xcopy /Y/D/F ..\Lib\CrashRpt\bin\x64\crashrpt_lang.ini "$(OutDir)"
</Command>
<Outputs>$(OutDir)crashrpt_lang.ini;%(Outputs)</Outputs>
@@ -193,8 +193,8 @@
<CustomBuildStep>
<Message>Copying required CrashRpt files</Message>
<Command>xcopy /Y/D/F ..\CSGUI\bin\Debug\CSGUI.dll "$(OutDir)" && ^
-xcopy /Y/D/F ..\Lib\CrashRpt\bin\CrashRptd.dll "$(OutDir)" && ^
-xcopy /Y/D/F ..\Lib\CrashRpt\bin\CrashSenderd.exe "$(OutDir)" && ^
+xcopy /Y/D/F ..\Lib\CrashRpt\bin\CrashRpt1403.dll "$(OutDir)" && ^
+xcopy /Y/D/F ..\Lib\CrashRpt\bin\CrashSender1403.exe "$(OutDir)" && ^
xcopy /Y/D/F ..\Lib\CrashRpt\bin\crashrpt_lang.ini "$(OutDir)"
</Command>
<Outputs>$(OutDir)crashrpt_lang.ini;%(Outputs)</Outputs>
@@ -235,8 +235,8 @@
<CustomBuildStep>
<Message>Copying required CrashRpt files</Message>
<Command>xcopy /Y/D/F ..\CSGUI\bin\Debug\CSGUI.dll "$(OutDir)" && ^
-xcopy /Y/D/F ..\Lib\CrashRpt\bin\x64\CrashRptd.dll "$(OutDir)" && ^
-xcopy /Y/D/F ..\Lib\CrashRpt\bin\x64\CrashSenderd.exe "$(OutDir)" && ^
+xcopy /Y/D/F ..\Lib\CrashRpt\bin\x64\CrashRpt1403.dll "$(OutDir)" && ^
+xcopy /Y/D/F ..\Lib\CrashRpt\bin\x64\CrashSender1403.exe "$(OutDir)" && ^
xcopy /Y/D/F ..\Lib\CrashRpt\bin\x64\crashrpt_lang.ini "$(OutDir)"
</Command>
<Outputs>$(OutDir)crashrpt_lang.ini;%(Outputs)</Outputs>
Modified: trunk/GME/Gme/GMEApp.cpp
==============================================================================
--- trunk/GME/Gme/GMEApp.cpp Fri Oct 19 13:41:42 2018 (r2758)
+++ trunk/GME/Gme/GMEApp.cpp Fri Oct 19 13:41:47 2018 (r2759)
@@ -29,9 +29,11 @@
#include "CrashRpt.h"
#ifdef _DEBUG
-#pragma comment(lib, "CrashRptd.lib")
+#pragma comment(lib, "CrashRpt1403.lib")
+// https://msdn.microsoft.com/en-us/library/bb531344.aspx#BK_CRT
+#pragma comment(lib, "legacy_stdio_definitions.lib")
#else
-#pragma comment(lib, "CrashRpt.lib")
+#pragma comment(lib, "CrashRpt1403.lib")
#endif
#import "C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\mscorlib.tlb" no_implementation
Modified: trunk/GME/Lib/CrashRpt/bin/crashrpt_lang.ini
==============================================================================
Binary file (source and/or target). No diff available.
Modified: trunk/GME/Lib/CrashRpt/bin/x64/crashrpt_lang.ini
==============================================================================
Binary file (source and/or target). No diff available.
Modified: trunk/GME/Lib/CrashRpt/include/CrashRpt.h
==============================================================================
--- trunk/GME/Lib/CrashRpt/include/CrashRpt.h Fri Oct 19 13:41:42 2018 (r2758)
+++ trunk/GME/Lib/CrashRpt/include/CrashRpt.h Fri Oct 19 13:41:47 2018 (r2759)
@@ -1,41 +1,19 @@
/*************************************************************************************
- This file is a part of CrashRpt library.
+This file is a part of CrashRpt library.
+Copyright (c) 2003-2013 The CrashRpt project authors. All Rights Reserved.
- Copyright (c) 2003, Michael Carruth
- All rights reserved.
-
- Redistribution and use in source and binary forms, with or without modification,
- are permitted provided that the following conditions are met:
-
- * Redistributions of source code must retain the above copyright notice, this
- list of conditions and the following disclaimer.
-
- * Redistributions in binary form must reproduce the above copyright notice,
- this list of conditions and the following disclaimer in the documentation
- and/or other materials provided with the distribution.
-
- * Neither the name of the author nor the names of its contributors
- may be used to endorse or promote products derived from this software without
- specific prior written permission.
-
-
- THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY
- EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT
- SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
- INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
- TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
- BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
- STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+Use of this source code is governed by a BSD-style license
+that can be found in the License.txt file in the root of the source
+tree. All contributing project authors may
+be found in the Authors.txt file in the root of the source tree.
***************************************************************************************/
/*! \file CrashRpt.h
- * \brief Defines the interface for the CrashRpt.DLL.
- * \date 2003-2011
- * \author Michael Carruth
- * \author zeXspectrum
- */
+* \brief Defines the interface for the CrashRpt.DLL.
+* \date 2003
+* \author Michael Carruth
+* \author Oleg Krivtsov (zeXspectrum)
+*/
#ifndef _CRASHRPT_H_
#define _CRASHRPT_H_
@@ -45,16 +23,16 @@
// Define SAL macros to be empty if some old Visual Studio used
#ifndef __reserved
- #define __reserved
+#define __reserved
#endif
#ifndef __in
- #define __in
+#define __in
#endif
#ifndef __in_opt
- #define __in_opt
+#define __in_opt
#endif
#ifndef __out_ecount_z
- #define __out_ecount_z(x)
+#define __out_ecount_z(x)
#endif
#ifdef __cplusplus
@@ -66,229 +44,404 @@
#define CRASHRPTAPI(rettype) CRASHRPT_EXTERNC rettype WINAPI
//! Current CrashRpt version
-#define CRASHRPT_VER 1210
+#define CRASHRPT_VER 1403
/*! \defgroup CrashRptAPI CrashRpt Functions */
/*! \defgroup DeprecatedAPI Obsolete Functions */
/*! \defgroup CrashRptStructs CrashRpt Structures */
/*! \defgroup CrashRptWrappers CrashRpt Wrapper Classes */
-/*! \ingroup CrashRptAPI
- * \brief Client crash callback function prototype
- * \param[in] lpvState Currently not used, equals to NULL.
- *
- * \remarks
- *
- * The crash callback function is called when crash occurs. This way client application is
- * notified about the crash.
- *
- * It is generally unsafe to do complex actions (e.g. memory allocation, heap operations) inside of this callback.
- * The application state may be unstable.
- *
- * One reason the application may use this callback for is to close handles to open log files that the
- * application plans to include into the error report. Log files should be accessible for reading, otherwise
- * CrashRpt won't be able to include them into error report.
- *
- * The crash callback function should typically return \c TRUE to allow generate error report.
- * Returning \c FALSE will prevent crash report generation.
- *
- * The following example shows how to use the crash callback function.
- *
- * \code
- * // define the crash callback
- * BOOL CALLBACK CrashCallback(LPVOID lpvState)
- * {
- * // Do something...
- *
- * return TRUE;
- * }
- * \endcode
- *
- * \sa crAddFile2()
- */
+/*! \ingroup DeprecatedAPI
+* \brief Client crash callback function prototype
+* \param[in] lpvState Must be set to NULL.
+*
+* \remarks
+*
+* This function is deprecated, it is recommended to use \ref PFNCRASHCALLBACK()
+* instead.
+*
+* The crash callback function is called when crash occurs. This way client application is
+* notified about the crash.
+*
+* It is generally unsafe to do complex actions (e.g. memory allocation, heap operations) inside of this callback.
+* The application state may be unstable.
+*
+* One reason the application may use this callback for is to close handles to open log files that the
+* application plans to include into the error report. Files should be accessible for reading, otherwise
+* CrashRpt won't be able to include them into error report.
+*
+* It is also possible (but not recommended) to add files, properties, desktop screenshots,
+* registry keys inside of the crash callback function.
+*
+* The crash callback function should typically return \c TRUE to allow generate error report.
+* Returning \c FALSE will prevent crash report generation.
+*
+* The following example shows how to use the crash callback function.
+*
+* \code
+* // define the crash callback
+* BOOL CALLBACK CrashCallback(LPVOID lpvState)
+* {
+* // Do something...
+*
+* return TRUE;
+* }
+* \endcode
+*
+* \sa crAddFile2(), PFNCRASHCALLBACK()
+*/
typedef BOOL (CALLBACK *LPGETLOGFILE) (__reserved LPVOID lpvState);
-#ifndef _CRASHRPT_REMOVE_DEPRECATED
+// Exception types used in CR_EXCEPTION_INFO::exctype structure member.
+#define CR_SEH_EXCEPTION 0 //!< SEH exception.
+#define CR_CPP_TERMINATE_CALL 1 //!< C++ terminate() call.
+#define CR_CPP_UNEXPECTED_CALL 2 //!< C++ unexpected() call.
+#define CR_CPP_PURE_CALL 3 //!< C++ pure virtual function call (VS .NET and later).
+#define CR_CPP_NEW_OPERATOR_ERROR 4 //!< C++ new operator fault (VS .NET and later).
+#define CR_CPP_SECURITY_ERROR 5 //!< Buffer overrun error (VS .NET only).
+#define CR_CPP_INVALID_PARAMETER 6 //!< Invalid parameter exception (VS 2005 and later).
+#define CR_CPP_SIGABRT 7 //!< C++ SIGABRT signal (abort).
+#define CR_CPP_SIGFPE 8 //!< C++ SIGFPE signal (flotating point exception).
+#define CR_CPP_SIGILL 9 //!< C++ SIGILL signal (illegal instruction).
+#define CR_CPP_SIGINT 10 //!< C++ SIGINT signal (CTRL+C).
+#define CR_CPP_SIGSEGV 11 //!< C++ SIGSEGV signal (invalid storage access).
+#define CR_CPP_SIGTERM 12 //!< C++ SIGTERM signal (termination request).
+
-/*! \ingroup DeprecatedAPI
- * \brief Installs exception handlers for the current process.
- *
- * \param[in] pfnCallback Client crash callback.
- * \param[in] pszEmailTo Email address to send crash report to.
- * \param[in] pszEmailSubject Subject of the E-mail message.
- *
- * \return Always returns NULL.
- *
- * \deprecated
- * This function is deprecated. It is still supported for compatiblity with
- * older versions of CrashRpt, however consider using crInstall() function instead.
- * This function is currently implemented as a wrapper for crInstall().
- *
- * \remarks
- *
- * This function installs SEH exception filter for the caller process.
- * It also installs various C++ exception/error handlers. For the list of handlers,
- * please see crInstall().
- *
- * \a pfnCallback defines the callback function that is called on crash. This parameter can be NULL.
- *
- * \a pszEmailTo should be the valid email address of recipient.
- *
- * \a pszEmailSubject is the email subject. If this parameter is NULL, the default subject is
- * generated.
- *
- * This function assumes that CrashSender.exe is located in the same directory as CrashRpt.dll loaded
- * by the caller process. To specify different directory, use crInstall().
- *
- * On crash, the error report is sent as E-mail message using address and subject passed to the
- * function as \a pszEmailTo and \a pszEmailSubject parameters, respectively.
- *
- * InstallW() and InstallA() are wide-character and multibyte-character versions of Install().
- * The Install() macro defines character set independent mapping for these functions.
- *
- */
-
-CRASHRPTAPI(LPVOID)
-InstallW(
- __in_opt LPGETLOGFILE pfnCallback,
- LPCWSTR pszEmailTo,
- LPCWSTR pszEmailSubject
- );
+/*! \ingroup CrashRptStructs
+* \brief This structure contains information about the crash.
+*
+* The information provided by this structure includes the exception type, exception code,
+* exception pointers and so on. These are needed to generate crash minidump file and
+* provide the developer with other information about the error. This structure is used by
+* the crGenerateErrorReport() function. Pointer to this structure is also passed to the
+* crash callback function (see the \ref PFNCRASHCALLBACK() function prototype).
+*
+* Structure members details are provided below:
+*
+* \b cb [in]
+*
+* This must contain the size of this structure in bytes.
+*
+* \b pexcptrs [in, optional]
+*
+* Should contain the exception pointers. If this parameter is NULL,
+* the current CPU state is used to generate exception pointers.
+*
+* \b exctype [in]
+*
+* The type of exception. This parameter may be one of the following:
+* - \ref CR_SEH_EXCEPTION SEH (Structured Exception Handling) exception
+* - \ref CR_CPP_TERMINATE_CALL C++ terminate() function call
+* - \ref CR_CPP_UNEXPECTED_CALL C++ unexpected() function call
+* - \ref CR_CPP_PURE_CALL Pure virtual method call (Visual Studio .NET 2003 and later)
+* - \ref CR_CPP_NEW_OPERATOR_ERROR C++ 'new' operator error (Visual Studio .NET 2003 and later)
+* - \ref CR_CPP_SECURITY_ERROR Buffer overrun (Visual Studio .NET 2003 only)
+* - \ref CR_CPP_INVALID_PARAMETER Invalid parameter error (Visual Studio 2005 and later)
+* - \ref CR_CPP_SIGABRT C++ SIGABRT signal
+* - \ref CR_CPP_SIGFPE C++ floating point exception
+* - \ref CR_CPP_SIGILL C++ illegal instruction
+* - \ref CR_CPP_SIGINT C++ SIGINT signal
+* - \ref CR_CPP_SIGSEGV C++ invalid storage access
+* - \ref CR_CPP_SIGTERM C++ termination request
+*
+* \b code [in, optional]
+*
+* Used if \a exctype is \ref CR_SEH_EXCEPTION and represents the SEH exception code.
+* If \a pexptrs is NULL, this value is used when generating exception information for initializing
+* \c pexptrs->ExceptionRecord->ExceptionCode member, otherwise it is ignored.
+*
+* \b fpe_subcode [in, optional]
+*
+* Used if \a exctype is equal to \ref CR_CPP_SIGFPE. It defines the floating point
+* exception subcode (see \c signal() function ducumentation in MSDN).
+*
+* \b expression, \b function, \b file and \b line [in, optional]
+*
+* These parameters are used when \a exctype is \ref CR_CPP_INVALID_PARAMETER.
+* These members are typically non-zero when using debug version of CRT.
+*
+* \b bManual [in]
+*
+* Since v.1.2.4, \a bManual parameter should be equal to TRUE if the report is generated manually.
+* The value of \a bManual parameter affects the automatic application restart behavior. If the application
+* restart is requested by the \ref CR_INST_APP_RESTART flag of CR_INSTALL_INFO::dwFlags structure member,
+* and if \a bManual is FALSE, the application will be
+* restarted after error report generation. If \a bManual is TRUE, the application won't be restarted.
+*
+* \b hSenderProcess [out]
+*
+* As of v.1.2.8, \a hSenderProcess parameter will contain the handle to the <b>CrashSender.exe</b> process when
+* \ref crGenerateErrorReport function returns. The caller may use this handle to wait until <b>CrashSender.exe</b>
+* process exits and check the exit code. When the handle is not needed anymore, release it with the \b CloseHandle() function.
+*/
-/*! \ingroup DeprecatedAPI
- * \copydoc InstallW()
- */
+typedef struct tagCR_EXCEPTION_INFO
+{
+ WORD cb; //!< Size of this structure in bytes; should be initialized before using.
+ PEXCEPTION_POINTERS pexcptrs; //!< Exception pointers.
+ int exctype; //!< Exception type.
+ DWORD code; //!< Code of SEH exception.
+ unsigned int fpe_subcode; //!< Floating point exception subcode.
+ const wchar_t* expression; //!< Assertion expression.
+ const wchar_t* function; //!< Function in which assertion happened.
+ const wchar_t* file; //!< File in which assertion happened.
+ unsigned int line; //!< Line number.
+ BOOL bManual; //!< Flag telling if the error report is generated manually or not.
+ HANDLE hSenderProcess; //!< Handle to the CrashSender.exe process.
+}
+CR_EXCEPTION_INFO;
+
+typedef CR_EXCEPTION_INFO* PCR_EXCEPTION_INFO;
-CRASHRPTAPI(LPVOID)
-InstallA(
- __in_opt LPGETLOGFILE pfnCallback,
- LPCSTR pszEmailTo,
- LPCSTR pszEmailSubject
- );
-
-/*! \brief Character set-independent mapping of InstallW() and InstallA() functions.
- * \ingroup DeprecatedAPI
- */
+// Stages of crash report generation (used by the crash callback function).
+#define CR_CB_STAGE_PREPARE 10 //!< Stage after exception pointers've been retrieved.
+#define CR_CB_STAGE_FINISH 20 //!< Stage after the launch of CrashSender.exe process.
+
+/*! \ingroup CrashRptStructs
+* \struct CR_CRASH_CALLBACK_INFOW()
+* \brief This structure contains information passed to crash callback function PFNCRASHCALLBACK().
+*
+* \remarks
+*
+* The information contained in this structure may be used by the crash callback function
+* to determine what type of crash has occurred and perform some action. For example,
+* the client application may prefer to continue its execution on some type of crash, and
+* terminate itself on another type of crash.
+*
+* Below, the stucture fields are described:
+*
+* \b cb [in]
+*
+* This contains the size of this structure in bytes.
+*
+* \b nStage [in]
+*
+* This field specifies the crash report generation stage. The callback function
+* can be called once per each stage (depending on callback function's return value).
+* Currently, there are two stages:
+* - \ref CR_CB_STAGE_PREPARE Stage after exception pointers've been retrieved.
+* - \ref CR_CB_STAGE_FINISH Stage after the launch of CrashSender.exe process.
+*
+* \b pszErrorReportFolder [in]
+*
+* This field contains the absolute path to the directory containing uncompressed
+* crash report files.
+*
+* \b pExceptionInfo [in]
+*
+* This field contains a pointer to \ref CR_EXCEPTION_INFO structure.
+*
+* \b pUserParam [in, optional]
+*
+* This is a pointer to user-specified data passed to the crSetCrashCallback() function
+* as \b pUserParam argument.
+*
+* \b bContinueExecution [in, out]
+*
+* This field is set to FALSE by default. The crash callback function may set it
+* to true if it wants to continue its execution after crash report generation
+* (otherwise the program will be terminated).
+*
+* \ref CR_CRASH_CALLBACK_INFOW and \ref CR_CRASH_CALLBACK_INFOA are
+* wide-character and multi-byte character versions of \ref CR_CRASH_CALLBACK_INFO
+* structure. In your program, use the \ref CR_CRASH_CALLBACK_INFO typedef which
+* is a character-set-independent version of the structure name.
+*
+* \sa PFNCRASHCALLBACK()
+*/
+typedef struct tagCR_CRASH_CALLBACK_INFOW
+{
+ WORD cb; //!< Size of this structure in bytes.
+ int nStage; //!< Stage.
+ LPCWSTR pszErrorReportFolder; //!< Directory where crash report files are located.
+ CR_EXCEPTION_INFO* pExceptionInfo; //!< Pointer to information about the crash.
+ LPVOID pUserParam; //!< Pointer to user-defined data.
+ BOOL bContinueExecution; //!< Whether to terminate the process (the default) or to continue program execution.
+}
+CR_CRASH_CALLBACK_INFOW;
+
+/*! \ingroup CrashRptStructs
+* \struct CR_CRASH_CALLBACK_INFOA
+* \copydoc CR_CRASH_CALLBACK_INFOW
+*/
+typedef struct tagCR_CRASH_CALLBACK_INFOA
+{
+ WORD cb; //!< Size of this structure in bytes.
+ int nStage; //!< Stage.
+ LPCSTR pszErrorReportFolder; //!< Directory where crash report files are located.
+ CR_EXCEPTION_INFO* pExceptionInfo; //!< Pointer to information about the crash.
+ LPVOID pUserParam; //!< Pointer to user-defined data.
+ BOOL bContinueExecution; //!< Whether to terminate the process (the default) or to continue program execution.
+}
+CR_CRASH_CALLBACK_INFOA;
+
+/*! \brief Character set-independent mapping of CR_CRASH_CALLBACK_INFOW and CR_CRASH_CALLBACK_INFOA structures.
+* \ingroup CrashRptStructs
+*/
#ifdef UNICODE
-#define Install InstallW
+typedef CR_CRASH_CALLBACK_INFOW CR_CRASH_CALLBACK_INFO;
#else
-#define Install InstallA
-#endif //UNICODE
+typedef CR_CRASH_CALLBACK_INFOA CR_CRASH_CALLBACK_INFO;
+#endif // UNICODE
+// Constants that may be returned by the crash callback function.
+#define CR_CB_CANCEL 0 //!< Cancel crash report generation on the current stage.
+#define CR_CB_DODEFAULT 1 //!< Proceed to the next stages of crash report generation without calling crash callback function.
+#define CR_CB_NOTIFY_NEXT_STAGE 2 //!< Proceed and call the crash callback for the next stage.
-/*! \ingroup DeprecatedAPI
- * \brief Uninstalls the exception filters set up by Install().
- *
- * \param[in] lpState State information returned from Install(), ignored and should be NULL.
- *
- * \deprecated
- * This function is deprecated. It is still supported for compatiblity with
- * older versions of CrashRpt, however consider using crUninstall() function instead.
- * This function is implemented as a wrapper for crUninstall().
- *
- * \remarks
- *
- * Call this function on application exit to uninstall all previously installed exception
- * handlers.
- *
- */
-
-CRASHRPTAPI(void)
-Uninstall(
- __reserved LPVOID lpState
- );
-
-/*! \ingroup DeprecatedAPI
- * \brief Adds a file to the crash report.
- *
- * \param[in] lpState State information returned from Install(), ignored and should be NULL.
- * \param[in] pszFile Fully qualified file name.
- * \param[in] pszDesc Description of the file, used by the Error Report Details dialog.
- *
- * \deprecated
- * This function is deprecated. It is still supported for compatiblity with
- * older versions of CrashRpt, however consider using crAddFile2() function instead.
- * This function is implemented as a wrapper for crAddFile2().
- *
- * \remarks
- *
- * This function can be called anytime after Install() to add one or more
- * files to the generated crash report.
- *
- * \a pszFile should be a valid absolute path of a file to add to crash report.
- *
- * \a pszDesc is a description of a file. It can be NULL.
- *
- * Function fails if \a pszFile doesn't exist at the moment of function call.
- *
- * AddFileW() and AddFileA() are wide-character and multibyte-character versions of AddFile().
- * The AddFile() macro defines character set independent mapping for these functions.
- *
- */
-
-CRASHRPTAPI(void)
-AddFileW(
- __reserved LPVOID lpState,
- LPCWSTR pszFile,
- LPCWSTR pszDesc
- );
+/*! \ingroup CrashRptAPI
+* \brief Client crash callback function prototype.
+* \param[in] pInfo Points to information about the crash.
+*
+* \remarks
+*
+* The crash callback function is called when a crash occurs. This way client application is
+* notified about the crash.
+*
+* Crash information is passed by CrashRpt to the callback function through the \b pInfo parameter as
+* a pointer to \ref CR_CRASH_CALLBACK_INFO structure. See below for a code example.
+*
+* It is generally unsafe to do complex actions (e.g. memory allocation, heap operations) inside of this callback.
+* The application state may be unstable.
+*
+* One reason the application may use this callback for is to close handles to open log files that the
+* application plans to include into the error report. Files should be accessible for reading, otherwise
+* CrashRpt won't be able to include them into error report.
+*
+* It is also possible (but not recommended) to add files (see crAddFile2()),
+* properties (see crAddProperty()), desktop screenshots (see crAddScreenshot2())
+* and registry keys (see crAddRegKey()) inside of the crash callback function.
+*
+* By default, CrashRpt terminates the client application after crash report generation and
+* launching the <i>CrashSender.exe</i> process. However, it is possible to continue program
+* execution after crash report generation by seting \ref CR_CRASH_CALLBACK_INFO::bContinueExecution
+* structure field to \a TRUE.
+*
+* The crash report generation consists of several stages. First, exception pointers are retrieved
+* and the callback function is called for the first time. The callback function may check the
+* retrieved exception information and decide wheter to proceed with crash report generation or to
+* continue client program execution. On the next stage, the \a CrashSender.exe
+* process is launched and the crash callback function is (optionally) called for the second time.
+* Further crash report data collection and delivery work is performed in \a CrashSender.exe process.
+* The crash callback may use the provided handle to \a CrashSender.exe process to wait until it exits.
+*
+* The crash callback function should typically return \ref CR_CB_DODEFAULT constant to proceed
+* with error report generation without being called back on the next stage(s). Returning the
+* \ref CR_CB_NOTIFY_NEXT_STAGE constant causes CrashRpt to call the crash callback function on the next
+* stage, too. Returning \ref CR_CB_CANCEL constant will prevent further stage(s) of crash report generation.
+*
+* \ref PFNCRASHCALLBACKW() and \ref PFNCRASHCALLBACKA() are
+* wide-character and multi-byte character versions of \ref PFNCRASHCALLBACK()
+* function.
+*
+* The following code example shows the simplest way of using the crash callback function:
+*
+* \code
+* // Define the crash callback
+* int CALLBACK CrashCallback(CR_CRASH_CALLBACK_INFO* pInfo)
+* {
+*
+* // Do something...
+*
+* // Proceed with crash report generation.
+* // This return code also makes CrashRpt to not call this callback function for
+* // the next crash report generation stage.
+* return CR_CB_DODEFAULT;
+* }
+* \endcode
+*
+* The following code example shows how to use the crash callback function to be notified
+* on every stage of crash report generation:
+*
+* \code
+* // Define the crash callback
+* int CALLBACK CrashCallback(CR_CRASH_CALLBACK_INFO* pInfo)
+* {
+*
+* // We want to continue program execution after crash report generation
+* pInfo->bContinueExecution = TRUE;
+*
+* switch(pInfo->nStage)
+* {
+* case CR_CB_STAGE_PREPARE:
+* // do something
+* break;
+* case CR_CB_STAGE_FINISH:
+* // do something
+* break;
+* }
+*
+* // Proceed to the next stage.
+* return CR_CB_NOTIFY_NEXT_STAGE;
+* }
+* \endcode
+*
+* \sa CR_CRASH_CALLBACK_INFO, crSetCrashCallback(), crAddFile2(), crAddProperty(), crAddScreenshot2(), crAddRegKey()
+*/
+typedef int (CALLBACK *PFNCRASHCALLBACKW) (CR_CRASH_CALLBACK_INFOW* pInfo);
-/*! \ingroup DeprecatedAPI
- *
- * \copydoc AddFileW()
- */
-
-CRASHRPTAPI(void)
-AddFileA(
- __reserved LPVOID lpState,
- LPCSTR pszFile,
- LPCSTR pszDesc
- );
-
-/*! \brief Character set-independent mapping of AddFileW() and AddFileA() functions.
- * \ingroup DeprecatedAPI
- */
+/*! \ingroup CrashRptAPI
+* \copydoc PFNCRASHCALLBACKW()
+*/
+typedef int (CALLBACK *PFNCRASHCALLBACKA) (CR_CRASH_CALLBACK_INFOA* pInfo);
+
+/*! \brief Character set-independent mapping of \ref PFNCRASHCALLBACKW() and \ref PFNCRASHCALLBACKA() function prototrypes.
+* \ingroup CrashRptStructs
+*/
#ifdef UNICODE
-#define AddFile AddFileW
+typedef PFNCRASHCALLBACKW PFNCRASHCALLBACK;
#else
-#define AddFile AddFileA
-#endif //UNICODE
+typedef PFNCRASHCALLBACKA PFNCRASHCALLBACK;
+#endif // UNICODE
+
+/*! \ingroup CrashRptAPI
+* \brief Sets the crash callback function.
+*
+* \return This function returns zero if succeeded. Use crGetLastErrorMsg() to retrieve the error message on fail.
+*
+* \param[in] pfnCallbackFunc Pointer to the crash callback function.
+* \param[in] lpParam User defined parameter. Optional.
+*
+* \remarks
+*
+* Use this to set the crash callback function that will be called on crash. This function
+* is available since v.1.4.0.
+*
+* For the crash callback function prototype, see documentation for PFNCRASHCALLBACK().
+*
+* Optional \b lpParam parameter can be a pointer to user-defined data. It will be passed to the
+* crash callback function as \ref CR_CRASH_CALLBACK_INFO::pUserParam structure member.
+*
+* \sa
+* PFNCRASHCALLBACK()
+*/
+
+CRASHRPTAPI(int)
+crSetCrashCallbackW(
+ PFNCRASHCALLBACKW pfnCallbackFunc,
+ LPVOID lpParam
+ );
+/*! \ingroup CrashRptAPI
+* \copydoc crSetCrashCallbackW()
+*/
+CRASHRPTAPI(int)
+crSetCrashCallbackA(
+ PFNCRASHCALLBACKA pfnCallbackFunc,
+ LPVOID lpParam
+ );
-/*! \ingroup DeprecatedAPI
- * \brief Generates the crash report.
- *
- * \param[in] lpState State information returned from Install(), ignored and should be NULL.
- * \param[in] pExInfo Pointer to an EXCEPTION_POINTERS structure, can be NULL.
- *
- * \deprecated
- * This function is deprecated. It is still supported for compatiblity with
- * older versions of CrashRpt, however consider using crGenerateErrorReport() function instead.
- * This function is implemented as a wrapper for crGenerateErrorReport().
- *
- * \remarks
- *
- * Call this function to manually generate a crash report.
- *
- * The crash report contains the crash minidump, crash description in XML format and
- * (optionally) additional files.
- *
- * \a pExInfo defines the exception pointers for generating crash minidump file.
- * If \a pExInfo is NULL, current CPU state is used to create exception pointers.
- *
- * This function generates the error report and returns control to the caller. It doesn't
- * terminate the caller process.
- *
- */
-
-CRASHRPTAPI(void)
-GenerateErrorReport(
- __reserved LPVOID lpState,
- PEXCEPTION_POINTERS pExInfo
- );
-#endif //_CRASHRPT_REMOVE_DEPRECATED
+/*! \brief Character set-independent mapping of crSetCrashCallbackW() and crSetCrashCallbackA() functions.
+* \ingroup CrashRptAPI
+*/
+#ifdef UNICODE
+#define crSetCrashCallback crSetCrashCallbackW
+#else
+#define crSetCrashCallback crSetCrashCallbackA
+#endif //UNICODE
// Array indices for CR_INSTALL_INFO::uPriorities.
#define CR_HTTP 0 //!< Send error report via HTTP (or HTTPS) connection.
@@ -299,288 +452,332 @@
#define CR_NEGATIVE_PRIORITY ((UINT)-1)
// Flags for CR_INSTALL_INFO::dwFlags
-#define CR_INST_STRUCTURED_EXCEPTION_HANDLER 0x1 //!< Install SEH handler (deprecated name, use \ref CR_INST_SEH_EXCEPTION_HANDLER instead).
-#define CR_INST_SEH_EXCEPTION_HANDLER 0x1 //!< Install SEH handler.
-#define CR_INST_TERMINATE_HANDLER 0x2 //!< Install terminate handler.
-#define CR_INST_UNEXPECTED_HANDLER 0x4 //!< Install unexpected handler.
-#define CR_INST_PURE_CALL_HANDLER 0x8 //!< Install pure call handler (VS .NET and later).
-#define CR_INST_NEW_OPERATOR_ERROR_HANDLER 0x10 //!< Install new operator error handler (VS .NET and later).
-#define CR_INST_SECURITY_ERROR_HANDLER 0x20 //!< Install security error handler (VS .NET and later).
-#define CR_INST_INVALID_PARAMETER_HANDLER 0x40 //!< Install invalid parameter handler (VS 2005 and later).
-#define CR_INST_SIGABRT_HANDLER 0x80 //!< Install SIGABRT signal handler.
-#define CR_INST_SIGFPE_HANDLER 0x100 //!< Install SIGFPE signal handler.
-#define CR_INST_SIGILL_HANDLER 0x200 //!< Install SIGILL signal handler.
-#define CR_INST_SIGINT_HANDLER 0x400 //!< Install SIGINT signal handler.
-#define CR_INST_SIGSEGV_HANDLER 0x800 //!< Install SIGSEGV signal handler.
+#define CR_INST_STRUCTURED_EXCEPTION_HANDLER 0x1 //!< Install SEH handler (deprecated name, use \ref CR_INST_SEH_EXCEPTION_HANDLER instead).
+#define CR_INST_SEH_EXCEPTION_HANDLER 0x1 //!< Install SEH handler.
+#define CR_INST_TERMINATE_HANDLER 0x2 //!< Install terminate handler.
+#define CR_INST_UNEXPECTED_HANDLER 0x4 //!< Install unexpected handler.
+#define CR_INST_PURE_CALL_HANDLER 0x8 //!< Install pure call handler (VS .NET and later).
+#define CR_INST_NEW_OPERATOR_ERROR_HANDLER 0x10 //!< Install new operator error handler (VS .NET and later).
+#define CR_INST_SECURITY_ERROR_HANDLER 0x20 //!< Install security error handler (VS .NET and later).
+#define CR_INST_INVALID_PARAMETER_HANDLER 0x40 //!< Install invalid parameter handler (VS 2005 and later).
+#define CR_INST_SIGABRT_HANDLER 0x80 //!< Install SIGABRT signal handler.
+#define CR_INST_SIGFPE_HANDLER 0x100 //!< Install SIGFPE signal handler.
+#define CR_INST_SIGILL_HANDLER 0x200 //!< Install SIGILL signal handler.
+#define CR_INST_SIGINT_HANDLER 0x400 //!< Install SIGINT signal handler.
+#define CR_INST_SIGSEGV_HANDLER 0x800 //!< Install SIGSEGV signal handler.
#define CR_INST_SIGTERM_HANDLER 0x1000 //!< Install SIGTERM signal handler.
-#define CR_INST_ALL_EXCEPTION_HANDLERS 0 //!< Install all possible exception handlers.
-#define CR_INST_CRT_EXCEPTION_HANDLERS 0x1FFE //!< Install exception handlers for the linked CRT module.
+#define CR_INST_ALL_POSSIBLE_HANDLERS 0x1FFF //!< Install all possible exception handlers.
+#define CR_INST_CRT_EXCEPTION_HANDLERS 0x1FFE //!< Install exception handlers for the linked CRT module.
-#define CR_INST_NO_GUI 0x2000 //!< Do not show GUI, send report silently (use for non-GUI apps only).
-#define CR_INST_HTTP_BINARY_ENCODING 0x4000 //!< Use multi-part HTTP uploads with binary attachment encoding.
-#define CR_INST_DONT_SEND_REPORT 0x8000 //!< Don't send error report immediately, just save it locally.
-#define CR_INST_APP_RESTART 0x10000 //!< Restart the application on crash.
-#define CR_INST_NO_MINIDUMP 0x20000 //!< Do not include minidump file to crash report.
-#define CR_INST_SEND_QUEUED_REPORTS 0x40000 //!< CrashRpt should send error reports that are waiting to be delivered.
-#define CR_INST_STORE_ZIP_ARCHIVES 0x80000 //!< CrashRpt should store both uncompressed error report files and ZIP archives.
+#define CR_INST_NO_GUI 0x2000 //!< Do not show GUI, send report silently (use for non-GUI apps only).
+#define CR_INST_HTTP_BINARY_ENCODING 0x4000 //!< Deprecated, do not use.
+#define CR_INST_DONT_SEND_REPORT 0x8000 //!< Don't send error report immediately, just save it locally.
+#define CR_INST_APP_RESTART 0x10000 //!< Restart the application on crash.
+#define CR_INST_NO_MINIDUMP 0x20000 //!< Do not include minidump file to crash report.
+#define CR_INST_SEND_QUEUED_REPORTS 0x40000 //!< CrashRpt should send error reports that are waiting to be delivered.
+#define CR_INST_STORE_ZIP_ARCHIVES 0x80000 //!< CrashRpt should store both uncompressed error report files and ZIP archives.
+#define CR_INST_SEND_MANDATORY 0x100000 //!< This flag removes the "Close" and "Other actions" buttons from Error Report dialog, thus making the sending procedure mandatory for user.
+#define CR_INST_SHOW_ADDITIONAL_INFO_FIELDS 0x200000 //!< Makes "Your E-mail" and "Describe what you were doing when the problem occurred" fields of Error Report dialog always visible.
+#define CR_INST_ALLOW_ATTACH_MORE_FILES 0x400000 //!< Adds an ability for user to attach more files to crash report by clicking "Attach More File(s)" item from context menu of Error Report Details dialog.
+#define CR_INST_AUTO_THREAD_HANDLERS 0x800000 //!< If this flag is set, installs exception handlers for newly created threads automatically.
/*! \ingroup CrashRptStructs
- * \struct CR_INSTALL_INFOW()
- * \brief This structure defines the general information used by crInstall()
- *
- * \remarks
- *
- * \ref CR_INSTALL_INFOW and \ref CR_INSTALL_INFOA structures are wide-character and multi-byte character
- * versions of \ref CR_INSTALL_INFO. \ref CR_INSTALL_INFO typedef defines character set independent mapping.
- *
- * \b cb [in, required]
- *
- * This must contain the size of this structure in bytes.
- *
- * \b pszAppName [in, optional]
- *
- * This is the friendly name of the client application. The application name is
- * displayed in the Error Report dialog. If this parameter is NULL, the name of EXE file
- * that was used to start caller process becomes the application name.
- *
- * \b pszAppVersion [in, optional]
- *
- * Should be the application version. Example: "1.0.1".
- *
- * If this equals to NULL, product version is extracted from the executable file which started
- * the caller process, and this product version is used as application version. If the executable file
- * doesn's have a version info resource, the \ref crInstall() function will fail.
- *
- * \b pszEmailTo [in, optional]
- *
- * This is the email address of the recipient of error reports, for example
- * "name at example.com". If this equals to NULL, the crash report won't be sent using E-mail client.
- *
- * Keep this NULL if you plan to use large error reports (more than several MB in size), because
- * large emails may be rejected by the mail server.
- *
- * To define a custom port for SMTP connection, use the following address format: "user at example.com:port",
- * where \a port is the placeholder for the port number.
- *
- * \b pszEmailSubject [in, optional]
- *
- * This is the subject of the email message. If this parameter is NULL,
- * the default subject of form '[app_name] [app_version] Error Report' is generated.
- *
- * \a pszUrl is the URL of a server-side script that would receive crash report data via HTTP or HTTPS
- * connection. If this parmeter is NULL, HTTP(S) connection won't be used to send crash reports. For
- * example of a server-side script that can receive crash reports, see \ref sending_error_reports.
- *
- * HTTP(S) transport is the recommended way of sending large error reports (more than several MB in size).
- * To define a custom port for HTTP(S) connection, use the following URL format: "http://example.com[:port]/crashrpt.php" or
- * "https://example.com[:port]/crashrpt.php", where optional \a port is the placeholder for the port number.
- *
- * \b pszCrashSenderPath [in, optional]
- *
- * This is the absolute path to the directory where CrashSender.exe is located.
- * The crash sender process is responsible for letting end user know about the crash and
- * sending the error report. If this is NULL, it is assumed that CrashSender.exe is located in
- * the same directory as CrashRpt.dll.
- *
- * \b pfnCrashCallback [in, optional]
- *
- * This can be a pointer to the \ref LPGETLOGFILE() crash callback function. The crash callback function is
- * called by CrashRpt when crash occurs and allows user to be notified.
- * If this is NULL, crash callback function is not called.
- *
- * \b uPriorities [in, optional]
- *
- * This is an array that defines the preferred methods of sending error reports.
- * The available methods are: HTTP (or HTTPS) connection, SMTP connection or simple MAPI (default mail client).
- *
- * A priority is a non-negative integer number or special constant \ref CR_NEGATIVE_PRIORITY.
- * The greater positive number defines the greater priority.
- * Specify the \ref CR_NEGATIVE_PRIORITY to skip the given way.
- *
- * The element having index \ref CR_HTTP defines priority for using HTML connection.
- * The element having index \ref CR_SMTP defines priority for using SMTP connection.
- * The element having index \ref CR_SMAPI defines priority for using the default mail client.
- *
- * The methods having greater priority will be tried first. If priorities are equal to each other, HTTP (or HTTPS)
- * connection will be tried the first, SMTP connection will be tried the second and simple MAPI will be tried
- * the last.
- *
- * \b dwFlags [in, optional]
- *
- * Since v1.1.2, \a dwFlags can be used to define behavior parameters. This can be a combination of the following values:
- *
- * <table>
- * <tr><td colspan="2"> <i>Use the combination of the following constants to specify what exception handlers to install:</i>
- * <tr><td> \ref CR_INST_ALL_EXCEPTION_HANDLERS <td> Install all available exception handlers.
- * <tr><td> \ref CR_INST_SEH_EXCEPTION_HANDLER <td> Install SEH exception handler.
- * <tr><td> \ref CR_INST_PURE_CALL_HANDLER <td> Install pure call handler (VS .NET and later).
- * <tr><td> \ref CR_INST_NEW_OPERATOR_ERROR_HANDLER <td> Install new operator error handler (VS .NET and later).
- * <tr><td> \ref CR_INST_SECURITY_ERROR_HANDLER <td> Install security errror handler (VS .NET and later).
- * <tr><td> \ref CR_INST_INVALID_PARAMETER_HANDLER <td> Install invalid parameter handler (VS 2005 and later).
- * <tr><td> \ref CR_INST_SIGABRT_HANDLER <td> Install SIGABRT signal handler.
- * <tr><td> \ref CR_INST_SIGINT_HANDLER <td> Install SIGINT signal handler.
- * <tr><td> \ref CR_INST_SIGTERM_HANDLER <td> Install SIGTERM signal handler.
- * <tr><td colspan="2"> <i>Use the combination of the following constants to define behavior parameters:</i>
- * <tr><td> \ref CR_INST_NO_GUI
- * <td> <b>Available since v.1.2.2</b> Do not show GUI.
- *
- * It is not recommended to use this flag for regular GUI-based applications.
- * Use this only for services that have no GUI.
- * <tr><td> \ref CR_INST_HTTP_BINARY_ENCODING
- * <td> <b>Available since v.1.2.2</b> This affects the way of sending reports over HTTP.
- * By specifying this flag, you enable usage of multi-part HTTP uploads with binary encoding instead
- * of the legacy way (Base64-encoded form data).
- *
- * It is recommended to always specify this flag, because it is more suitable for large error reports. The legacy way
- * is supported for backwards compatibility and not recommended to use.
- * For additional information, see \ref sending_error_reports.
- * <tr><td> \ref CR_INST_DONT_SEND_REPORT
- * <td> <b>Available since v.1.2.2</b> This parameter means 'do not send error report immediately on crash, just save it locally'.
- * Use this if you have direct access to the machine where crash happens and do not need
- * to send report over the Internet. You can use this in couple with \ref CR_INST_STORE_ZIP_ARCHIVES flag to store zipped error reports
- * along with uncompressed error report files.
- * <tr><td> \ref CR_INST_APP_RESTART
- * <td> <b>Available since v.1.2.4</b> This parameter allows to automatically restart the application on crash. The command line
- * for the application is taken from \a pszRestartCmdLine parameter. To avoid cyclic restarts of an application which crashes on startup,
- * the application is restarted only if at least 60 seconds elapsed since its start.
- * <tr><td> \ref CR_INST_NO_MINIDUMP
- * <td> <b>Available since v.1.2.4</b> Specify this parameter if you want minidump file not to be included into crash report. The default
- * behavior is to include the minidump file.
- *
- * <tr><td> \ref CR_INST_SEND_QUEUED_REPORTS
- * <td> <b>Available since v.1.2.5</b> Specify this parameter to send all queued reports. Those
- * report files are by default stored in <i>%LOCAL_APPDATA%\\CrashRpt\\UnsentCrashReports\\%AppName%_%AppVersion%</i> folder.
- * If this is specified, CrashRpt checks if it's time to remind user about recent errors in the application and offers to send
- * all queued error reports.
- *
- * <tr><td> \ref CR_INST_STORE_ZIP_ARCHIVES
- * <td> <b>Available since v.1.2.7</b> This parameter can be used in couple with \ref CR_INST_DONT_SEND_REPORT flag to store not only uncompressed
- * error report files, but also ZIP archives. By default (if this flag omitted) CrashRpt stores all error report files
- * in uncompressed state.
- *
- * </table>
- *
- * \b pszPrivacyPolicyURL [in, optional]
- *
- * Since v1.1.2, this defines the URL for the Privacy Policy hyperlink of the
- * Error Report dialog. If this parameter is NULL, the link is not displayed. For information on
- * the Privacy Policy, see \ref error_report.
- *
- * \b pszDebugHelpDLL [in, optional]
- *
- * Since v1.2.1, this parameter defines the location of the dbghelp.dll to load.
- * If this parameter is NULL, the dbghelp.dll is searched using the default search sequence.
- *
- * \b uMiniDumpType [in, optional]
- *
- * Since v.1.2.1, this parameter defines the minidump type. For the list of available minidump
- * types, see the documentation for the MiniDumpWriteDump() function in MSDN.
-
- * It is recommended to set this
- * parameter with zero (equivalent of MiniDumpNormal constant). Other values may increase the minidump size significantly.
- * If you plan to use values other than zero, also specify the \ref CR_INST_HTTP_BINARY_ENCODING flag for \a dwFlags parameter.
- *
- * \b pszErrorReportSaveDir [in, optional]
- *
- * Since v.1.2.2, this parameter defines the directory where to save the error reports.
- * If this is NULL, the default directory is used (%%LOCAL_APP_DATA%\\CrashRpt\\UnsentCrashReports\\%%AppName%%_%%AppVersion%).
- *
- * \b pszRestartCmdLine [in, optional]
- *
- * Since v.1.2.4, parameter defines the string that specifies the
- * command-line arguments for the application when it is restarted (when using \ref CR_INST_APP_RESTART flag). Do not include the name of
- * the executable in the command line; it is added automatically. This parameter can be NULL.
- *
- * \b pszLangFilePath [in, optional]
- *
- * Since v.1.2.4, this parameter defines the absolute path (including file name) for language file.
- * If this is NULL, the lang file is assumed to be located in the same dir as CrashSender.exe file and have the name crashrpt_lang.ini.
- *
- * \b pszEmailText [in, optional]
- *
- * Since v.1.2.4, this parameter defines the custom E-mail text that is used when deliverying error report
- * as E-mail. If this is NULL, the default E-mail text is used. It is recommended to set this parameter with NULL.
- *
- * \b pszSmtpProxy [in, optional]
- *
- * Since v.1.2.4, this parameter defines the network address and port formatted as "IP:port" to use as SMTP proxy. Example: "192.168.1.1:2525".
- * If this is NULL, the SMTP server address is resolved using the MX record of sender's or recipient's mailbox. You should typically set this parameter with NULL, except in the
- * case when your software is a server and custom SMTP configuration is required.
- *
- * \b pszCustomSenderIcon [in, optional]
- *
- * Since v.1.2.8, this parameter can be used to define a custom icon for <i>Error Report</i> dialog.
- * The value of this parameter should be absolute address to the image containing the icon resource, followed by resource identifier separated by comma.
- * You can set this parameter with NULL to use the default icon.
- *
- * The resource identifier is a zero-based index of the icon to retrieve. For example, if this value is 0, the first icon in the specified file is used.
- * If the identifier is a negative number not equal to -1, the icon in the specified file whose resource identifier is equal to the absolute value of the resource identifier is used.
- * Example: "D:\MyApp\Resources.dll, -128".
- *
- *
- */
+* \struct CR_INSTALL_INFOW()
+* \brief This structure defines the general information used by crInstallW() function.
+*
+* \remarks
+*
+* \ref CR_INSTALL_INFOW and \ref CR_INSTALL_INFOA structures are wide-character and multi-byte character
+* versions of \ref CR_INSTALL_INFO. \ref CR_INSTALL_INFO typedef defines character set independent mapping.
+*
+* Below, structure members are described in details. Required parameters must always be specified, while optional
+* ones may be set with 0 (zero) or NULL. Most of parameters are optional.
+*
+* \b cb [in, required]
+*
+* This must contain the size of this structure in bytes.
+*
+* \b pszAppName [in, optional]
+*
+* This is the friendly name of the client application. The application name is
+* displayed in the Error Report dialog. If this parameter is NULL, the name of EXE file
+* that was used to start caller process becomes the application name.
+*
+* \b pszAppVersion [in, optional]
+*
+* Should be the application version. Example: "1.0.1".
+*
+* If this equals to NULL, product version is extracted from the executable file which started
+* the caller process, and this product version is used as application version. If the executable file
+* doesn's have a version info resource, the \ref crInstall() function will fail.
+*
+* \b pszEmailTo [in, optional]
+*
+* This is the email address of the recipient of error reports (or several E-mail adresses separated with semicolon),
+* for example "name at example.com" or "person1 at example.com;person2 at someserver.com". If several E-mail addresses are
+* specified, error report will be delivered to each of them. If this parameter equals to NULL,
+* the crash report won't be sent using E-mail client.
+*
+* Keep this NULL if you plan to use large error reports (more than several MB in size), because
+* large emails may be rejected by the mail server.
+*
+* \b pszEmailSubject [in, optional]
+*
+* This is the subject of the email message. If this parameter is NULL,
+* the default subject of form '[app_name] [app_version] Error Report' is generated.
+*
+* \a pszUrl is the URL of a server-side script that would receive crash report data via HTTP or HTTPS
+* connection. If this parmeter is NULL, HTTP(S) connection won't be used to send crash reports. For
+* example of a server-side script that can receive crash reports, see \ref sending_error_reports.
+*
+* HTTP(S) transport is the recommended way of sending large error reports (more than several MB in size).
+* To define a custom port for HTTP(S) connection, use the following URL format: "http://example.com[:port]/crashrpt.php" or
+* "https://example.com[:port]/crashrpt.php", where optional \a port is the placeholder for the port number.
+*
+* \b pszCrashSenderPath [in, optional]
+*
+* This is the absolute path to the directory where CrashSender.exe is located.
+* The crash sender process is responsible for letting end user know about the crash and
+* sending the error report. If this is NULL, it is assumed that CrashSender.exe is located in
+* the same directory as CrashRpt.dll.
+*
+*
+* \b uPriorities [in, optional]
+*
+* This is an array that defines the preferred methods of sending error reports.
+* The available methods are: HTTP (or HTTPS) connection, SMTP connection or simple MAPI (default mail client).
+*
+* A priority is a non-negative integer number or special constant \ref CR_NEGATIVE_PRIORITY.
+* The greater positive number defines the greater priority.
+* Specify the \ref CR_NEGATIVE_PRIORITY to skip the given delivery method.
+*
+* The element having index \ref CR_HTTP defines priority for using HTML connection.
+* The element having index \ref CR_SMTP defines priority for using SMTP connection.
+* The element having index \ref CR_SMAPI defines priority for using the default mail client.
+*
+* The methods having greater priority will be tried first. If priorities are equal to each other, HTTP (or HTTPS)
+* connection will be tried the first, SMTP connection will be tried the second and simple MAPI will be tried
+* the last.
+*
+* \b dwFlags [in, optional]
+*
+* Since v1.1.2, \a dwFlags can be used to define behavior parameters. This can be a combination of the following values:
+*
+* <table>
+* <tr><td colspan="2"> <i>Use the combination of the following constants to specify what exception handlers to install:</i>
+* <tr><td> \ref CR_INST_ALL_POSSIBLE_HANDLERS <td> Install all available exception handlers.
+* <tr><td> \ref CR_INST_SEH_EXCEPTION_HANDLER <td> Install SEH exception handler.
+* <tr><td> \ref CR_INST_PURE_CALL_HANDLER <td> Install pure call handler (VS .NET and later).
+* <tr><td> \ref CR_INST_NEW_OPERATOR_ERROR_HANDLER <td> Install new operator error handler (VS .NET and later).
+* <tr><td> \ref CR_INST_SECURITY_ERROR_HANDLER <td> Install security errror handler (VS .NET and later).
+* <tr><td> \ref CR_INST_INVALID_PARAMETER_HANDLER <td> Install invalid parameter handler (VS 2005 and later).
+* <tr><td> \ref CR_INST_SIGABRT_HANDLER <td> Install SIGABRT signal handler.
+* <tr><td> \ref CR_INST_SIGINT_HANDLER <td> Install SIGINT signal handler.
+* <tr><td> \ref CR_INST_SIGTERM_HANDLER <td> Install SIGTERM signal handler.
+* <tr><td colspan="2"> <i>Use the combination of the following constants to define behavior parameters:</i>
+* <tr><td> \ref CR_INST_NO_GUI
+* <td> <b>Available since v.1.2.2</b> Do not show GUI.
+*
+* It is not recommended to use this flag for regular GUI-based applications.
+* Use this only for services that have no GUI.
+* <tr><td> \ref CR_INST_DONT_SEND_REPORT
+* <td> <b>Available since v.1.2.2</b> This parameter means 'do not send error report immediately on crash, just save it locally'.
+* Use this if you have direct access to the machine where crash happens and do not need
+* to send report over the Internet. You can use this in couple with \ref CR_INST_STORE_ZIP_ARCHIVES flag to store zipped error reports
+* along with uncompressed error report files.
+* <tr><td> \ref CR_INST_APP_RESTART
+* <td> <b>Available since v.1.2.4</b> This parameter allows to automatically restart the application on crash. The command line
+* for the application is taken from \a pszRestartCmdLine parameter. To avoid cyclic restarts of an application which crashes on startup,
+* the application is restarted only if at least 60 seconds elapsed since its start.
+* <tr><td> \ref CR_INST_NO_MINIDUMP
+* <td> <b>Available since v.1.2.4</b> Specify this parameter if you want minidump file not to be included into crash report. The default
+* behavior is to include the minidump file.
+*
+* <tr><td> \ref CR_INST_SEND_QUEUED_REPORTS
+* <td> <b>Available since v.1.2.5</b> Specify this parameter to send all queued reports. Those
+* report files are by default stored in <i>%LOCAL_APPDATA%\\CrashRpt\\UnsentCrashReports\\%AppName%_%AppVersion%</i> folder.
+* If this is specified, CrashRpt checks if it's time to remind user about recent errors in the application and offers to send
+* all queued error reports.
+*
+* <tr><td> \ref CR_INST_STORE_ZIP_ARCHIVES
+* <td> <b>Available since v.1.2.7</b> This parameter can be used in couple with \ref CR_INST_DONT_SEND_REPORT flag to store not only uncompressed
+* error report files, but also ZIP archives. By default (if this flag omitted) CrashRpt stores all error report files
+* in uncompressed state.
+*
+* <tr><td> \ref CR_INST_SEND_MANDATORY
+* <td> <b>Available since v.1.3.1</b> This parameter makes sending procedure mandatory by removing the "Close" button
+* and "Other actions..." button from the Error Report dialog. Typically, it is not recommended to use this flag,
+* unless you intentionally want users to always send error reports for your application.
+* <tr><td> \ref CR_INST_SHOW_ADDITIONAL_INFO_FIELDS
+* <td> <b>Available since v.1.3.1</b> This parameter makes "Your E-mail" and "Describe what you were doing when the
+* problem occurred" fields of Error Report dialog always visible. By default (when this parameter not specified),
+* these fields are hidden and user needs to click the "Provide additional info (recommended)" link to show them.
+*
+* <tr><td> \ref CR_INST_ALLOW_ATTACH_MORE_FILES
+* <td> <b>Available since v.1.3.1</b> Adds an ability for user to attach more files to crash report by choosing
+* "Attach More File(s)" item from context menu of Error Report Details dialog. By default this feature is disabled.
+*
+* <tr><td> \ref CR_INST_AUTO_THREAD_HANDLERS
+* <td> <b>Available since v.1.4.2</b> Specifying this flag results in automatic installation of all available exception handlers to
+* all threads that will be created in the future. This flag only works if CrashRpt is compiled as a DLL, it does
+* not work if you compile CrashRpt as static library.
+* </table>
+*
+* \b pszPrivacyPolicyURL [in, optional]
+*
+* This parameter defines the URL for the Privacy Policy hyperlink of the
+* Error Report dialog. If this parameter is NULL, the link is not displayed. For information on
+* the Privacy Policy, see \ref error_report. This parameter is available since v1.1.2.
+*
+* \b pszDebugHelpDLL [in, optional]
+*
+* This parameter defines the location of the dbghelp.dll to load.
+* If this parameter is NULL, the dbghelp.dll is searched using the default search sequence.
+* This parameter is available since v1.2.1.
+*
+* \b uMiniDumpType [in, optional]
+*
+* This parameter defines the minidump type. For the list of available minidump
+* types, see the documentation for the MiniDumpWriteDump() function in MSDN.
+* Parameter is available since v.1.2.1.
+*
+* It is recommended to set this
+* parameter with zero (equivalent of MiniDumpNormal constant). Other values may increase the minidump
+* size significantly.
+*
+* \b pszErrorReportSaveDir [in, optional]
+*
+* This parameter defines the directory where to save the error reports.
+* If this is NULL, the default directory is used (%%LOCAL_APP_DATA%\\CrashRpt\\UnsentCrashReports\\%%AppName%%_%%AppVersion%).
+* This parameter is available since v.1.2.2.
+*
+* \b pszRestartCmdLine [in, optional]
+*
+* This parameter defines the string that specifies the
+* command-line arguments for the application when it is restarted (when using \ref CR_INST_APP_RESTART flag).
+* Do not include the name of the executable in the command line; it is added automatically. This parameter
+* can be NULL. Available since v.1.2.4.
+*
+* \b pszLangFilePath [in, optional]
+*
+* This parameter defines the absolute path (including file name) for language file.
+* If this is NULL, the lang file is assumed to be located in the same dir as CrashSender.exe file and have
+* the name crashrpt_lang.ini.
+* This parameter is available since v.1.2.4.
+*
+* \b pszEmailText [in, optional]
+*
+* This parameter defines the custom E-mail text that is used when deliverying error report
+* as E-mail. If this is NULL, the default E-mail text is used. It is recommended to set this parameter with NULL.
+* This parameter is available since v.1.2.4.
+*
+* \b pszSmtpProxy [in, optional]
+*
+* This parameter defines the network address (IP or domain) and, optionally, port formatted as "address[:port]"
+* of SMTP server. Examples: "192.168.1.1:2525", "mail.example.com:25".
+* If this parameter is NULL, the SMTP server address is resolved using the MX record of recipient's mailbox.
+* You should typically set this parameter with NULL, except in the
+* case when your software is a server and custom SMTP configuration is required. This parameter is available since v.1.2.4.
+*
+* \b pszCustomSenderIcon [in, optional]
+*
+* This parameter can be used to define a custom icon for <i>Error Report</i> dialog. This parameter is
+* available since v.1.2.8.
+*
+* The value of this parameter should be absolute path to the module containing the icon resource, followed
+* by resource identifier separated by comma. You can set this parameter with NULL to use the default icon.
+*
+* The resource identifier is a zero-based index of the icon to retrieve. For example, if this value is 0,
+* the first icon in the specified file is used. If the identifier is a negative number not equal to -1,
+* the icon in the specified file whose resource identifier is equal to the absolute value of the resource
+* identifier is used.
+* Example: "D:\MyApp\Resources.dll, -128".
+*
+* \b pszSmtpLogin [in, optional]
+*
+* This parameter defines the login name for SMTP authentication. It is typically used together with
+* \ref pszSmtpProxy and \ref pszSmtpPassword parameter.
+* If this parameter is ommitted (NULL), no SMTP autentication is used. This parameter is available since v.1.3.1.
+*
+* \b pszSmtpPassword [in, optional]
+*
+* This parameter defines the password for SMTP authentication. It is used in pair with \ref pszSmtpLogin parameter.
+* This parameter is available since v.1.3.1.
+*
+* \b nRestartTimeout [in, optional]
+*
+* This parameter defines the timeout (in seconds) for the application restart (when using \ref CR_INST_APP_RESTART flag).
+* It is recommended to set this with zero (in such a case, the default restart timeout of 60 seconds is applied).
+* Available since v.1.4.3.
+*/
typedef struct tagCR_INSTALL_INFOW
{
- WORD cb; //!< Size of this structure in bytes; must be initialized before using!
- LPCWSTR pszAppName; //!< Name of application.
- LPCWSTR pszAppVersion; //!< Application version.
- LPCWSTR pszEmailTo; //!< E-mail address of crash reports recipient.
- LPCWSTR pszEmailSubject; //!< Subject of crash report e-mail.
- LPCWSTR pszUrl; //!< URL of server-side script (used in HTTP connection).
- LPCWSTR pszCrashSenderPath; //!< Directory name where CrashSender.exe is located.
- LPGETLOGFILE pfnCrashCallback; //!< User crash callback.
- UINT uPriorities[5]; //!< Array of error sending transport priorities.
- DWORD dwFlags; //!< Flags.
- LPCWSTR pszPrivacyPolicyURL; //!< URL of privacy policy agreement.
- LPCWSTR pszDebugHelpDLL; //!< File name or folder of Debug help DLL.
- MINIDUMP_TYPE uMiniDumpType; //!< Minidump type.
- LPCWSTR pszErrorReportSaveDir; //!< Directory where to save error reports.
- LPCWSTR pszRestartCmdLine; //!< Command line for application restart (without executable name).
- LPCWSTR pszLangFilePath; //!< Path to the language file (including file name).
- LPCWSTR pszEmailText; //!< Custom E-mail text (used when deliverying report as E-mail).
- LPCWSTR pszSmtpProxy; //!< Network address and port to be used as SMTP proxy.
- LPCWSTR pszCustomSenderIcon; //!< Custom icon used for Error Report dialog.
+ WORD cb; //!< Size of this structure in bytes; must be initialized before using!
+ LPCWSTR pszAppName; //!< Name of application.
+ LPCWSTR pszAppVersion; //!< Application version.
+ LPCWSTR pszEmailTo; //!< E-mail address of crash reports recipient.
+ LPCWSTR pszEmailSubject; //!< Subject of crash report e-mail.
+ LPCWSTR pszUrl; //!< URL of server-side script (used in HTTP connection).
+ LPCWSTR pszCrashSenderPath; //!< Directory name where CrashSender.exe is located.
+ LPGETLOGFILE pfnCrashCallback; //!< Deprecated, do not use.
+ UINT uPriorities[5]; //!< Array of error sending transport priorities.
+ DWORD dwFlags; //!< Flags.
+ LPCWSTR pszPrivacyPolicyURL; //!< URL of privacy policy agreement.
+ LPCWSTR pszDebugHelpDLL; //!< File name or folder of Debug help DLL.
+ MINIDUMP_TYPE uMiniDumpType; //!< Minidump type.
+ LPCWSTR pszErrorReportSaveDir; //!< Directory where to save error reports.
+ LPCWSTR pszRestartCmdLine; //!< Command line for application restart (without executable name).
+ LPCWSTR pszLangFilePath; //!< Path to the language file (including file name).
+ LPCWSTR pszEmailText; //!< Custom E-mail text (used when deliverying report as E-mail).
+ LPCWSTR pszSmtpProxy; //!< Network address and port to be used as SMTP proxy.
+ LPCWSTR pszCustomSenderIcon; //!< Custom icon used for Error Report dialog.
+ LPCWSTR pszSmtpLogin; //!< Login name used for SMTP authentication when sending error report as E-mail.
+ LPCWSTR pszSmtpPassword; //!< Password used for SMTP authentication when sending error report as E-mail.
+ int nRestartTimeout; //!< Timeout for application restart.
}
CR_INSTALL_INFOW;
-typedef CR_INSTALL_INFOW *PCR_INSTALL_INFOW;
+typedef CR_INSTALL_INFOW* PCR_INSTALL_INFOW;
/*! \ingroup CrashRptStructs
- * \struct CR_INSTALL_INFOA
- * \copydoc CR_INSTALL_INFOW
- */
+* \struct CR_INSTALL_INFOA
+* \copydoc CR_INSTALL_INFOW
+*/
typedef struct tagCR_INSTALL_INFOA
{
- WORD cb; //!< Size of this structure in bytes; must be initialized before using!
- LPCSTR pszAppName; //!< Name of application.
- LPCSTR pszAppVersion; //!< Application version.
- LPCSTR pszEmailTo; //!< E-mail address of crash reports recipient.
- LPCSTR pszEmailSubject; //!< Subject of crash report e-mail.
- LPCSTR pszUrl; //!< URL of server-side script (used in HTTP connection).
- LPCSTR pszCrashSenderPath; //!< Directory name where CrashSender.exe is located.
- LPGETLOGFILE pfnCrashCallback; //!< User crash callback.
- UINT uPriorities[3]; //!< Array of error sending transport priorities.
- DWORD dwFlags; //!< Flags.
- LPCSTR pszPrivacyPolicyURL; //!< URL of privacy policy agreement.
- LPCSTR pszDebugHelpDLL; //!< File name or folder of Debug help DLL.
- MINIDUMP_TYPE uMiniDumpType; //!< Mini dump type.
- LPCSTR pszErrorReportSaveDir; //!< Directory where to save error reports.
- LPCSTR pszRestartCmdLine; //!< Command line for application restart (without executable name).
- LPCSTR pszLangFilePath; //!< Path to the language file (including file name).
- LPCSTR pszEmailText; //!< Custom E-mail text (used when deliverying report as E-mail).
- LPCSTR pszSmtpProxy; //!< Network address and port to be used as SMTP proxy.
- LPCSTR pszCustomSenderIcon; //!< Custom icon used for Error Report dialog.
+ WORD cb; //!< Size of this structure in bytes; must be initialized before using!
+ LPCSTR pszAppName; //!< Name of application.
+ LPCSTR pszAppVersion; //!< Application version.
+ LPCSTR pszEmailTo; //!< E-mail address of crash reports recipient.
+ LPCSTR pszEmailSubject; //!< Subject of crash report e-mail.
+ LPCSTR pszUrl; //!< URL of server-side script (used in HTTP connection).
+ LPCSTR pszCrashSenderPath; //!< Directory name where CrashSender.exe is located.
+ LPGETLOGFILE pfnCrashCallback; //!< Deprecated, do not use.
+ UINT uPriorities[5]; //!< Array of error sending transport priorities.
+ DWORD dwFlags; //!< Flags.
+ LPCSTR pszPrivacyPolicyURL; //!< URL of privacy policy agreement.
+ LPCSTR pszDebugHelpDLL; //!< File name or folder of Debug help DLL.
+ MINIDUMP_TYPE uMiniDumpType; //!< Mini dump type.
+ LPCSTR pszErrorReportSaveDir; //!< Directory where to save error reports.
+ LPCSTR pszRestartCmdLine; //!< Command line for application restart (without executable name).
+ LPCSTR pszLangFilePath; //!< Path to the language file (including file name).
+ LPCSTR pszEmailText; //!< Custom E-mail text (used when deliverying report as E-mail).
+ LPCSTR pszSmtpProxy; //!< Network address and port to be used as SMTP proxy.
+ LPCSTR pszCustomSenderIcon; //!< Custom icon used for Error Report dialog.
+ LPCSTR pszSmtpLogin; //!< Login name used for SMTP authentication when sending error report as E-mail.
+ LPCSTR pszSmtpPassword; //!< Password used for SMTP authentication when sending error report as E-mail.
+ int nRestartTimeout; //!< Timeout for application restart.
}
CR_INSTALL_INFOA;
-typedef CR_INSTALL_INFOA *PCR_INSTALL_INFOA;
+typedef CR_INSTALL_INFOA* PCR_INSTALL_INFOA;
/*! \brief Character set-independent mapping of CR_INSTALL_INFOW and CR_INSTALL_INFOA structures.
- * \ingroup CrashRptStructs
- */
+* \ingroup CrashRptStructs
+*/
#ifdef UNICODE
typedef CR_INSTALL_INFOW CR_INSTALL_INFO;
typedef PCR_INSTALL_INFOW PCR_INSTALL_INFO;
@@ -590,79 +787,83 @@
#endif // UNICODE
/*! \ingroup CrashRptAPI
- * \brief Installs exception handlers for the caller process.
- *
- * \param[in] pInfo General information.
- *
- * \remarks
- * This function installs unhandled exception filter for the caller process.
- * It also installs various CRT exception/error handlers that function for all threads of the caller process.
- * For more information, see \ref exception_handling
- *
- * Below is the list of installed handlers:
- * - Top-level SEH exception filter [ \c SetUnhandledExceptionFilter() ]
- * - C++ pure virtual call handler (Visual Studio .NET 2003 and later) [ \c _set_purecall_handler() ]
- * - C++ invalid parameter handler (Visual Studio .NET 2005 and later) [ \c _set_invalid_parameter_handler() ]
- * - C++ new operator error handler (Visual Studio .NET 2003 and later) [ \c _set_new_handler() ]
- * - C++ buffer overrun handler (Visual Studio .NET 2003 only) [ \c _set_security_error_handler() ]
- * - C++ abort handler [ \c signal(SIGABRT) ]
- * - C++ illegal instruction handler [ \c signal(SIGINT) ]
- * - C++ termination request [ \c signal(SIGTERM) ]
- *
- * In a multithreaded program, additionally use crInstallToCurrentThread2() function for each execution
- * thread, except the main one.
- *
- * The \a pInfo parameter contains all required information needed to install CrashRpt.
- *
- * This function fails when \a pInfo->pszCrashSenderPath doesn't contain valid path to CrashSender.exe
- * or when \a pInfo->pszCrashSenderPath is equal to NULL, but \b CrashSender.exe is not located in the
- * directory where \b CrashRpt.dll located.
- *
- * On crash, the crash minidump file is created, which contains CPU information and
- * stack trace information. Also XML file is created that contains additional
- * information that may be helpful for crash analysis. These files along with several additional
- * files added with crAddFile2() are packed to a single ZIP file.
- *
- * When crash information is collected, another process, <b>CrashSender.exe</b>, is launched
- * and the process where crash had occured is terminated. The CrashSender process is
- * responsible for letting the user know about the crash and send the error report.
- *
- * The error report can be sent over E-mail using address and subject passed to the
- * function as \ref CR_INSTALL_INFO structure members. Another way of sending error report is an HTTP
- * request using \a pszUrl member of \ref CR_INSTALL_INFO.
- *
- * This function may fail if an appropriate language file (\b crashrpt_lang.ini) is not found
- * in the directory where the \b CrashSender.exe file is located.
- *
- * If this function fails, use crGetLastErrorMsg() to retrieve the error message.
- *
- * crInstallW() and crInstallA() are wide-character and multi-byte character versions of crInstall()
- * function. The \ref crInstall macro defines character set independent mapping for these functions.
- *
- * For code example, see \ref simple_example.
- *
- * \sa crInstallW(), crInstallA(), crInstall(), CR_INSTALL_INFOW,
- * CR_INSTALL_INFOA, CR_INSTALL_INFO, crUninstall(),
- * CrAutoInstallHelper
- */
+* \brief Installs exception handlers for the caller process.
+*
+* \return
+* This function returns zero if succeeded.
+*
+* \param[in] pInfo General congiration information.
+*
+* \remarks
+*
+* This function installs unhandled exception filter for the caller process.
+* It also installs various CRT exception/error handlers that function for all threads of the caller process.
+* For more information, see \ref exception_handling
+*
+* Below is the list of installed handlers:
+* - Top-level SEH exception filter [ \c SetUnhandledExceptionFilter() ]
+* - C++ pure virtual call handler (Visual Studio .NET 2003 and later) [ \c _set_purecall_handler() ]
+* - C++ invalid parameter handler (Visual Studio .NET 2005 and later) [ \c _set_invalid_parameter_handler() ]
+* - C++ new operator error handler (Visual Studio .NET 2003 and later) [ \c _set_new_handler() ]
+* - C++ buffer overrun handler (Visual Studio .NET 2003 only) [ \c _set_security_error_handler() ]
+* - C++ abort handler [ \c signal(SIGABRT) ]
+* - C++ illegal instruction handler [ \c signal(SIGINT) ]
+* - C++ termination request [ \c signal(SIGTERM) ]
+*
+* In a multithreaded program, additionally use crInstallToCurrentThread2() function for each execution
+* thread, except the main one.
+*
+* The \a pInfo parameter contains all required information needed to install CrashRpt.
+*
+* This function fails when \a pInfo->pszCrashSenderPath doesn't contain valid path to CrashSender.exe
+* or when \a pInfo->pszCrashSenderPath is equal to NULL, but \b CrashSender.exe is not located in the
+* directory where \b CrashRpt.dll located.
+*
+* On crash, the crash minidump file is created, which contains CPU information and
+* stack trace information. Also XML file is created that contains additional
+* information that may be helpful for crash analysis. These files along with several additional
+* files added with crAddFile2() are packed to a single ZIP file.
+*
+* When crash information is collected, another process, <b>CrashSender.exe</b>, is launched
+* and the process where crash had occured is terminated. The CrashSender process is
+* responsible for letting the user know about the crash and send the error report.
+*
+* The error report can be sent over E-mail using address and subject passed to the
+* function as \ref CR_INSTALL_INFO structure members. Another way of sending error report is an HTTP
+* request using \a pszUrl member of \ref CR_INSTALL_INFO.
+*
+* This function may fail if an appropriate language file (\b crashrpt_lang.ini) is not found
+* in the directory where the \b CrashSender.exe file is located.
+*
+* If this function fails, use crGetLastErrorMsg() to retrieve the error message.
+*
+* crInstallW() and crInstallA() are wide-character and multi-byte character versions of crInstall()
+* function. The \ref crInstall macro defines character set independent mapping for these functions.
+*
+* For code example, see \ref simple_example.
+*
+* \sa crInstallW(), crInstallA(), crInstall(), CR_INSTALL_INFOW,
+* CR_INSTALL_INFOA, CR_INSTALL_INFO, crUninstall(),
+* CrAutoInstallHelper
+*/
CRASHRPTAPI(int)
crInstallW(
- __in PCR_INSTALL_INFOW pInfo
-);
+ __in PCR_INSTALL_INFOW pInfo
+ );
/*! \ingroup CrashRptAPI
- * \copydoc crInstallW()
- */
+* \copydoc crInstallW()
+*/
CRASHRPTAPI(int)
crInstallA(
- __in PCR_INSTALL_INFOA pInfo
-);
+ __in PCR_INSTALL_INFOA pInfo
+ );
/*! \brief Character set-independent mapping of crInstallW() and crInstallA() functions.
- * \ingroup CrashRptAPI
- */
+* \ingroup CrashRptAPI
+*/
#ifdef UNICODE
#define crInstall crInstallW
#else
@@ -670,282 +871,214 @@
#endif //UNICODE
/*! \ingroup CrashRptAPI
- * \brief Unsinstalls exception handlers previously installed with crInstall().
- *
- * \return
- * This function returns zero if succeeded.
- *
- * \remarks
- *
- * Call this function on application exit to uninstall exception
- * handlers previously installed with crInstall(). After function call, the exception handlers
- * are restored to states they had before calling crInstall().
- *
- * This function fails if crInstall() wasn't previously called in context of the
- * caller process.
- *
- * When this function fails, use crGetLastErrorMsg() to retrieve the error message.
- *
- * \sa crInstallW(), crInstallA(), crInstall(), crUninstall(),
- * CrAutoInstallHelper
- */
+* \brief Uninitializes the CrashRpt library and unsinstalls exception handlers previously installed with crInstall().
+*
+* \return
+* This function returns zero if succeeded.
+*
+* \remarks
+*
+* Call this function on application exit to uninitialize the library and uninstall exception
+* handlers previously installed with crInstall(). After function call, the exception handlers
+* are restored to states they had before calling crInstall().
+*
+* This function fails if crInstall() wasn't previously called in context of the
+* caller process.
+*
+* When this function fails, use the crGetLastErrorMsg() function to retrieve the error message.
+*
+* \sa crInstallW(), crInstallA(), crInstall(),
+* CrAutoInstallHelper
+*/
CRASHRPTAPI(int)
crUninstall();
-
-/*! \ingroup DeprecatedAPI
- * \brief Installs exception handlers to the current thread.
- *
- * \return This function returns zero if succeeded.
- *
- * \remarks
- *
- * This function sets exception handlers for the caller thread. If you have
- * several execution threads, you ought to call the function for each thread,
- * except the main one.
- *
- * The list of C++ exception/error handlers installed with this function:
- * - terminate handler [ \c set_terminate() ]
- * - unexpected handler [ \c set_unexpected() ]
- * - floating point error handler [ \c signal(SIGFPE) ]
- * - illegal instruction handler [ \c signal(SIGILL) ]
- * - illegal storage access handler [ \c signal(SIGSEGV) ]
- *
- * The crInstall() function automatically installs C++ exception handlers for the
- * main thread, so no need to call crInstallToCurrentThread() for the main thread.
- *
- * This function fails if calling it twice for the same thread.
- * When this function fails, use crGetLastErrorMsg() to retrieve the error message.
- *
- * Call crUninstallFromCurrentThread() to uninstall C++ exception handlers from
- * current thread.
- *
- * This function is deprecatd. The crInstallToCurrentThread2() function gives
- * better control of what exception handlers to install.
- *
- * \sa crInstallToCurrentThread2(),
- * crUninstallFromCurrentThread(), CrThreadAutoInstallHelper
- */
-
-CRASHRPTAPI(int)
-crInstallToCurrentThread();
-
/*! \ingroup CrashRptAPI
- * \brief Installs exception handlers to the caller thread.
- * \return This function returns zero if succeeded.
- * \param[in] dwFlags Flags.
- *
- * \remarks
- *
- * This function is available <b>since v.1.1.2</b>.
- *
- * The function sets exception handlers for the caller thread. If you have
- * several execution threads, you ought to call the function for each thread,
- * except the main one.
- *
- * The function works the same way as obsolete crInstallToCurrentThread(), but provides
- * an ability to select what exception handlers to install.
- *
- * \a dwFlags defines what exception handlers to install. Use zero value
- * to install all possible exception handlers. Or use a combination of the following constants:
- *
- * - \ref CR_INST_TERMINATE_HANDLER Install terminate handler
- * - \ref CR_INST_UNEXPECTED_HANDLER Install unexpected handler
- * - \ref CR_INST_SIGFPE_HANDLER Install SIGFPE signal handler
- * - \ref CR_INST_SIGILL_HANDLER Install SIGILL signal handler
- * - \ref CR_INST_SIGSEGV_HANDLER Install SIGSEGV signal handler
- *
- * Example:
- *
- * \code
- * DWORD WINAPI ThreadProc(LPVOID lpParam)
- * {
- * // Install exception handlers
- * crInstallToCurrentThread2(0);
- *
- * // Your code...
- *
- * // Uninstall exception handlers
- * crUninstallFromCurrentThread();
- *
- * return 0;
- * }
- * \endcode
- *
- * \sa
- * crInstallToCurrentThread()
- */
+* \brief Installs exception handlers to the caller thread.
+* \return This function returns zero if succeeded.
+* \param[in] dwFlags Flags.
+*
+* \remarks
+*
+* This function is available <b>since v.1.1.2</b>.
+*
+* The function sets exception handlers for the caller thread. If you have
+* several execution threads, you ought to call the function for each thread,
+* except the main one.
+*
+* \a dwFlags defines what exception handlers to install. Use zero value
+* to install all possible exception handlers. Or use a combination of the following constants:
+*
+* - \ref CR_INST_TERMINATE_HANDLER Install terminate handler
+* - \ref CR_INST_UNEXPECTED_HANDLER Install unexpected handler
+* - \ref CR_INST_SIGFPE_HANDLER Install SIGFPE signal handler
+* - \ref CR_INST_SIGILL_HANDLER Install SIGILL signal handler
+* - \ref CR_INST_SIGSEGV_HANDLER Install SIGSEGV signal handler
+*
+* Example:
+*
+* \code
+* DWORD WINAPI ThreadProc(LPVOID lpParam)
+* {
+* // Install exception handlers
+* crInstallToCurrentThread2(0);
+*
+* // Your code...
+*
+* // Uninstall exception handlers
+* crUninstallFromCurrentThread();
+*
+* return 0;
+* }
+* \endcode
+*
+* \sa
+* crInstall()
+*/
CRASHRPTAPI(int)
crInstallToCurrentThread2(DWORD dwFlags);
/*! \ingroup CrashRptAPI
- * \brief Uninstalls C++ exception handlers from the current thread.
- * \return This function returns zero if succeeded.
- *
- * \remarks
- *
- * This function unsets exception handlers from the caller thread. If you have
- * several execution threads, you ought to call the function for each thread.
- * After calling this function, the exception handlers for current thread are
- * replaced with the handlers that were before call of crInstallToCurrentThread2().
- *
- * This function fails if crInstallToCurrentThread2() wasn't called for current thread.
- *
- * When this function fails, use crGetLastErrorMsg() to retrieve the error message.
- *
- * No need to call this function for the main execution thread. The crUninstall()
- * will automatically uninstall C++ exception handlers for the main thread.
- *
- * \sa crInstallToCurrentThread(), crInstallToCurrentThread2(),
- * crUninstallFromCurrentThread(), CrThreadAutoInstallHelper
- */
+* \brief Uninstalls C++ exception handlers from the current thread.
+* \return This function returns zero if succeeded.
+*
+* \remarks
+*
+* This function unsets exception handlers from the caller thread. If you have
+* several execution threads, you ought to call the function for each thread.
+* After calling this function, the exception handlers for current thread are
+* replaced with the handlers that were before call of crInstallToCurrentThread2().
+*
+* This function fails if crInstallToCurrentThread2() wasn't called for current thread.
+*
+* When this function fails, use crGetLastErrorMsg() to retrieve the error message.
+*
+* No need to call this function for the main execution thread. The crUninstall()
+* will automatically uninstall C++ exception handlers for the main thread.
+*
+* \sa crInstallToCurrentThread2(),
+* crUninstallFromCurrentThread(), CrThreadAutoInstallHelper
+*/
CRASHRPTAPI(int)
crUninstallFromCurrentThread();
-/*! \ingroup DeprecatedAPI
- * \brief Adds a file to crash report.
- *
- * \return This function returns zero if succeeded.
- *
- * \param[in] pszFile Absolute path to the file to add.
- * \param[in] pszDesc File description (used in Error Report Details dialog).
- *
- * \note
- * This function is deprecated and will be removed in one of the future releases. It is recommended to use crAddFile2() function instead.
- *
- * This function can be called anytime after crInstall() to add one or more
- * files to the generated crash report.
- *
- * When this function is called, the file is marked to be added to the error report,
- * then the function returns control to the caller.
- * When crash occurs, all marked files are added to the report by the \b CrashSender.exe process.
- * If a file is locked by someone for exclusive access, the file won't be included. Inside of \ref LPGETLOGFILE crash callback,
- * ensure files to be included are acessible for reading.
- *
- * \a pszFile should be a valid absolute path of a file to add to crash report.
- *
- * \a pszDesc is a description of a file. It can be NULL.
- *
- * This function fails if \a pszFile doesn't exist at the moment of function call.
- *
- * The crAddFileW() and crAddFileA() are wide-character and multibyte-character
- * versions of crAddFile() function. The crAddFile() macro defines character set
- * independent mapping.
- *
- * \sa crAddFileW(), crAddFileA(), crAddFile()
- */
-
-CRASHRPTAPI(int)
-crAddFileW(
- LPCWSTR pszFile,
- LPCWSTR pszDesc
- );
-
-/*! \ingroup DeprecatedAPI
- * \copydoc crAddFileW()
- */
-
-
-CRASHRPTAPI(int)
-crAddFileA(
- LPCSTR pszFile,
- LPCSTR pszDesc
- );
-
-/*! \brief Character set-independent mapping of crAddFileW() and crAddFileA() functions.
- * \ingroup DeprecatedAPI
- */
-#ifdef UNICODE
-#define crAddFile crAddFileW
-#else
-#define crAddFile crAddFileA
-#endif //UNICODE
-
// Flags for crAddFile2() function.
#define CR_AF_TAKE_ORIGINAL_FILE 0 //!< Take the original file (do not copy it to the error report folder).
#define CR_AF_MAKE_FILE_COPY 1 //!< Copy the file to the error report folder.
-
#define CR_AF_FILE_MUST_EXIST 0 //!< Function will fail if file doesn't exist at the moment of function call.
#define CR_AF_MISSING_FILE_OK 2 //!< Do not fail if file is missing (assume it will be created later).
+#define CR_AF_ALLOW_DELETE 4 //!< If this flag is specified, the file will be deletable from context menu of Error Report Details dialog.
/*! \ingroup CrashRptAPI
- * \brief Adds a file to crash report.
- *
- * \return This function returns zero if succeeded.
- *
- * \param[in] pszFile Absolute path to the file to add, required.
- * \param[in] pszDestFile Destination file name, optional.
- * \param[in] pszDesc File description (used in Error Report Details dialog), optional.
- * \param[in] dwFlags Flags, optional.
- *
- * This function can be called anytime after crInstall() to add one or more
- * files to the generated crash report.
- *
- * When this function is called, the file is marked to be added to the error report,
- * then the function returns control to the caller.
- * When crash occurs, all marked files are added to the report by the \b CrashSender.exe process.
- * If a file is locked by someone for exclusive access, the file won't be included. Inside of \ref LPGETLOGFILE crash callback,
- * close open file handles and ensure files to be included are acessible for reading.
- *
- * \a pszFile should be a valid absolute path of a file to add to crash report.
- *
- * \a pszDestFile should be the name of destination file. This parameter can be used
- * to specify different file name for the file in ZIP archive. If this parameter is NULL, the pszFile
- * file name is used as destination file name.
- *
- * \a pszDesc is a literal description of a file. It can be NULL.
- *
- * \a dwFlags parameter defines the behavior of the function. This can be a combination of the following flags:
- * - \ref CR_AF_TAKE_ORIGINAL_FILE On crash, the \b CrashSender.exe will try to locate the file from its original location. This behavior is the default one.
- * - \ref CR_AF_MAKE_FILE_COPY On crash, the \b CrashSender.exe will make a copy of the file and save it to the error report folder.
- *
- * - \ref CR_AF_FILE_MUST_EXIST The function will fail if file doesn't exist at the moment of function call (the default behavior).
- * - \ref CR_AF_MISSING_FILE_OK Do not fail if file is missing (assume it will be created later).
- *
- * If you do not use error report delivery (\ref CR_INST_DONT_SEND_REPORT flag) or if you use postponed error report delivery
- * (if you specify \ref CR_INST_SEND_QUEUED_REPORTS flag)
- * you must also specify the \ref CR_AF_MAKE_FILE_COPY as \a dwFlags parameter value. This will
- * guarantee that a snapshot of your file at the moment of crash is taken and saved to the error report folder.
- *
- * This function fails if \a pszFile doesn't exist at the moment of function call,
- * unless you specify \ref CR_AF_MISSING_FILE_OK flag.
- *
- * The crAddFile2W() and crAddFile2A() are wide-character and multibyte-character
- * versions of crAddFile2() function. The crAddFile2() macro defines character set
- * independent mapping.
- *
- * This function is available <b>since v.1.2.1</b>. This function replaces the crAddFile() function.
- *
- * \sa crAddFile2W(), crAddFile2A(), crAddFile2()
- */
+* \brief Adds a file to crash report.
+*
+* \return This function returns zero if succeeded.
+*
+* \param[in] pszFile Absolute path to the file (or file search pattern) to add to crash report, required.
+* \param[in] pszDestFile Destination file name, optional.
+* \param[in] pszDesc File description (used in Error Report Details dialog), optional.
+* \param[in] dwFlags Flags, optional.
+*
+* This function can be called anytime after crInstall() to add one or more
+* files to the generated crash report.
+*
+* When this function is called, the file is marked to be added to the error report,
+* then the function returns control to the caller.
+* When a crash occurs, all marked files are added to the report by the \b CrashSender.exe process.
+* If a file is locked by someone for exclusive access, the file won't be included.
+* Inside of \ref PFNCRASHCALLBACK() crash callback,
+* close open file handles and ensure files to be included are acessible for reading.
+*
+* \a pszFile should be either a valid absolute path to the file or a file search
+* pattern (e.g. "*.log") to be added to crash report.
+*
+* \a pszDestFile should be the name of destination file. This parameter can be used
+* to specify different file name for the file in ZIP archive. If this parameter is NULL, the pszFile
+* file name is used as destination file name. If \a pszFile is a search pattern, this argument
+* is ignored.
+*
+* \a pszDesc is a short description of the file. It can be NULL.
+*
+* \a dwFlags parameter defines the behavior of the function. This can be a combination of the following flags:
+* - \ref CR_AF_TAKE_ORIGINAL_FILE On crash, the \b CrashSender.exe process will try to locate the file from its original location. This behavior is the default one.
+* - \ref CR_AF_MAKE_FILE_COPY On crash, the \b CrashSender.exe process will make a copy of the file and save it to the error report folder.
+*
+* - \ref CR_AF_FILE_MUST_EXIST The function will fail if file doesn't exist at the moment of function call (the default behavior).
+* - \ref CR_AF_MISSING_FILE_OK The function will not fail if file is missing (assume it will be created later).
+*
+* - \ref CR_AF_ALLOW_DELETE If this flag is specified, the user will be able to delete the file from error report using context menu of Error Report Details dialog.
+*
+* If you do not use error report delivery (\ref CR_INST_DONT_SEND_REPORT flag) or if you use postponed error report delivery
+* (if you specify \ref CR_INST_SEND_QUEUED_REPORTS flag)
+* you must also specify the \ref CR_AF_MAKE_FILE_COPY as \a dwFlags parameter value. This will
+* guarantee that a snapshot of your file at the moment of crash is taken and saved to the error report folder.
+* The error report folder is a folder where files included into the crash report are stored
+* until they are sent to recipient.
+*
+* This function fails if \a pszFile doesn't exist at the moment of function call,
+* unless you specify \ref CR_AF_MISSING_FILE_OK flag.
+*
+* The crAddFile2W() and crAddFile2A() are wide-character and multibyte-character
+* versions of crAddFile2() function. The crAddFile2() macro defines character set
+* independent mapping.
+*
+* Usage example:
+*
+* \code
+*
+* // Add the error.log file to crash report. At the moment of crash,
+* // the file will be copied to crash report folder. The end user
+* // will be able to delete the file using CrashRpt GUI.
+* int nResult = crAddFile2(
+* _T("C:\\Program Files (x86)\MyApp\\error.log"),
+* _T("error.log"),
+* _T("Log file"),
+* CR_AF_MAKE_FILE_COPY|CR_AF_ALLOW_DELETE);
+* if(nResult!=0)
+* {
+* // Get the status message
+* TCHAR szErrorMsg[256];
+* crGetLastErrorMsg(szErrorMsg, 256);
+* }
+*
+* // Add all *.txt files found in the folder. At the moment of crash,
+* // the file(s) will be copied to crash report folder. The end user
+* // won't be able to delete the file(s).
+* crAddFile2(_T("C:\\Program Files (x86)\MyApp\\*.txt"),
+* NULL, _T("TXT file"), CR_AF_MAKE_FILE_COPY);
+*
+* \endcode
+*
+* \sa crAddFile2W(), crAddFile2A(), crAddFile2()
+*/
CRASHRPTAPI(int)
crAddFile2W(
- LPCWSTR pszFile,
- LPCWSTR pszDestFile,
- LPCWSTR pszDesc,
- DWORD dwFlags
- );
+ LPCWSTR pszFile,
+ LPCWSTR pszDestFile,
+ LPCWSTR pszDesc,
+ DWORD dwFlags
+ );
/*! \ingroup CrashRptAPI
- * \copydoc crAddFile2W()
- */
+* \copydoc crAddFile2W()
+*/
CRASHRPTAPI(int)
crAddFile2A(
- LPCSTR pszFile,
- LPCSTR pszDestFile,
- LPCSTR pszDesc,
- DWORD dwFlags
- );
+ LPCSTR pszFile,
+ LPCSTR pszDestFile,
+ LPCSTR pszDesc,
+ DWORD dwFlags
+ );
/*! \brief Character set-independent mapping of crAddFile2W() and crAddFile2A() functions.
- * \ingroup CrashRptAPI
- */
+* \ingroup CrashRptAPI
+*/
#ifdef UNICODE
#define crAddFile2 crAddFile2W
#else
@@ -959,533 +1092,582 @@
#define CR_AS_PROCESS_WINDOWS 2 //!< Take a screenshot of all visible process windows.
#define CR_AS_GRAYSCALE_IMAGE 4 //!< Make a grayscale image instead of a full-color one.
#define CR_AS_USE_JPEG_FORMAT 8 //!< Store screenshots as JPG files.
+#define CR_AS_ALLOW_DELETE 16 //!< If this flag is specified, the file will be deletable from context menu of Error Report Details dialog.
-/*! \ingroup CrashRptAPI
- * \brief Adds a screenshot to the crash report.
- *
- * \return This function returns zero if succeeded. Use crGetLastErrorMsg() to retrieve the error message on fail.
- *
- * \param[in] dwFlags Flags, optional.
- *
- * \remarks
- *
- * This function can be used to take a screenshot at the moment of crash and add it to the error report.
- * Screenshot information may help the developer to better understand the state of the application
- * at the moment of crash and reproduce the error.
- *
- * When this function is called, screenshot flags are saved,
- * then the function returns control to the caller.
- * When crash occurs, screenshot is made by the \b CrashSender.exe process and added to the report.
- *
- * \b dwFlags
- *
- * Use one of the following constants to specify what part of virtual screen to capture:
- * - \ref CR_AS_VIRTUAL_SCREEN Use this to take a screenshot of the whole desktop (virtual screen).
- * - \ref CR_AS_MAIN_WINDOW Use this to take a screenshot of the application's main window.
- * - \ref CR_AS_PROCESS_WINDOWS Use this to take a screenshot of all visible windows that belong to the process.
- *
- * The main application window is a window that has a caption (\b WS_CAPTION), system menu (\b WS_SYSMENU) and
- * the \b WS_EX_APPWINDOW extended style. If CrashRpt doesn't find such window, it considers the first found process window as
- * the main window.
- *
- * Screenshots are added in form of PNG files by default. You can specify the \ref CR_AS_USE_JPEG_FORMAT flag to save
- * screenshots as JPEG files instead.
- *
- * In addition, you can specify the \ref CR_AS_GRAYSCALE_IMAGE flag to make a grayscale screenshot
- * (by default color image is made). Grayscale image gives smaller file size.
- *
- * If you use JPEG image format, you may better use the \ref crAddScreenshot2() function, that allows to
- * define JPEG image quality.
- *
- * When capturing entire desktop consisting of several monitors,
- * one screenshot file is added per each monitor.
- *
- * You should be careful when using this feature, because screenshots may contain user-identifying
- * or private information. Always specify purposes you will use collected
- * information for in your Privacy Policy.
- *
- * \sa
- * crAddFile2()
- */
+/*! \ingroup DeprecatedAPI
+* \brief Adds a screenshot to the crash report.
+*
+* \return This function returns zero if succeeded. Use crGetLastErrorMsg() to retrieve the error message on fail.
+*
+* \param[in] dwFlags Flags, optional.
+*
+* \remarks
+*
+* As of v.1.3.1, this function is deprecated and may be removed in one of the next releases. Use
+* \ref crAddScreenshot2() function instead.
+*
+* This function can be used to take a screenshot at the moment of crash and add it to the error report.
+* Screenshot information may help the developer to better understand the state of the application
+* at the moment of crash and reproduce the error.
+*
+* When this function is called, screenshot flags are saved,
+* then the function returns control to the caller.
+* When crash occurs, screenshot is made by the \b CrashSender.exe process and added to the report.
+*
+* \b dwFlags
+*
+* - \ref CR_AS_ALLOW_DELETE If this flag is specified, the user will be able to delete the file from error report using context menu of Error Report Details dialog.
+*
+* Use one of the following constants to specify what part of virtual screen to capture:
+* - \ref CR_AS_VIRTUAL_SCREEN Use this to take a screenshot of the whole desktop (virtual screen).
+* - \ref CR_AS_MAIN_WINDOW Use this to take a screenshot of the application's main window.
+* - \ref CR_AS_PROCESS_WINDOWS Use this to take a screenshot of all visible windows that belong to the process.
+*
+* The main application window is a window that has a caption (\b WS_CAPTION), system menu (\b WS_SYSMENU) and
+* the \b WS_EX_APPWINDOW extended style. If CrashRpt doesn't find such window, it considers the first found process window as
+* the main window.
+*
+* Screenshots are added in form of PNG files by default. You can specify the \ref CR_AS_USE_JPEG_FORMAT flag to save
+* screenshots as JPEG files instead.
+*
+* In addition, you can specify the \ref CR_AS_GRAYSCALE_IMAGE flag to make a grayscale screenshot
+* (by default color image is made). Grayscale image gives smaller file size.
+*
+* If you use JPEG image format, you may better use the \ref crAddScreenshot2() function, that allows to
+* define JPEG image quality.
+*
+* When capturing entire desktop consisting of several monitors,
+* one screenshot file is added per each monitor.
+*
+* You should be careful when using this feature, because screenshots may contain user-identifying
+* or private information. Always specify purposes you will use collected
+* information for in your Privacy Policy.
+*
+* \sa
+* crAddFile2()
+*/
CRASHRPTAPI(int)
crAddScreenshot(
- DWORD dwFlags
- );
+ DWORD dwFlags
+ );
/*! \ingroup CrashRptAPI
- * \brief Adds a screenshot to the crash report.
- *
- * \return This function returns zero if succeeded. Use crGetLastErrorMsg() to retrieve the error message on fail.
- *
- * \param[in] dwFlags Flags, optional.
- * \param[in] nJpegQuality Defines the JPEG image quality, optional.
- *
- * \remarks
- *
- * This function can be used to take a screenshot at the moment of crash and add it to the error report.
- * Screenshot information may help the developer to better understand state of the application
- * at the moment of crash and reproduce the error.
- *
- * When this function is called, screenshot flags are saved, then the function returns control to the caller.
- * When crash occurs, screenshot is made by the \b CrashSender.exe process and added to the report.
- *
- * \b dwFlags
- *
- * Use one of the following constants to specify what part of virtual screen to capture:
- * - \ref CR_AS_VIRTUAL_SCREEN Use this to take a screenshot of the whole desktop (virtual screen).
- * - \ref CR_AS_MAIN_WINDOW Use this to take a screenshot of the main application main window.
- * - \ref CR_AS_PROCESS_WINDOWS Use this to take a screenshot of all visible windows that belong to the process.
- *
- * The main application window is a window that has a caption (\b WS_CAPTION), system menu (\b WS_SYSMENU) and
- * the \b WS_EX_APPWINDOW extended style. If CrashRpt doesn't find such window, it considers the first found process window as
- * the main window.
- *
- * Screenshots are added in form of PNG files by default. You can specify the \ref CR_AS_USE_JPEG_FORMAT flag to save
- * screenshots as JPEG files instead.
- *
- * If you use JPEG format, you can use the \a nJpegQuality parameter to define the JPEG image quality.
- * This should be the number between 0 and 100, inclusively. The bigger the number, the better the quality and the bigger the JPEG file size.
- * If you use PNG file format, this parameter is ignored.
- *
- * In addition, you can specify the \ref CR_AS_GRAYSCALE_IMAGE flag to make a grayscale screenshot
- * (by default color image is made). Grayscale image gives smaller file size.
- *
- * When capturing entire desktop consisting of several monitors,
- * one screenshot file is added per each monitor.
- *
- * You should be careful when using this feature, because screenshots may contain user-identifying
- * or private information. Always specify purposes you will use collected
- * information for in your Privacy Policy.
- *
- * \sa
- * crAddFile2()
- */
+* \brief Adds a screenshot to the crash report.
+*
+* \return This function returns zero if succeeded. Use crGetLastErrorMsg() to retrieve the error message on fail.
+*
+* \param[in] dwFlags Flags, optional.
+* \param[in] nJpegQuality Defines the JPEG image quality, optional.
+*
+* \remarks
+*
+* This function can be used to take a screenshot at the moment of crash and add it to the error report.
+* Screenshot information may help the developer to better understand state of the application
+* at the moment of crash and reproduce the error.
+*
+* When this function is called, screenshot flags are saved, then the function returns control to the caller.
+* When crash occurs, screenshot is made by the \b CrashSender.exe process and added to the report.
+*
+* \b dwFlags
+*
+* Use one of the following constants to specify what part of virtual screen to capture:
+* - \ref CR_AS_VIRTUAL_SCREEN Use this to take a screenshot of the whole desktop (virtual screen).
+* - \ref CR_AS_MAIN_WINDOW Use this to take a screenshot of the main application main window.
+* - \ref CR_AS_PROCESS_WINDOWS Use this to take a screenshot of all visible windows that belong to the process.
+*
+* The main application window is a window that has a caption (\b WS_CAPTION), system menu (\b WS_SYSMENU) and
+* the \b WS_EX_APPWINDOW extended style. If CrashRpt doesn't find such window, it considers the first found process window as
+* the main window.
+*
+* Screenshots are added in form of PNG files by default. You can specify the \ref CR_AS_USE_JPEG_FORMAT flag to save
+* screenshots as JPEG files instead.
+*
+* If you use JPEG format, you can use the \a nJpegQuality parameter to define the JPEG image quality.
+* This should be the number between 0 and 100, inclusively. The bigger the number, the better the quality and the bigger the JPEG file size.
+* If you use PNG file format, this parameter is ignored.
+*
+* In addition, you can specify the \ref CR_AS_GRAYSCALE_IMAGE flag to make a grayscale screenshot
+* (by default color image is made). Grayscale image gives smaller file size.
+*
+* When capturing entire desktop consisting of several monitors,
+* one screenshot file is added per each monitor.
+*
+* You should be careful when using this feature, because screenshots may contain user-identifying
+* or private information. Always specify purposes you will use collected
+* information for in your Privacy Policy.
+*
+* \sa
+* crAddFile2()
+*/
CRASHRPTAPI(int)
crAddScreenshot2(
- DWORD dwFlags,
- int nJpegQuality
- );
+ DWORD dwFlags,
+ int nJpegQuality
+ );
+
+// Flags for crAddVideo function.
+#define CR_AV_VIRTUAL_SCREEN 0 //!< Capture the whole virtual screen.
+#define CR_AV_MAIN_WINDOW 1 //!< Capture the area of application's main window.
+#define CR_AV_PROCESS_WINDOWS 2 //!< Capture all visible process windows.
+#define CR_AV_QUALITY_LOW 0 //!< Low quality video encoding, smaller file size.
+#define CR_AV_QUALITY_GOOD 4 //!< Good encoding quality, larger file size.
+#define CR_AV_QUALITY_BEST 8 //!< The best encoding quality, the largest file size.
+#define CR_AV_NO_GUI 16 //!< Do not display the notification dialog.
+#define CR_AV_ALLOW_DELETE 32 //!< If this flag is specified, the file will be deletable from context menu of Error Report Details dialog.
+
+/*! \ingroup CrashRptAPI
+* \brief Allows to record what happened before crash to a video file and include the file to crash report.
+*
+* \return This function returns zero if succeeded. Use \ref crGetLastErrorMsg() to retrieve the error message on failure.
+*
+* \param[in] dwFlags Flags, optional.
+* \param[in] nDuration Video duration (in milliseconds). Optional.
+* \param[in] nFrameInterval Interval between subsequent frames (in milliseconds). Optional.
+* \param[in] pDesiredFrameSize Defines the desired video frame size, optional.
+* \param[in] hWndParent Window that becomes the parent for GUI displayed by this function. Optional.
+*
+* \remarks
+*
+* This function is available as of v.1.4.0.
+*
+* \b dwFlags can be a combination of the following constants:
+*
+* - use one of the following constants to specify what part of virtual screen to capture:
+* - \ref CR_AV_VIRTUAL_SCREEN Use this to capture the whole desktop (virtual screen). This is the default.
+* - \ref CR_AV_MAIN_WINDOW Use this to capture the application's main window.
+* - \ref CR_AV_PROCESS_WINDOWS Use this to capture all visible windows that belong to the process.
+*
+* - use one of the following constants to define the desired video encoding quality:
+* - \ref CR_AV_QUALITY_LOW Low-quality video encoding. This is the default.
+* - \ref CR_AV_QUALITY_GOOD Good encoding quality, larger file.
+* - \ref CR_AV_QUALITY_BEST The best encoding quality, the largest file.
+*
+* - use the \ref CR_AV_ALLOW_DELETE to allow the user to delete the recorded video file from error report using context menu of Error Report Details dialog.
+*
+* The main application window is a window that has a caption (\b WS_CAPTION), system menu (\b WS_SYSMENU) and
+* the \b WS_EX_APPWINDOW extended style. If CrashRpt doesn't find such a window, it considers the first found process window as
+* the main window.
+*
+* When the function is called, it displays a dialog notifying the user about video recording.
+* The displayed dialog's parent window can be specified with the \b hWndParent argument.
+* If the \b hWndParent is \a NULL, the currently active process window becomes the parent.
+* If you do not want to display the dialog, specify the \ref CR_AV_NO_GUI flag for \b dwFlags argument.
+*
+* The recorded video will be maximum \b nDuration milliseconds long with \b nFrameInterval
+* milliseconds interval between subsequent video frames. If \b nDuration and\or \b nFrameInterval
+* are set to zero (0), the default implementation-defined duration and frame interval are used.
+*
+* The \b pDesiredFrameSize parameter allows to define the desired video frame size.
+* Frame width and height must be a multiple of 16 (OGG Theora video codec's requirement).
+* If they are not, they are modified automatically to be a multiple of 16.
+*
+* To preserve correct aspect ratio of the captured area, set \b pDesiredFrameSize->cx or \b pDesiredFrameSize->cy
+* to zero. For example, setting \b pDesiredFrameSize->cx=640 and \b pDesiredFrameSize->cy=0
+* results in video frames whose width is 640 pixels and height is calculated to preserve the
+* correct aspect ratio of the captured area. If both \b cx and \b cy are specified, the aspect ratio
+* of the captured area is not preserved.
+*
+* Setting the \b pDesiredFrameSize
+* parameter to \a NULL makes the function to determine the best video frame size automatically.
+*
+* This function can be used to record the state of end user's desktop just before the moment
+* of crash and add the video file to the error report. The recorded information may help the
+* software vendor to better understand the state of the client application at the moment of
+* crash and reproduce the error.
+*
+* When this function is called, CrashRpt launches another process named \b CrashSender.exe.
+* The \b CrashSender.exe process then continuously captures the desktop screenshots in background
+* mode and stores them to disk as image files. To avoid high CPU load, image files are stored
+* in uncompressed state as raw bitmap (BMP) files. When the count of screenshot files exceeds
+* the predefined maximum number, the old screenshot files are reused cyclically.
+*
+* If the client application does not crash and its main code or main window loop exits successfully,
+* the captured desktop screenshot files are removed by the \ref crUninstall() function call and
+* \b CrashSender.exe process is terminated.
+*
+* If the client application crashes at some moment of time, the recorded screenshot files are compressed by
+* <a href="http://www.theora.org/">OGG Theora video codec</a> and written into an .OGG file. The
+* uncompressed temporary screenshots are then removed, and the resulting
+* OGG file is included into crash report archive.
+*
+* The <a href="http://en.wikipedia.org/wiki/Ogg">OGG video format</a> is a widely used
+* video container provided by the open-source OGG Project.
+* OGG files can be opened in a browser like Google Chrome or Mozilla Firefox or in
+* another video player understanding this format, like ffmpeg.
+*
+* Use this function only when necessary, because it may cause end user's computer performance
+* loss. It also requires some amount of free disk space.
+*
+* The recorded video may contain user-identifying or private information. Always
+* specify the purposes you will use collected information for in your Privacy Policy.
+*
+* Usage example:
+*
+* \code
+*
+* // First install CrashRpt with crInstall() function
+*
+* ...
+*
+* SIZE FrameSize = {0, 600}; // Frames 600 px in height
+* // Frame width is calculated automatically
+*
+* // Start capturing desktop. Desktop capture video will
+* // be added to crash report on crash
+* int nResult = crAddVideo(
+* CR_AV_VIRTUAL_SCREEN|CR_AV_QUALITY_GOOD, // Capture entire desktop
+* // Good encoding quality
+* 10000, // 10 seconds long video
+* 300, // 300 msec between frames (3.33 FPS)
+* &FrameSize,
+* NULL
+* );
+*
+* \endcode
+*
+* \sa
+* crAddFile2(), crAddScreenshot2(), crAddRegKey(), crUninstall().
+*/
+
+CRASHRPTAPI(int)
+crAddVideo(
+ DWORD dwFlags,
+ int nDuration,
+ int nFrameInterval,
+ PSIZE pDesiredFrameSize,
+ HWND hWndParent
+ );
/*! \ingroup CrashRptAPI
- * \brief Adds a string property to the crash report.
- *
- * \return This function returns zero if succeeded. Use crGetLastErrorMsg() to retrieve the error message on fail.
- *
- * \param[in] pszPropName Name of the property, required.
- * \param[in] pszPropValue Value of the property, required.
- *
- * \remarks
- *
- * Use this function to add a string property to the crash description XML file.
- * User-added properties are listed under \<CustomProps\> tag of the XML file.
- *
- * The following example shows how to add information about the amount of free disk space to the crash
- * description XML file:
- * \code
- * // It is assumed that you already calculated the amount of free disk space, converted it to text
- * // and store it as szFreeSpace string.
- * LPCTSTR szFreeSpace = _T("0 Kb");
- * crAddProperty(_T("FreeDiskSpace"), szFreeSpace);
- *
- * \endcode
- *
- * \sa
- * crAddFile2(), crAddScreenshot()
- */
+* \brief Adds a string property to the crash report.
+*
+* \return This function returns zero if succeeded. Use crGetLastErrorMsg() to retrieve the error message on fail.
+*
+* \param[in] pszPropName Name of the property, required.
+* \param[in] pszPropValue Value of the property, required.
+*
+* \remarks
+*
+* Use this function to add a string property to the crash description XML file.
+* User-added properties are listed under \<CustomProps\> tag of the XML file.
+* In the XML file properties are ordered by names in alphabetic order.
+*
+* The following example shows how to add information about the amount of free disk space
+* to the crash description XML file:
+*
+* \code
+* // It is assumed that you already calculated the amount of free disk space,
+* // converted it to text and stored it as szFreeSpace string.
+* LPCTSTR szFreeSpace = _T("0 Kb");
+* crAddProperty(_T("FreeDiskSpace"), szFreeSpace);
+*
+* \endcode
+*
+* \sa
+* crAddFile2(), crAddScreenshot()
+*/
CRASHRPTAPI(int)
crAddPropertyW(
- LPCWSTR pszPropName,
- LPCWSTR pszPropValue
- );
+ LPCWSTR pszPropName,
+ LPCWSTR pszPropValue
+ );
/*! \ingroup CrashRptAPI
- * \copydoc crAddPropertyW()
- */
+* \copydoc crAddPropertyW()
+*/
CRASHRPTAPI(int)
crAddPropertyA(
- LPCSTR pszPropName,
- LPCSTR pszPropValue
- );
+ LPCSTR pszPropName,
+ LPCSTR pszPropValue
+ );
/*! \brief Character set-independent mapping of crAddPropertyW() and crAddPropertyA() functions.
- * \ingroup CrashRptAPI
- */
+* \ingroup CrashRptAPI
+*/
#ifdef UNICODE
#define crAddProperty crAddPropertyW
#else
#define crAddProperty crAddPropertyA
#endif //UNICODE
+// Flags that can be passed to crAddRegKey() function
+#define CR_AR_ALLOW_DELETE 0x1 //!< If this flag is specified, the file will be deletable from context menu of Error Report Details dialog.
+
/*! \ingroup CrashRptAPI
- * \brief Adds a registry key dump to the crash report.
- *
- * \return This function returns zero if succeeded. Use crGetLastErrorMsg() to retrieve the error message on fail.
- *
- * \param[in] pszRegKey Registry key to dump, required.
- * \param[in] pszDstFileName Name of the destination file, required.
- * \param[in] dwFlags Flags, reserved.
- *
- * \remarks
- *
- * Use this function to add a dump of a Windows registry key into the crash report. This function
- * is available since v.1.2.6.
- *
- * The \a pszRegKey parameter must be the name of the registry key. The key name should begin with "HKEY_CURRENT_USER"
- * or "HKEY_LOCAL_MACHINE". Other root keys are not supported.
- *
- * The content of the key specified by the \a pszRegKey parameter will be stored in a human-readable XML
- * format and included into the error report as \a pszDstFileName destination file. You can dump multiple registry keys
- * to the same destination file.
- *
- * The \a dwFlags parameter is reserved for future use and should be set to zero.
- *
- * The following example shows how to dump two registry keys to \b regkey.xml file:
- *
- * \code
- *
- * crAddRegKey(_T("HKEY_CURRENT_USER\\Software\\MyApp"), _T("regkey.xml"), 0);
- * crAddRegKey(_T("HKEY_LOCAL_MACHINE\\Software\\MyApp"), _T("regkey.xml"), 0);
- *
- * \endcode
- *
- * \sa
- * crAddFile2(), crAddScreenshot(), crAddProperty()
- */
+* \brief Adds a registry key dump to the crash report.
+*
+* \return This function returns zero if succeeded. Use crGetLastErrorMsg() to retrieve the error message on fail.
+*
+* \param[in] pszRegKey Registry key to dump, required.
+* \param[in] pszDstFileName Name of the destination file, required.
+* \param[in] dwFlags Flags, reserved.
+*
+* \remarks
+*
+* Use this function to add a dump of a Windows registry key into the crash report. This function
+* is available since v.1.2.6.
+*
+* The \a pszRegKey parameter must be the name of the registry key. The key name should begin with "HKEY_CURRENT_USER"
+* or "HKEY_LOCAL_MACHINE". Other root keys are not supported.
+*
+* The content of the key specified by the \a pszRegKey parameter will be stored in a human-readable XML
+* format and included into the error report as \a pszDstFileName destination file. You can dump multiple registry keys
+* to the same destination file.
+*
+* The \a dwFlags parameter can be either set to zero (no flags) or with the following constant:
+*
+* - \ref CR_AR_ALLOW_DELETE allows the user to delete the file from error report using context menu of Error Report Details dialog.
+*
+* The following example shows how to dump two registry keys to a single \a regkey.xml file:
+*
+* \code
+*
+* crAddRegKey(_T("HKEY_CURRENT_USER\\Software\\MyApp"), _T("regkey.xml"), 0);
+* crAddRegKey(_T("HKEY_LOCAL_MACHINE\\Software\\MyApp"), _T("regkey.xml"), 0);
+*
+* \endcode
+*
+* \sa
+* crAddFile2(), crAddScreenshot(), crAddProperty()
+*/
CRASHRPTAPI(int)
crAddRegKeyW(
- LPCWSTR pszRegKey,
- LPCWSTR pszDstFileName,
- DWORD dwFlags
- );
+ LPCWSTR pszRegKey,
+ LPCWSTR pszDstFileName,
+ DWORD dwFlags
+ );
/*! \ingroup CrashRptAPI
- * \copydoc crAddRegKeyW()
- */
+* \copydoc crAddRegKeyW()
+*/
CRASHRPTAPI(int)
crAddRegKeyA(
- LPCSTR pszRegKey,
- LPCSTR pszDstFileName,
- DWORD dwFlags
- );
+ LPCSTR pszRegKey,
+ LPCSTR pszDstFileName,
+ DWORD dwFlags
+ );
/*! \brief Character set-independent mapping of crAddRegKeyW() and crAddRegKeyA() functions.
- * \ingroup CrashRptAPI
- */
+* \ingroup CrashRptAPI
+*/
#ifdef UNICODE
#define crAddRegKey crAddRegKeyW
#else
#define crAddRegKey crAddRegKeyA
#endif //UNICODE
-// Exception types
-#define CR_WIN32_STRUCTURED_EXCEPTION 0 //!< SEH exception (deprecated name, use \ref CR_SEH_EXCEPTION instead).
-#define CR_SEH_EXCEPTION 0 //!< SEH exception.
-#define CR_CPP_TERMINATE_CALL 1 //!< C++ terminate() call.
-#define CR_CPP_UNEXPECTED_CALL 2 //!< C++ unexpected() call.
-#define CR_CPP_PURE_CALL 3 //!< C++ pure virtual function call (VS .NET and later).
-#define CR_CPP_NEW_OPERATOR_ERROR 4 //!< C++ new operator fault (VS .NET and later).
-#define CR_CPP_SECURITY_ERROR 5 //!< Buffer overrun error (VS .NET only).
-#define CR_CPP_INVALID_PARAMETER 6 //!< Invalid parameter exception (VS 2005 and later).
-#define CR_CPP_SIGABRT 7 //!< C++ SIGABRT signal (abort).
-#define CR_CPP_SIGFPE 8 //!< C++ SIGFPE signal (flotating point exception).
-#define CR_CPP_SIGILL 9 //!< C++ SIGILL signal (illegal instruction).
-#define CR_CPP_SIGINT 10 //!< C++ SIGINT signal (CTRL+C).
-#define CR_CPP_SIGSEGV 11 //!< C++ SIGSEGV signal (invalid storage access).
-#define CR_CPP_SIGTERM 12 //!< C++ SIGTERM signal (termination request).
-
-
-/*! \ingroup CrashRptStructs
- *
- * This structure defines the information needed to generate crash minidump file and
- * provide the developer with other information about the error. This structure is used by
- * the crGenerateErrorReport() function.
- *
- * \b cb [in]
- *
- * This must contain the size of this structure in bytes.
- *
- * \b pexcptrs [in, optional]
- *
- * Should contain the exception pointers. If this parameter is NULL,
- * the current CPU state is used to generate exception pointers.
- *
- * \b exctype [in]
- *
- * The type of exception. This parameter may be one of the following:
- * - \ref CR_SEH_EXCEPTION SEH (Structured Exception Handling) exception
- * - \ref CR_CPP_TERMINATE_CALL C++ terminate() function call
- * - \ref CR_CPP_UNEXPECTED_CALL C++ unexpected() function call
- * - \ref CR_CPP_PURE_CALL Pure virtual method call (Visual Studio .NET 2003 and later)
- * - \ref CR_CPP_NEW_OPERATOR_ERROR C++ 'new' operator error (Visual Studio .NET 2003 and later)
- * - \ref CR_CPP_SECURITY_ERROR Buffer overrun (Visual Studio .NET 2003 only)
- * - \ref CR_CPP_INVALID_PARAMETER Invalid parameter error (Visual Studio 2005 and later)
- * - \ref CR_CPP_SIGABRT C++ SIGABRT signal
- * - \ref CR_CPP_SIGFPE C++ floating point exception
- * - \ref CR_CPP_SIGILL C++ illegal instruction
- * - \ref CR_CPP_SIGINT C++ SIGINT signal
- * - \ref CR_CPP_SIGSEGV C++ invalid storage access
- * - \ref CR_CPP_SIGTERM C++ termination request
- *
- * \b code [in, optional]
- *
- * Used if \a exctype is \ref CR_SEH_EXCEPTION and represents the SEH exception code.
- * If \a pexptrs is NULL, this value is used when generating exception information for initializing
- * \c pexptrs->ExceptionRecord->ExceptionCode member, otherwise it is ignored.
- *
- * \b fpe_subcode [in, optional]
- *
- * Used if \a exctype is equal to \ref CR_CPP_SIGFPE. It defines the floating point
- * exception subcode (see \c signal() function ducumentation in MSDN).
- *
- * \b expression, \b function, \b file and \b line [in, optional]
- *
- * These parameters are used when \a exctype is \ref CR_CPP_INVALID_PARAMETER.
- * These members are typically non-zero when using debug version of CRT.
- *
- * \b bManual [in]
- *
- * Since v.1.2.4, \a bManual parameter should be equal to TRUE if the report is generated manually.
- * The value of \a bManual parameter affects the automatic application restart behavior. If the application
- * restart is requested by the \ref CR_INST_APP_RESTART flag of CR_INSTALL_INFO::dwFlags structure member,
- * and if \a bManual is FALSE, the application will be
- * restarted after error report generation. If \a bManual is TRUE, the application won't be restarted.
- *
- * \b hSenderProcess [out]
- *
- * As of v.1.2.8, \a hSenderProcess parameter will contain the handle to the <b>CrashSender.exe</b> process when
- * \ref crGenerateErrorReport function returns. The caller may use this handle to wait until <b>CrashSender.exe</b>
- * process exits and check the exit code.
- */
-
-typedef struct tagCR_EXCEPTION_INFO
-{
- WORD cb; //!< Size of this structure in bytes; should be initialized before using.
- PEXCEPTION_POINTERS pexcptrs; //!< Exception pointers.
- int exctype; //!< Exception type.
- DWORD code; //!< Code of SEH exception.
- unsigned int fpe_subcode; //!< Floating point exception subcode.
- const wchar_t* expression; //!< Assertion expression.
- const wchar_t* function; //!< Function in which assertion happened.
- const wchar_t* file; //!< File in which assertion happened.
- unsigned int line; //!< Line number.
- BOOL bManual; //!< Flag telling if the error report is generated manually or not.
- HANDLE hSenderProcess; //!< Handle to the CrashSender.exe process.
-}
-CR_EXCEPTION_INFO;
-
-typedef CR_EXCEPTION_INFO *PCR_EXCEPTION_INFO;
-
/*! \ingroup CrashRptAPI
- * \brief Manually generates an errror report.
- *
- * \return This function returns zero if succeeded. When failed, it returns a non-zero value.
- * Use crGetLastErrorMsg() to retrieve the error message.
- *
- * \param[in] pExceptionInfo Exception information.
- *
- * \remarks
- *
- * Call this function to manually generate a crash report. When crash information is collected,
- * control is returned to the caller. The crGenerateErrorReport() doesn't terminate the caller process.
- *
- * The crash report contains crash minidump, crash description in XML format and
- * additional custom files added with crAddFile2().
- *
- * The exception information should be passed using \ref CR_EXCEPTION_INFO structure.
- *
- * The following example shows how to use crGenerateErrorReport() function.
- *
- * \code
- * CR_EXCEPTION_INFO ei;
- * memset(&ei, 0, sizeof(CR_EXCEPTION_INFO));
- * ei.cb = sizeof(CR_EXCEPTION_INFO);
- * ei.exctype = CR_SEH_EXCEPTION;
- * ei.code = 1234;
- * ei.pexcptrs = NULL;
- *
- * int result = crGenerateErrorReport(&ei);
- *
- * if(result!=0)
- * {
- * // If goes here, crGenerateErrorReport() has failed
- * // Get the last error message
- * TCHAR szErrorMsg[256];
- * crGetLastErrorMsg(szErrorMsg, 256);
- * }
- *
- * // Manually terminate program
- * ExitProcess(0);
- *
- * \endcode
- */
+* \brief Manually generates an error report.
+*
+* \return This function returns zero if succeeded. When failed, it returns a non-zero value.
+* Use crGetLastErrorMsg() function to retrieve the error message.
+*
+* \param[in] pExceptionInfo Exception information.
+*
+* \remarks
+*
+* Call this function to manually generate a crash report. When crash information is collected,
+* control is returned to the caller. The crGenerateErrorReport() doesn't terminate the caller process.
+*
+* The crash report may contain the crash minidump file, crash description file in XML format and
+* additional custom files added with a function like crAddFile2().
+*
+* The exception information should be passed using \ref CR_EXCEPTION_INFO structure.
+*
+* The following example shows how to use crGenerateErrorReport() function.
+*
+* \code
+* CR_EXCEPTION_INFO ei;
+* memset(&ei, 0, sizeof(CR_EXCEPTION_INFO));
+* ei.cb = sizeof(CR_EXCEPTION_INFO);
+* ei.exctype = CR_SEH_EXCEPTION;
+* ei.code = 1234;
+* ei.pexcptrs = NULL;
+*
+* int result = crGenerateErrorReport(&ei);
+*
+* if(result!=0)
+* {
+* // If goes here, crGenerateErrorReport() has failed
+* // Get the last error message
+* TCHAR szErrorMsg[256];
+* crGetLastErrorMsg(szErrorMsg, 256);
+* }
+*
+* // Manually terminate program
+* ExitProcess(0);
+*
+* \endcode
+*/
CRASHRPTAPI(int)
crGenerateErrorReport(
- __in_opt CR_EXCEPTION_INFO* pExceptionInfo
- );
+ __in_opt CR_EXCEPTION_INFO* pExceptionInfo
+ );
-
-/*! \ingroup DeprecatedAPI
- * \brief Can be used as a SEH exception filter.
- *
- * \return This function returns \c EXCEPTION_EXECUTE_HANDLER if succeeds, else \c EXCEPTION_CONTINUE_SEARCH.
- *
- * \param[in] code Exception code.
- * \param[in] ep Exception pointers.
- *
- * \remarks
- *
- * As of v.1.2.8, this function is declared deprecated. It may be removed in one of the future releases.
- *
- * This function can be called instead of a SEH exception filter
- * inside of __try{}__except(Expression){} statement. The function generates a error report
- * and returns control to the exception handler block.
- *
- * The exception code is usually retrieved with \b GetExceptionCode() intrinsic function
- * and the exception pointers are retrieved with \b GetExceptionInformation() intrinsic
- * function.
- *
- * If an error occurs, this function returns \c EXCEPTION_CONTINUE_SEARCH.
- * Use crGetLastErrorMsg() to retrieve the error message on fail.
- *
- * The following example shows how to use crExceptionFilter().
- *
- * \code
- * int* p = NULL; // pointer to NULL
- * __try
- * {
- * *p = 13; // causes an access violation exception;
- * }
- * __except(crExceptionFilter(GetExceptionCode(), GetExceptionInformation()))
- * {
- * // Terminate program
- * ExitProcess(1);
- * }
- *
- * \endcode
- */
+/*! \ingroup CrashRptAPI
+* \brief Can be used as a SEH exception filter.
+*
+* \return This function returns \c EXCEPTION_EXECUTE_HANDLER if succeeds; otherwise \c EXCEPTION_CONTINUE_SEARCH.
+*
+* \param[in] code Exception code.
+* \param[in] ep Exception pointers.
+*
+* \remarks
+*
+* This function can be called instead of a SEH exception filter
+* inside of __try{}__except(Expression){} construction. The function generates an error report
+* and returns control to the exception handler block.
+*
+* The exception code is usually retrieved with \b GetExceptionCode() intrinsic function
+* and the exception pointers are retrieved with \b GetExceptionInformation() intrinsic
+* function.
+*
+* If an error occurs, this function returns \c EXCEPTION_CONTINUE_SEARCH.
+* Use crGetLastErrorMsg() to retrieve the error message on fail.
+*
+* The following example shows how to use crExceptionFilter().
+*
+* \code
+* int* p = NULL; // pointer to NULL
+* __try
+* {
+* *p = 13; // causes an access violation exception;
+* }
+* __except(crExceptionFilter(GetExceptionCode(), GetExceptionInformation()))
+* {
+* // Terminate program
+* ExitProcess(1);
+* }
+*
+* \endcode
+*/
CRASHRPTAPI(int)
crExceptionFilter(
- unsigned int code,
- __in_opt struct _EXCEPTION_POINTERS* ep);
+ unsigned int code,
+ __in_opt struct _EXCEPTION_POINTERS* ep);
+
+// Flags used by crEmulateCrash() function
#define CR_NONCONTINUABLE_EXCEPTION 32 //!< Non continuable sofware exception.
#define CR_THROW 33 //!< Throw C++ typed exception.
+#define CR_STACK_OVERFLOW 34 //!< Stack overflow.
/*! \ingroup CrashRptAPI
- * \brief Emulates a predefined crash situation.
- *
- * \return This function doesn't return if succeded. If failed, returns non-zero value. Call crGetLastErrorMsg()
- * to get the last error message.
- *
- * \param[in] ExceptionType Type of crash.
- *
- * \remarks
- *
- * This function uses some a priori incorrect or vulnerable code or raises a C++ signal or raises an uncontinuable
- * software exception to cause crash.
- *
- * This function can be used to test if CrashRpt handles a crash situation correctly.
- *
- * CrashRpt will intercept an error or exception if crInstall() and/or crInstallToCurrentThread2()
- * were previously called. crInstall() installs exception handlers that function on per-process basis.
- * crInstallToCurrentThread2() installs exception handlers that function on per-thread basis.
- *
- * \a ExceptionType can be one of the following constants:
- * - \ref CR_SEH_EXCEPTION This will generate a null pointer exception.
- * - \ref CR_CPP_TERMINATE_CALL This results in call of terminate() C++ function.
- * - \ref CR_CPP_UNEXPECTED_CALL This results in call of unexpected() C++ function.
- * - \ref CR_CPP_PURE_CALL This emulates a call of pure virtual method call of a C++ class instance (Visual Studio .NET 2003 and later).
- * - \ref CR_CPP_NEW_OPERATOR_ERROR This emulates C++ new operator failure (Visual Studio .NET 2003 and later).
- * - \ref CR_CPP_SECURITY_ERROR This emulates copy of large amount of data to a small buffer (Visual Studio .NET 2003 only).
- * - \ref CR_CPP_INVALID_PARAMETER This emulates an invalid parameter C++ exception (Visual Studio 2005 and later).
- * - \ref CR_CPP_SIGABRT This raises SIGABRT signal (abnormal program termination).
- * - \ref CR_CPP_SIGFPE This causes floating point exception.
- * - \ref CR_CPP_SIGILL This raises SIGILL signal (illegal instruction signal).
- * - \ref CR_CPP_SIGINT This raises SIGINT signal.
- * - \ref CR_CPP_SIGSEGV This raises SIGSEGV signal.
- * - \ref CR_CPP_SIGTERM This raises SIGTERM signal (program termination request).
- * - \ref CR_NONCONTINUABLE_EXCEPTION This raises a noncontinuable software exception (expected result
- * is the same as in \ref CR_SEH_EXCEPTION).
- * - \ref CR_THROW This throws a C++ typed exception (expected result is the same as in \ref CR_CPP_TERMINATE_CALL).
- *
- * The \ref CR_SEH_EXCEPTION uses null pointer write operation to cause the access violation.
- *
- * The \ref CR_NONCONTINUABLE_EXCEPTION has the same effect as \ref CR_SEH_EXCEPTION, but it uses
- * \b RaiseException() WinAPI function to raise noncontinuable software exception.
- *
- * The following example shows how to use crEmulateCrash() function.
- *
- * \code
- * // emulate null pointer exception (access violation)
- * crEmulateCrash(CR_SEH_EXCEPTION);
- * \endcode
- *
- */
+* \brief Emulates a predefined crash situation.
+*
+* \return This function doesn't return if succeded. If failed, returns non-zero value. Call crGetLastErrorMsg()
+* to get the last error message.
+*
+* \param[in] ExceptionType Type of crash.
+*
+* \remarks
+*
+* This function uses some a priori incorrect or vulnerable code or raises a C++ signal or raises an uncontinuable
+* software exception to cause crash.
+*
+* This function can be used to test if CrashRpt handles a crash situation correctly.
+*
+* CrashRpt will intercept an error or exception if crInstall() and/or crInstallToCurrentThread2()
+* were previously called. crInstall() installs exception handlers that function on per-process basis.
+* crInstallToCurrentThread2() installs exception handlers that function on per-thread basis.
+*
+* \a ExceptionType can be one of the following constants:
+* - \ref CR_SEH_EXCEPTION This will generate a null pointer exception.
+* - \ref CR_CPP_TERMINATE_CALL This results in call of terminate() C++ function.
+* - \ref CR_CPP_UNEXPECTED_CALL This results in call of unexpected() C++ function.
+* - \ref CR_CPP_PURE_CALL This emulates a call of pure virtual method call of a C++ class instance (Visual Studio .NET 2003 and later).
+* - \ref CR_CPP_NEW_OPERATOR_ERROR This emulates C++ new operator failure (Visual Studio .NET 2003 and later).
+* - \ref CR_CPP_SECURITY_ERROR This emulates copy of large amount of data to a small buffer (Visual Studio .NET 2003 only).
+* - \ref CR_CPP_INVALID_PARAMETER This emulates an invalid parameter C++ exception (Visual Studio 2005 and later).
+* - \ref CR_CPP_SIGABRT This raises SIGABRT signal (abnormal program termination).
+* - \ref CR_CPP_SIGFPE This causes floating point exception.
+* - \ref CR_CPP_SIGILL This raises SIGILL signal (illegal instruction signal).
+* - \ref CR_CPP_SIGINT This raises SIGINT signal.
+* - \ref CR_CPP_SIGSEGV This raises SIGSEGV signal.
+* - \ref CR_CPP_SIGTERM This raises SIGTERM signal (program termination request).
+* - \ref CR_NONCONTINUABLE_EXCEPTION This raises a noncontinuable software exception (expected result
+* is the same as in \ref CR_SEH_EXCEPTION).
+* - \ref CR_THROW This throws a C++ typed exception (expected result is the same as in \ref CR_CPP_TERMINATE_CALL).
+* - \ref CR_STACK_OVERFLOW This causes stack overflow.
+*
+* The \ref CR_SEH_EXCEPTION uses null pointer write operation to cause the access violation.
+*
+* The \ref CR_NONCONTINUABLE_EXCEPTION has the same effect as \ref CR_SEH_EXCEPTION, but it uses
+* \b RaiseException() WinAPI function to raise noncontinuable software exception.
+*
+* The following example shows how to use crEmulateCrash() function.
+*
+* \code
+* // emulate null pointer exception (access violation)
+* crEmulateCrash(CR_SEH_EXCEPTION);
+* \endcode
+*
+*/
CRASHRPTAPI(int)
crEmulateCrash(
- unsigned ExceptionType) throw (...);
+ unsigned ExceptionType) throw (...);
/*! \ingroup CrashRptAPI
- * \brief Gets the last CrashRpt error message.
- *
- * \return This function returns length of error message in characters. If output buffer is invalid, returns a negative number.
- *
- * \param[out] pszBuffer Pointer to the buffer.
- * \param[in] uBuffSize Size of buffer in characters.
- *
- * \remarks
- *
- * This function gets the last CrashRpt error message. You can use this function
- * to retrieve the text status of the last called CrashRpt function.
- *
- * If buffer is too small for the error message, the message is truncated.
- *
- * crGetLastErrorMsgW() and crGetLastErrorMsgA() are wide-character and multi-byte character versions
- * of crGetLastErrorMsg(). The crGetLastErrorMsg() macro defines character set independent mapping.
- *
- * The following example shows how to use crGetLastErrorMsg() function.
- *
- * \code
- *
- * // .. call some CrashRpt function
- *
- * // Get the status message
- * TCHAR szErrorMsg[256];
- * crGetLastErrorMsg(szErrorMsg, 256);
- * \endcode
- *
- * \sa crGetLastErrorMsgA(), crGetLastErrorMsgW(), crGetLastErrorMsg()
- */
+* \brief Gets the last CrashRpt error message.
+*
+* \return This function returns length of error message in characters. If output buffer is invalid, returns a negative number.
+*
+* \param[out] pszBuffer Pointer to the buffer.
+* \param[in] uBuffSize Size of buffer in characters.
+*
+* \remarks
+*
+* This function gets the last CrashRpt error message. You can use this function
+* to retrieve the text status of the last called CrashRpt function.
+*
+* If buffer is too small for the error message, the message is truncated.
+*
+* crGetLastErrorMsgW() and crGetLastErrorMsgA() are wide-character and multi-byte character versions
+* of crGetLastErrorMsg(). The crGetLastErrorMsg() macro defines character set independent mapping.
+*
+* The following example shows how to use crGetLastErrorMsg() function.
+*
+* \code
+*
+* // .. call some CrashRpt function
+*
+* // Get the status message
+* TCHAR szErrorMsg[256];
+* crGetLastErrorMsg(szErrorMsg, 256);
+* \endcode
+*
+* \sa crGetLastErrorMsgA(), crGetLastErrorMsgW(), crGetLastErrorMsg()
+*/
CRASHRPTAPI(int)
crGetLastErrorMsgW(
- __out_ecount_z(uBuffSize) LPWSTR pszBuffer,
- UINT uBuffSize);
+ __out_ecount_z(uBuffSize) LPWSTR pszBuffer,
+ UINT uBuffSize);
/*! \ingroup CrashRptAPI
- * \copydoc crGetLastErrorMsgW()
- *
- */
+* \copydoc crGetLastErrorMsgW()
+*
+*/
CRASHRPTAPI(int)
crGetLastErrorMsgA(
- __out_ecount_z(uBuffSize) LPSTR pszBuffer,
- UINT uBuffSize);
+ __out_ecount_z(uBuffSize) LPSTR pszBuffer,
+ UINT uBuffSize);
/*! \brief Defines character set-independent mapping for crGetLastErrorMsgW() and crGetLastErrorMsgA().
- * \ingroup CrashRptAPI
- */
+* \ingroup CrashRptAPI
+*/
#ifdef UNICODE
#define crGetLastErrorMsg crGetLastErrorMsgW
@@ -1499,119 +1681,121 @@
#ifndef _CRASHRPT_NO_WRAPPERS
/*! \class CrAutoInstallHelper
- * \ingroup CrashRptWrappers
- * \brief Installs exception handlers in constructor and uninstalls in destructor.
- * \remarks
- * Use this class to easily install/uninstall exception handlers in you \b main()
- * or \b WinMain() function.
- *
- * This wrapper class calls crInstall() in its constructor and calls crUninstall() in
- * its destructor.
- *
- * Use CrAutoInstallHelper::m_nInstallStatus member to check the return status of crInstall().
- *
- * Example:
- *
- * \code
- * #include <CrashRpt.h>
- *
- * void main()
- * {
- * CR_INSTALL_INFO info;
- * memset(&info, 0, sizeof(CR_INSTALL_INFO));
- * info.cb = sizeof(CR_INSTALL_INFO);
- * info.pszAppName = _T("My App Name");
- * info.pszAppVersion = _T("1.2.3");
- * info.pszEmailSubject = "Error Report from My App v.1.2.3";
- * // The address to send reports by E-mail
- * info.pszEmailTo = _T("myname at hotmail.com");
- * // The URL to send reports via HTTP connection
- * info.pszUrl = _T("http://myappname.com/utils/crashrpt.php");
- * info.pfnCrashCallback = CrashCallback;
- * info.uPriorities[CR_HTTP] = 3; // Try HTTP first
- * info.uPriorities[CR_SMTP] = 2; // Try SMTP second
- * info.uPriorities[CR_SMAPI] = 1; // Try system email program last
- *
- * // Install crash reporting
- * CrAutoInstallHelper cr_install_helper(&info);
- * // Check that installed OK
- * assert(cr_install_helper.m_nInstallStatus==0);
- *
- * // Your code follows here ...
- *
- * }
- * \endcode
- */
+* \ingroup CrashRptWrappers
+* \brief Installs exception handlers in constructor and uninstalls in destructor.
+* \remarks
+* Use this class to easily install/uninstall exception handlers in you \b main()
+* or \b WinMain() function.
+*
+* This wrapper class calls crInstall() in its constructor and calls crUninstall() in
+* its destructor.
+*
+* Use CrAutoInstallHelper::m_nInstallStatus member to check the return status of crInstall().
+*
+* Example:
+*
+* \code
+* #include <CrashRpt.h>
+*
+* void main()
+* {
+* CR_INSTALL_INFO info;
+* memset(&info, 0, sizeof(CR_INSTALL_INFO));
+* info.cb = sizeof(CR_INSTALL_INFO);
+* info.pszAppName = _T("My App Name");
+* info.pszAppVersion = _T("1.2.3");
+* info.pszEmailSubject = "Error Report from My App v.1.2.3";
+* // The address to send reports by E-mail
+* info.pszEmailTo = _T("myname at hotmail.com");
+* // The URL to send reports via HTTP connection
+* info.pszUrl = _T("http://myappname.com/utils/crashrpt.php");
+* info.pfnCrashCallback = CrashCallback;
+* info.uPriorities[CR_HTTP] = 3; // Try HTTP first
+* info.uPriorities[CR_SMTP] = 2; // Try SMTP second
+* info.uPriorities[CR_SMAPI] = 1; // Try system email program last
+*
+* // Install crash reporting
+* CrAutoInstallHelper cr_install_helper(&info);
+* // Check that installed OK
+* assert(cr_install_helper.m_nInstallStatus==0);
+*
+* // Your code follows here ...
+*
+* }
+* \endcode
+*/
class CrAutoInstallHelper
{
public:
- //! Installs exception handlers to the caller process
- CrAutoInstallHelper(__in PCR_INSTALL_INFOA pInfo)
- {
- m_nInstallStatus = crInstallA(pInfo);
- }
-
- //! Installs exception handlers to the caller process
- CrAutoInstallHelper(__in PCR_INSTALL_INFOW pInfo)
- {
- m_nInstallStatus = crInstallW(pInfo);
- }
-
- //! Uninstalls exception handlers from the caller process
- ~CrAutoInstallHelper()
- {
- crUninstall();
- }
+ //! Installs exception handlers to the caller process
+ CrAutoInstallHelper(__in PCR_INSTALL_INFOA pInfo)
+ {
+ m_nInstallStatus = crInstallA(pInfo);
+ }
+
+ //! Installs exception handlers to the caller process
+ CrAutoInstallHelper(__in PCR_INSTALL_INFOW pInfo)
+ {
+ m_nInstallStatus = crInstallW(pInfo);
+ }
+
+ //! Uninstalls exception handlers from the caller process
+ ~CrAutoInstallHelper()
+ {
+ if(m_nInstallStatus==0)
+ crUninstall();
+ }
- //! Install status
- int m_nInstallStatus;
+ //! Install status
+ int m_nInstallStatus;
};
/*! \class CrThreadAutoInstallHelper
- * \ingroup CrashRptWrappers
- * \brief Installs (uninstalls) exception handlers for the caller thread in class' constructor (destructor).
- *
- * \remarks
- *
- * This wrapper class calls crInstallToCurrentThread2() in its constructor and
- * calls crUninstallFromCurrentThread() in its destructor.
- *
- * Use CrThreadAutoInstallHelper::m_nInstallStatus member to check
- * the return status of crInstallToCurrentThread2().
- *
- * Example:
- *
- * \code
- * DWORD WINAPI ThreadProc(LPVOID lpParam)
- * {
- * CrThreadAutoInstallHelper cr_thread_install_helper();
- * assert(cr_thread_install_helper.m_nInstallStatus==0);
- *
- * // Your code follows here ...
- * }
- * \endcode
- */
+* \ingroup CrashRptWrappers
+* \brief Installs (uninstalls) exception handlers for the caller thread in class' constructor (destructor).
+*
+* \remarks
+*
+* This wrapper class calls crInstallToCurrentThread2() in its constructor and
+* calls crUninstallFromCurrentThread() in its destructor.
+*
+* Use CrThreadAutoInstallHelper::m_nInstallStatus member to check
+* the return status of crInstallToCurrentThread2().
+*
+* Example:
+*
+* \code
+* DWORD WINAPI ThreadProc(LPVOID lpParam)
+* {
+* CrThreadAutoInstallHelper cr_thread_install_helper();
+* assert(cr_thread_install_helper.m_nInstallStatus==0);
+*
+* // Your code follows here ...
+* }
+* \endcode
+*/
class CrThreadAutoInstallHelper
{
public:
- //! Installs exception handlers to the caller thread
- CrThreadAutoInstallHelper(DWORD dwFlags=0)
- {
- m_nInstallStatus = crInstallToCurrentThread2(dwFlags);
- }
-
- //! Uninstalls exception handlers from the caller thread
- ~CrThreadAutoInstallHelper()
- {
- crUninstallFromCurrentThread();
- }
+ //! Installs exception handlers to the caller thread
+ CrThreadAutoInstallHelper(DWORD dwFlags=0)
+ {
+ m_nInstallStatus = crInstallToCurrentThread2(dwFlags);
+ }
+
+ //! Uninstalls exception handlers from the caller thread
+ ~CrThreadAutoInstallHelper()
+ {
+ if (m_nInstallStatus == 0)
+ crUninstallFromCurrentThread();
+ }
- //! Install status
- int m_nInstallStatus;
+ //! Install status
+ int m_nInstallStatus;
};
#endif //!_CRASHRPT_NO_WRAPPERS
Modified: trunk/GME/MgaUtil/MgaLauncher.cpp
==============================================================================
--- trunk/GME/MgaUtil/MgaLauncher.cpp Fri Oct 19 13:41:42 2018 (r2758)
+++ trunk/GME/MgaUtil/MgaLauncher.cpp Fri Oct 19 13:41:47 2018 (r2759)
@@ -15,9 +15,9 @@
#include "CrashRpt.h"
#ifdef _DEBUG
-#pragma comment(lib, "CrashRptd.lib")
+#pragma comment(lib, "CrashRpt1403.lib")
#else
-#pragma comment(lib, "CrashRpt.lib")
+#pragma comment(lib, "CrashRpt1403.lib")
#endif
Modified: trunk/GME/MgaUtil/MgaUtil.vcxproj
==============================================================================
--- trunk/GME/MgaUtil/MgaUtil.vcxproj Fri Oct 19 13:41:42 2018 (r2758)
+++ trunk/GME/MgaUtil/MgaUtil.vcxproj Fri Oct 19 13:41:47 2018 (r2759)
@@ -134,10 +134,10 @@
<ImageHasSafeExceptionHandlers>false</ImageHasSafeExceptionHandlers>
</Link>
<CustomBuildStep>
- <Command>xcopy /Y/D/F ..\Lib\CrashRpt\bin\CrashRpt.dll "$(OutDir)"</Command>
+ <Command>xcopy /Y/D/F ..\Lib\CrashRpt\bin\CrashRpt1403.dll "$(OutDir)"</Command>
</CustomBuildStep>
<CustomBuildStep>
- <Outputs>$(OutDir)CrashRpt.dll</Outputs>
+ <Outputs>$(OutDir)CrashRpt1403.dll</Outputs>
</CustomBuildStep>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
@@ -178,10 +178,10 @@
</DataExecutionPrevention>
</Link>
<CustomBuildStep>
- <Command>xcopy /Y/D/F ..\Lib\CrashRpt\bin\x64\CrashRpt.dll "$(OutDir)"</Command>
+ <Command>xcopy /Y/D/F ..\Lib\CrashRpt\bin\x64\CrashRpt1403.dll "$(OutDir)"</Command>
</CustomBuildStep>
<CustomBuildStep>
- <Outputs>$(OutDir)CrashRpt.dll</Outputs>
+ <Outputs>$(OutDir)CrashRpt1403.dll</Outputs>
</CustomBuildStep>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
@@ -216,12 +216,13 @@
<DataExecutionPrevention>
</DataExecutionPrevention>
<TargetMachine>MachineX86</TargetMachine>
+ <ImageHasSafeExceptionHandlers>false</ImageHasSafeExceptionHandlers>
</Link>
<CustomBuildStep>
- <Command>xcopy /Y/D/F ..\Lib\CrashRpt\bin\CrashRpt.dll "$(OutDir)"</Command>
+ <Command>xcopy /Y/D/F ..\Lib\CrashRpt\bin\CrashRpt1403.dll "$(OutDir)"</Command>
</CustomBuildStep>
<CustomBuildStep>
- <Outputs>$(OutDir)CrashRpt.dll</Outputs>
+ <Outputs>$(OutDir)CrashRpt1403.dll</Outputs>
</CustomBuildStep>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
@@ -257,10 +258,10 @@
</DataExecutionPrevention>
</Link>
<CustomBuildStep>
- <Command>xcopy /Y/D/F ..\Lib\CrashRpt\bin\x64\CrashRptd.dll "$(OutDir)"</Command>
+ <Command>xcopy /Y/D/F ..\Lib\CrashRpt\bin\x64\CrashRpt1403.dll "$(OutDir)"</Command>
</CustomBuildStep>
<CustomBuildStep>
- <Outputs>$(OutDir)CrashRpt.dll</Outputs>
+ <Outputs>$(OutDir)CrashRpt1403.dll</Outputs>
</CustomBuildStep>
</ItemDefinitionGroup>
<ItemGroup>
Modified: trunk/Install/GME_bin.wxs
==============================================================================
--- trunk/Install/GME_bin.wxs Fri Oct 19 13:41:42 2018 (r2758)
+++ trunk/Install/GME_bin.wxs Fri Oct 19 13:41:47 2018 (r2759)
@@ -204,13 +204,13 @@
</Component>
<Component Directory='INSTALLDIR_BIN$(sys.BUILDARCH)'>
- <File Id="CrashRpt.dll$(sys.BUILDARCH)" KeyPath="yes" Source="..\GME\lib\CrashRpt\$(var.bin)\CrashRpt.dll" />
+ <File Id="CrashRpt.dll$(sys.BUILDARCH)" KeyPath="yes" Source="..\GME\lib\CrashRpt\$(var.bin)\CrashRpt1403.dll" />
</Component>
<Component Directory='INSTALLDIR_BIN$(sys.BUILDARCH)'>
<File Id="crashrpt_lang.ini$(sys.BUILDARCH)" KeyPath="yes" Source="..\GME\lib\CrashRpt\bin\crashrpt_lang.ini" />
</Component>
<Component Directory='INSTALLDIR_BIN$(sys.BUILDARCH)'>
- <File Id="CrashSender.exe$(sys.BUILDARCH)" KeyPath="yes" Source="..\GME\lib\CrashRpt\$(var.bin)\CrashSender.exe" />
+ <File Id="CrashSender.exe$(sys.BUILDARCH)" KeyPath="yes" Source="..\GME\lib\CrashRpt\$(var.bin)\CrashSender1403.exe" />
</Component>
<Component Directory='INSTALLDIR$(sys.BUILDARCH)'>
<File Id="CrashRpt.license$(sys.BUILDARCH)" Name="CrashRpt.license" KeyPath="yes" Source="..\GME\lib\CrashRpt\License.txt" />
Modified: trunk/Install/GME_bundle.wxs
==============================================================================
--- trunk/Install/GME_bundle.wxs Fri Oct 19 13:41:42 2018 (r2758)
+++ trunk/Install/GME_bundle.wxs Fri Oct 19 13:41:47 2018 (r2759)
@@ -99,7 +99,7 @@
DownloadUrl="https://download.microsoft.com/download/9/7/7/977B481A-7BA6-4E30-AC40-ED51EB2028F2/vcredist_x64.exe"
/>
- <!-- needed for CrashRpt.dll, for libapr-1.dll, libeay32.dll, et al -->
+ <!-- needed for CrashRpt dll, for libapr-1.dll, libeay32.dll, et al -->
<ExePackage Id="vcredist_2010SP1_x86.exe"
Name="vc_redist.x86.$(var.Vc10RedistVersion).exe"
InstallCommand="/q /norestart"
@@ -117,7 +117,7 @@
DownloadUrl="https://download.microsoft.com/download/1/6/5/165255E7-1014-4D0A-B094-B6A430A6BFFC/vcredist_x86.exe"
/>
- <!-- needed for CrashRpt.dll -->
+ <!-- needed for CrashRpt dll -->
<ExePackage Id="vcredist_2010SP1_x64.exe"
Name="vc_redist.x64.$(var.Vc10RedistVersion).exe"
InstallCommand="/norestart /q"
More information about the gme-commit
mailing list