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

432 lines
13 KiB

//////////////////////////////////////////////////////////////////////////////
//
// Copyright (c) 2000 Microsoft Corporation
//
// Module Name:
// Exceptions.h
//
// Description:
// This file contains the declarations of many exception classes.
//
// Implementation File:
// None.
//
// Maintained By:
// Vij Vasu (Vvasu) 03-MAR-2000
//
//////////////////////////////////////////////////////////////////////////////
// Make sure that this file is included only once per compile path.
#pragma once
//////////////////////////////////////////////////////////////////////////////
// Include Files
//////////////////////////////////////////////////////////////////////////////
// For HRESULT, WCHAR, etc.
#include <windef.h>
// For the base class of all exceptions
#include "CException.h"
// For the CStr class
#include "CStr.h"
//////////////////////////////////////////////////////////////////////
// Macro Definitions
//////////////////////////////////////////////////////////////////////////////
//
// Shorthand for throwing different exceptions.
//
#define THROW_ASSERT( _hrErrorCode, _pszMessage ) \
throw CAssert( _hrErrorCode, TEXT( __FILE__ ), __LINE__, TEXT( _pszMessage ) )
#define THROW_RUNTIME_ERROR( _hrErrorCode, _stringId ) \
throw CRuntimeError( _hrErrorCode, TEXT( __FILE__ ), __LINE__, _stringId )
#define THROW_CONFIG_ERROR( _hrErrorCode, _stringId ) \
throw CConfigError( _hrErrorCode, TEXT( __FILE__ ), __LINE__, _stringId )
#define THROW_ABORT( _hrErrorCode, _stringId ) \
throw CAbortException( _hrErrorCode, TEXT( __FILE__ ), __LINE__, _stringId )
//////////////////////////////////////////////////////////////////////
// External variable declarations
//////////////////////////////////////////////////////////////////////////////
// Handle to the instance of this DLL
extern HINSTANCE g_hInstance;
//////////////////////////////////////////////////////////////////////////////
//++
//
// class CExceptionWithString
//
// Description:
// The class is a CException with an additional message string.
//
//--
//////////////////////////////////////////////////////////////////////////////
class CExceptionWithString : public CException
{
public:
//////////////////////////////////////////////////////////////////////////
// Public type definitions
//////////////////////////////////////////////////////////////////////////
typedef CException BaseClass;
//////////////////////////////////////////////////////////////////////////
// Public constructors and destructors
//////////////////////////////////////////////////////////////////////////
// Constructor ( string id overload )
CExceptionWithString(
HRESULT hrErrorCodeIn
, const WCHAR * pcszFileNameIn
, UINT uiLineNumberIn
, UINT uiErrorStringIdIn
) throw()
: BaseClass( hrErrorCodeIn, pcszFileNameIn, uiLineNumberIn )
, m_fHasUserBeenNotified( false )
{
AssignString( uiErrorStringIdIn );
}
// Constructor ( character string overload )
CExceptionWithString(
HRESULT hrErrorCodeIn
, const WCHAR * pcszFileNameIn
, UINT uiLineNumberIn
, const WCHAR * pcszErrorStringIn
) throw()
: BaseClass( hrErrorCodeIn, pcszFileNameIn, uiLineNumberIn )
, m_fHasUserBeenNotified( false )
{
AssignString( pcszErrorStringIn );
}
// Copy constructor.
CExceptionWithString( const CExceptionWithString & cesuSrcIn ) throw()
: BaseClass( cesuSrcIn )
, m_fHasUserBeenNotified( cesuSrcIn.m_fHasUserBeenNotified )
{
AssignString( cesuSrcIn.m_strErrorString );
}
// Default destructor.
~CExceptionWithString() throw() {}
//////////////////////////////////////////////////////////////////////////
// Public methods
//////////////////////////////////////////////////////////////////////////
// Assignment operator.
const CExceptionWithString &
operator =( const CExceptionWithString & cesuSrcIn ) throw()
{
*( static_cast< BaseClass * >( this ) ) = cesuSrcIn;
AssignString( cesuSrcIn.m_strErrorString );
m_fHasUserBeenNotified = cesuSrcIn.m_fHasUserBeenNotified;
return *this;
}
//
// Accessor methods.
//
const CStr &
StrGetErrorString() const throw() { return m_strErrorString; }
void
SetErrorString( const WCHAR * pcszSrcIn ) throw()
{
AssignString( pcszSrcIn );
}
bool
FHasUserBeenNotified() const throw() { return m_fHasUserBeenNotified; }
void
SetUserNotified( bool fNotifiedIn = true ) throw() { m_fHasUserBeenNotified = fNotifiedIn; }
private:
//////////////////////////////////////////////////////////////////////////
// Private member functions
//////////////////////////////////////////////////////////////////////////
// Function to set the member string ( string id overload ).
void AssignString( UINT uiStringIdIn ) throw()
{
try
{
m_strErrorString.Empty();
m_strErrorString.LoadString( g_hInstance, uiStringIdIn );
}
catch( ... )
{
// If an error has occurred, nothing can be done - we are most probably in a stack unwind anyway.
THR( E_UNEXPECTED );
} // catch all: cannot let an exception propagate out of any of the methods of this class
}
// Function to set the member string ( character string overload ).
void AssignString( const WCHAR * pcszSrcIn ) throw()
{
try
{
m_strErrorString.Empty();
m_strErrorString.Assign( pcszSrcIn );
}
catch( ... )
{
// If an error has occurred, nothing can be done - we are most probably in a stack unwind anyway.
THR( E_UNEXPECTED );
} // catch all: cannot let an exception propagate out of any of the methods of this class
}
// Function to set the member string ( CStr overload ).
void AssignString( const CStr & rcstrSrcIn ) throw()
{
try
{
m_strErrorString.Empty();
m_strErrorString.Assign( rcstrSrcIn );
}
catch( ... )
{
// If an error has occurred, nothing can be done - we are most probably in a stack unwind anyway.
THR( E_UNEXPECTED );
} // catch all: cannot let an exception propagate out of any of the methods of this class
}
//////////////////////////////////////////////////////////////////////////
// Private data
//////////////////////////////////////////////////////////////////////////
CStr m_strErrorString;
// Indicates if the user has been notified about this exception or not.
bool m_fHasUserBeenNotified;
}; //*** class CExceptionWithString
//////////////////////////////////////////////////////////////////////////////
//++
//
// class CAssert
//
// Description:
// This class of exceptions is used to represent programming errors or
// invalid assumptions.
//
// The accompanying message is not expected to be localized.
//
//--
//////////////////////////////////////////////////////////////////////////////
class CAssert : public CExceptionWithString
{
public:
//////////////////////////////////////////////////////////////////////////
// Public type definitions
//////////////////////////////////////////////////////////////////////////
typedef CExceptionWithString BaseClass;
//////////////////////////////////////////////////////////////////////////
// Public constructors and destructors
//////////////////////////////////////////////////////////////////////////
// CAssert ( string id overload ).
CAssert(
HRESULT hrErrorCodeIn
, const WCHAR * pcszFileNameIn
, UINT uiLineNumberIn
, UINT uiErrorStringIdIn
) throw()
: BaseClass( hrErrorCodeIn, pcszFileNameIn, uiLineNumberIn, uiErrorStringIdIn )
{
}
// Constructor ( character string overload )
CAssert(
HRESULT hrErrorCodeIn
, const WCHAR * pcszFileNameIn
, UINT uiLineNumberIn
, const WCHAR * pcszErrorStringIn
) throw()
: BaseClass( hrErrorCodeIn, pcszFileNameIn, uiLineNumberIn, pcszErrorStringIn )
{
}
}; //*** class CAssert
//////////////////////////////////////////////////////////////////////////////
//++
//
// class CRuntimeError
//
// Description:
// This class of exceptions is used to signal runtime errors such as memory
// exhaustion, failure of Win32 API calls, etc.
//
// The accompanying message may be shown to the user and should therefore
// be localized.
//
//--
//////////////////////////////////////////////////////////////////////////////
class CRuntimeError : public CExceptionWithString
{
public:
//////////////////////////////////////////////////////////////////////////
// Public type definitions
//////////////////////////////////////////////////////////////////////////
typedef CExceptionWithString BaseClass;
//////////////////////////////////////////////////////////////////////////
// Public constructors and destructors
//////////////////////////////////////////////////////////////////////////
// Constructor ( string id overload ).
CRuntimeError(
HRESULT hrErrorCodeIn
, const WCHAR * pcszFileNameIn
, UINT uiLineNumberIn
, UINT uiErrorStringIdIn
) throw()
: BaseClass( hrErrorCodeIn, pcszFileNameIn, uiLineNumberIn, uiErrorStringIdIn )
{
}
// Constructor ( character string overload )
CRuntimeError(
HRESULT hrErrorCodeIn
, const WCHAR * pcszFileNameIn
, UINT uiLineNumberIn
, const WCHAR * pcszErrorStringIn
) throw()
: BaseClass( hrErrorCodeIn, pcszFileNameIn, uiLineNumberIn, pcszErrorStringIn )
{
}
}; //*** class CRuntimeError
//////////////////////////////////////////////////////////////////////////////
//++
//
// class CAbortException
//
// Description:
// This exception is thrown to indicate that the configuration operation
// was aborted.
//
// The accompanying message may be shown to the user and should therefore
// be localized.
//
//--
//////////////////////////////////////////////////////////////////////////////
class CAbortException : public CExceptionWithString
{
public:
//////////////////////////////////////////////////////////////////////////
// Public type definitions
//////////////////////////////////////////////////////////////////////////
typedef CExceptionWithString BaseClass;
//////////////////////////////////////////////////////////////////////////
// Public constructors and destructors
//////////////////////////////////////////////////////////////////////////
// Constructor ( string id overload ).
CAbortException(
HRESULT hrErrorCodeIn
, const WCHAR * pcszFileNameIn
, UINT uiLineNumberIn
, UINT uiErrorStringIdIn
) throw()
: BaseClass( hrErrorCodeIn, pcszFileNameIn, uiLineNumberIn, uiErrorStringIdIn )
{
}
// Constructor ( character string overload )
CAbortException(
HRESULT hrErrorCodeIn
, const WCHAR * pcszFileNameIn
, UINT uiLineNumberIn
, const WCHAR * pcszErrorStringIn
) throw()
: BaseClass( hrErrorCodeIn, pcszFileNameIn, uiLineNumberIn, pcszErrorStringIn )
{
}
}; //*** class CAbortException
//////////////////////////////////////////////////////////////////////////////
//++
//
// class CConfigError
//
// Description:
// This class of exceptions is used to signal errors related to cluster
// configuration. For example, an object of this class is thrown if the
// OS version of the computer cannot support the requested configuration
// step.
//
// The accompanying message may be shown to the user and should therefore
// be localized.
//
//--
//////////////////////////////////////////////////////////////////////////////
class CConfigError : public CExceptionWithString
{
public:
//////////////////////////////////////////////////////////////////////////
// Public type definitions
//////////////////////////////////////////////////////////////////////////
typedef CExceptionWithString BaseClass;
//////////////////////////////////////////////////////////////////////////
// Public constructors and destructors
//////////////////////////////////////////////////////////////////////////
// Constructor ( string id overload )
CConfigError(
HRESULT hrErrorCodeIn
, const WCHAR * pcszFileNameIn
, UINT uiLineNumberIn
, UINT uiErrorStringIdIn
) throw()
: BaseClass( hrErrorCodeIn, pcszFileNameIn, uiLineNumberIn, uiErrorStringIdIn )
{
}
// Constructor ( character string overload )
CConfigError(
HRESULT hrErrorCodeIn
, const WCHAR * pcszFileNameIn
, UINT uiLineNumberIn
, const WCHAR * pcszErrorStringIn
) throw()
: BaseClass( hrErrorCodeIn, pcszFileNameIn, uiLineNumberIn, pcszErrorStringIn )
{
}
}; //*** class CConfigError