/****************************************************************************
Copyright information : Copyright (c) 1998-1999 Microsoft Corporation
File Name : ErrorInfo.cpp
Project Name : WMI Command Line
Author Name : Ch. Sriramachandramurthy
Date of Creation (dd/mm/yy) : 27th-September-2000
Version Number : 1.0
Brief Description : The CErrorInfo class provides the functionality
for providing error information given the error
object.
Private : None
Revision History :
Last Modified by : Ch. Sriramachandramurthy
Last Modified date : 16th-January-2001
****************************************************************************/
// ErrorInfo.cpp : implementation file
#include "Precomp.h"
#include "ErrorInfo.h"
/*------------------------------------------------------------------------
Name :CErrorInfo
Synopsis :This function initializes the member variables when
an object of the class type is instantiated
Type :Constructor
Input parameter :None
Output parameters :None
Return Type :None
Global Variables :None
Calling Syntax :None
Notes :None
------------------------------------------------------------------------*/
CErrorInfo::CErrorInfo()
{
m_pIStatus = NULL;
m_bWMIErrSrc = TRUE;
m_pszErrStr = NULL;
}
/*------------------------------------------------------------------------
Name :~CErrorInfo
Synopsis :This function uninitializes the member variables
when an object of the class type goes out of scope.
Type :Destructor
Input parameter :None
Output parameters :None
Return Type :None
Global Variables :None
Calling Syntax :None
Notes :None
------------------------------------------------------------------------*/
CErrorInfo::~CErrorInfo()
{
Uninitialize();
}
/*------------------------------------------------------------------------
Name :Uninitialize
Synopsis :This function uninitializes the member variables.
Type :Member Function
Input parameter :None
Output parameters :None
Return Type :void
Global Variables :None
Calling Syntax :Uninitialize()
Notes :None
------------------------------------------------------------------------*/
void CErrorInfo::Uninitialize()
{
SAFEIRELEASE(m_pIStatus);
SAFEDELETE(m_pszErrStr);
m_bWMIErrSrc = TRUE;
}
/*------------------------------------------------------------------------
Name :GetErrorString
Synopsis :This function takes the error code as input and returns
an error string
Type :Member Function
Input parameter :
hr - hresult value
bTrace - trace flag
Output parameters :None
Return Type :_TCHAR*
Global Variables :None
Calling Syntax :GetErrorString(hr)
Notes :None
------------------------------------------------------------------------*/
void CErrorInfo::GetErrorString(HRESULT hr, BOOL bTrace, _bstr_t& bstrErrDesc,
_bstr_t& bstrFacility)
{
try
{
// Get the text description of the error code
GetWbemErrorText(hr, FALSE, bstrErrDesc, bstrFacility);
// If the error source subsystem is 'Wbem' and the
// TRACE is ON (get elaborated description from the
// string table for the error code)
if (m_bWMIErrSrc && bTrace)
{
m_pszErrStr = new _TCHAR[MAX_BUFFER];
if (m_pszErrStr != NULL)
{
switch (hr)
{
case WBEM_NO_ERROR:
LoadString(NULL, IDS_I_WBEM_NO_ERROR,
m_pszErrStr, MAX_BUFFER);
break;
case WBEM_E_ACCESS_DENIED:
LoadString(NULL, IDS_E_WBEM_E_ACCESS_DENIED,
m_pszErrStr, MAX_BUFFER);
break;
case WBEM_E_ALREADY_EXISTS:
LoadString(NULL, IDS_E_WBEM_E_ALREADY_EXISTS,
m_pszErrStr, MAX_BUFFER);
break;
case WBEM_E_CANNOT_BE_KEY:
LoadString(NULL, IDS_E_WBEM_E_CANNOT_BE_KEY,
m_pszErrStr, MAX_BUFFER);
break;
case WBEM_E_CANNOT_BE_SINGLETON:
LoadString(NULL, IDS_E_WBEM_E_CANNOT_BE_SINGLETON,
m_pszErrStr, MAX_BUFFER);
break;
case WBEM_E_CLASS_HAS_CHILDREN:
LoadString(NULL, IDS_E_WBEM_E_CLASS_HAS_CHILDREN,
m_pszErrStr, MAX_BUFFER);
break;
case WBEM_E_CLASS_HAS_INSTANCES:
LoadString(NULL, IDS_E_WBEM_E_CLASS_HAS_INSTANCES,
m_pszErrStr, MAX_BUFFER);
break;
case WBEM_E_CRITICAL_ERROR:
LoadString(NULL, IDS_E_WBEM_E_CRITICAL_ERROR,
m_pszErrStr, MAX_BUFFER);
break;
case WBEM_E_FAILED:
LoadString(NULL, IDS_E_WBEM_E_FAILED,
m_pszErrStr, MAX_BUFFER);
break;
case WBEM_E_ILLEGAL_NULL:
LoadString(NULL, IDS_E_WBEM_E_ILLEGAL_NULL,
m_pszErrStr, MAX_BUFFER);
break;
case WBEM_E_ILLEGAL_OPERATION:
LoadString(NULL, IDS_E_WBEM_E_ILLEGAL_OPERATION,
m_pszErrStr, MAX_BUFFER);
break;
case WBEM_E_INCOMPLETE_CLASS:
LoadString(NULL, IDS_E_WBEM_E_INCOMPLETE_CLASS,
m_pszErrStr, MAX_BUFFER);
break;
case WBEM_E_INITIALIZATION_FAILURE:
LoadString(NULL, IDS_E_WBEM_E_INITIALIZATION_FAILURE,
m_pszErrStr, MAX_BUFFER);
break;
case WBEM_E_INVALID_CIM_TYPE:
LoadString(NULL, IDS_E_WBEM_E_INVALID_CIM_TYPE,
m_pszErrStr, MAX_BUFFER);
break;
case WBEM_E_INVALID_CLASS:
LoadString(NULL, IDS_E_WBEM_E_INVALID_CLASS,
m_pszErrStr, MAX_BUFFER);
break;
case WBEM_E_INVALID_CONTEXT:
LoadString(NULL, IDS_E_WBEM_E_INVALID_CONTEXT,
m_pszErrStr, MAX_BUFFER);
break;
case WBEM_E_INVALID_METHOD:
LoadString(NULL, IDS_E_WBEM_E_INVALID_METHOD,
m_pszErrStr, MAX_BUFFER);
break;
case WBEM_E_INVALID_METHOD_PARAMETERS:
LoadString(NULL, IDS_E_WBEM_E_INVALID_METHOD_PARAMETERS,
m_pszErrStr, MAX_BUFFER);
break;
case WBEM_E_INVALID_NAMESPACE:
LoadString(NULL, IDS_E_WBEM_E_INVALID_NAMESPACE,
m_pszErrStr, MAX_BUFFER);
break;
case WBEM_E_INVALID_OBJECT:
LoadString(NULL, IDS_E_WBEM_E_INVALID_OBJECT,
m_pszErrStr, MAX_BUFFER);
break;
case WBEM_E_INVALID_OPERATION:
LoadString(NULL, IDS_E_WBEM_E_INVALID_OPERATION,
m_pszErrStr, MAX_BUFFER);
break;
case WBEM_E_INVALID_PARAMETER:
LoadString(NULL, IDS_E_WBEM_E_INVALID_PARAMETER,
m_pszErrStr, MAX_BUFFER);
break;
case WBEM_E_INVALID_PROPERTY_TYPE:
LoadString(NULL, IDS_E_WBEM_E_INVALID_PROPERTY_TYPE,
m_pszErrStr, MAX_BUFFER);
break;
case WBEM_E_INVALID_PROVIDER_REGISTRATION:
LoadString(NULL, IDS_E_WBEM_E_INVALID_PROVIDER_REGISTRATION,
m_pszErrStr, MAX_BUFFER);
break;
case WBEM_E_INVALID_QUALIFIER_TYPE:
LoadString(NULL, IDS_E_WBEM_E_INVALID_QUALIFIER_TYPE,
m_pszErrStr, MAX_BUFFER);
break;
case WBEM_E_INVALID_QUERY:
LoadString(NULL, IDS_E_WBEM_E_INVALID_QUERY,
m_pszErrStr, MAX_BUFFER);
break;
case WBEM_E_INVALID_QUERY_TYPE:
LoadString(NULL, IDS_E_WBEM_E_INVALID_QUERY_TYPE,
m_pszErrStr, MAX_BUFFER);
break;
case WBEM_E_INVALID_STREAM:
LoadString(NULL, IDS_E_WBEM_E_INVALID_STREAM,
m_pszErrStr, MAX_BUFFER);
break;
case WBEM_E_INVALID_SUPERCLASS:
LoadString(NULL, IDS_E_WBEM_E_INVALID_SUPERCLASS,
m_pszErrStr, MAX_BUFFER);
break;
case WBEM_E_INVALID_SYNTAX:
LoadString(NULL, IDS_E_WBEM_E_INVALID_SYNTAX,
m_pszErrStr, MAX_BUFFER);
break;
case WBEM_E_NONDECORATED_OBJECT:
LoadString(NULL, IDS_E_WBEM_E_NONDECORATED_OBJECT,
m_pszErrStr, MAX_BUFFER);
break;
case WBEM_E_NOT_AVAILABLE:
LoadString(NULL, IDS_E_WBEM_E_NOT_AVAILABLE,
m_pszErrStr, MAX_BUFFER);
break;
case WBEM_E_NOT_FOUND:
LoadString(NULL, IDS_E_WBEM_E_NOT_FOUND,
m_pszErrStr, MAX_BUFFER);
break;
case WBEM_E_NOT_SUPPORTED:
LoadString(NULL, IDS_E_WBEM_E_NOT_SUPPORTED,
m_pszErrStr, MAX_BUFFER);
break;
case WBEM_E_OUT_OF_MEMORY:
LoadString(NULL, IDS_E_WBEM_E_OUT_OF_MEMORY,
m_pszErrStr, MAX_BUFFER);
break;
case WBEM_E_OVERRIDE_NOT_ALLOWED:
LoadString(NULL, IDS_E_WBEM_E_OVERRIDE_NOT_ALLOWED,
m_pszErrStr, MAX_BUFFER);
break;
case WBEM_E_PROPAGATED_PROPERTY:
LoadString(NULL, IDS_E_WBEM_E_PROPAGATED_PROPERTY,
m_pszErrStr, MAX_BUFFER);
break;
case WBEM_E_PROPAGATED_QUALIFIER:
LoadString(NULL, IDS_E_WBEM_E_PROPAGATED_QUALIFIER,
m_pszErrStr, MAX_BUFFER);
break;
case WBEM_E_PROVIDER_FAILURE:
LoadString(NULL, IDS_E_WBEM_E_PROVIDER_FAILURE,
m_pszErrStr, MAX_BUFFER);
break;
case WBEM_E_PROVIDER_LOAD_FAILURE:
LoadString(NULL, IDS_E_WBEM_E_PROVIDER_LOAD_FAILURE,
m_pszErrStr, MAX_BUFFER);
break;
case WBEM_E_PROVIDER_NOT_CAPABLE:
LoadString(NULL, IDS_E_WBEM_E_PROVIDER_NOT_CAPABLE,
m_pszErrStr, MAX_BUFFER);
break;
case WBEM_E_PROVIDER_NOT_FOUND:
LoadString(NULL, IDS_E_WBEM_E_PROVIDER_NOT_FOUND,
m_pszErrStr, MAX_BUFFER);
break;
case WBEM_E_QUERY_NOT_IMPLEMENTED:
LoadString(NULL, IDS_E_WBEM_E_QUERY_NOT_IMPLEMENTED,
m_pszErrStr, MAX_BUFFER);
break;
case WBEM_E_READ_ONLY:
LoadString(NULL, IDS_E_WBEM_E_READ_ONLY,
m_pszErrStr, MAX_BUFFER);
break;
case WBEM_E_TRANSPORT_FAILURE:
LoadString(NULL, IDS_E_WBEM_E_TRANSPORT_FAILURE,
m_pszErrStr, MAX_BUFFER);
break;
case WBEM_E_TYPE_MISMATCH:
LoadString(NULL, IDS_E_WBEM_E_TYPE_MISMATCH,
m_pszErrStr, MAX_BUFFER);
break;
case WBEM_E_UNEXPECTED:
LoadString(NULL, IDS_E_WBEM_E_UNEXPECTED,
m_pszErrStr, MAX_BUFFER);
break;
case WBEM_E_VALUE_OUT_OF_RANGE:
LoadString(NULL, IDS_E_WBEM_E_VALUE_OUT_OF_RANGE,
m_pszErrStr, MAX_BUFFER);
break;
case WBEM_S_ALREADY_EXISTS:
LoadString(NULL, IDS_S_WBEM_S_ALREADY_EXISTS,
m_pszErrStr, MAX_BUFFER);
break;
case WBEM_S_DIFFERENT:
LoadString(NULL, IDS_S_WBEM_S_DIFFERENT,
m_pszErrStr, MAX_BUFFER);
break;
case WBEM_S_FALSE:
LoadString(NULL, IDS_S_WBEM_S_FALSE,
m_pszErrStr, MAX_BUFFER);
break;
case WBEM_S_NO_MORE_DATA:
LoadString(NULL, IDS_S_WBEM_S_NO_MORE_DATA,
m_pszErrStr, MAX_BUFFER);
break;
case WBEM_S_PENDING:
LoadString(NULL, IDS_S_WBEM_S_PENDING,
m_pszErrStr, MAX_BUFFER);
break;
case WBEM_S_RESET_TO_DEFAULT:
LoadString(NULL, IDS_S_WBEM_S_RESET_TO_DEFAULT,
m_pszErrStr, MAX_BUFFER);
break;
case WBEM_S_TIMEDOUT:
LoadString(NULL, IDS_S_WBEM_S_TIMEDOUT,
m_pszErrStr, MAX_BUFFER);
break;
case WBEMESS_E_REGISTRATION_TOO_BROAD:
LoadString(NULL, IDS_E_WBEMESS_E_REGISTRATION_TOO_BROAD,
m_pszErrStr, MAX_BUFFER);
break;
case WBEMESS_E_REGISTRATION_TOO_PRECISE:
LoadString(NULL, IDS_E_WBEMESS_E_REGISTRATION_TOO_PRECISE,
m_pszErrStr, MAX_BUFFER);
break;
case WBEM_S_OPERATION_CANCELLED:
LoadString(NULL, IDS_S_WBEM_S_OPERATION_CANCELLED,
m_pszErrStr, MAX_BUFFER);
break;
case WBEM_S_DUPLICATE_OBJECTS:
LoadString(NULL, IDS_S_WBEM_S_DUPLICATE_OBJECTS,
m_pszErrStr, MAX_BUFFER);
break;
case WBEM_S_ACCESS_DENIED:
LoadString(NULL, IDS_S_WBEM_S_ACCESS_DENIED,
m_pszErrStr, MAX_BUFFER);
break;
case WBEM_S_PARTIAL_RESULTS:
LoadString(NULL, IDS_S_WBEM_S_PARTIAL_RESULTS,
m_pszErrStr, MAX_BUFFER);
break;
case WBEM_E_SYSTEM_PROPERTY:
LoadString(NULL, IDS_E_WBEM_E_SYSTEM_PROPERTY,
m_pszErrStr, MAX_BUFFER);
break;
case WBEM_E_INVALID_PROPERTY:
LoadString(NULL, IDS_E_WBEM_E_INVALID_PROPERTY,
m_pszErrStr, MAX_BUFFER);
break;
case WBEM_E_CALL_CANCELLED:
LoadString(NULL, IDS_E_WBEM_E_CALL_CANCELLED,
m_pszErrStr, MAX_BUFFER);
break;
case WBEM_E_SHUTTING_DOWN:
LoadString(NULL, IDS_E_WBEM_E_SHUTTING_DOWN,
m_pszErrStr, MAX_BUFFER);
break;
case WBEM_E_PROPAGATED_METHOD:
LoadString(NULL, IDS_E_WBEM_E_PROPAGATED_METHOD,
m_pszErrStr, MAX_BUFFER);
break;
case WBEM_E_UNSUPPORTED_PARAMETER:
LoadString(NULL, IDS_E_WBEM_E_UNSUPPORTED_PARAMETER,
m_pszErrStr, MAX_BUFFER);
break;
case WBEM_E_MISSING_PARAMETER_ID:
LoadString(NULL, IDS_E_WBEM_E_MISSING_PARAMETER_ID,
m_pszErrStr, MAX_BUFFER);
break;
case WBEM_E_INVALID_PARAMETER_ID:
LoadString(NULL, IDS_E_WBEM_E_INVALID_PARAMETER_ID,
m_pszErrStr, MAX_BUFFER);
break;
case WBEM_E_NONCONSECUTIVE_PARAMETER_IDS:
LoadString(NULL, IDS_E_WBEM_E_NONCONSECUTIVE_PARAMETER_IDS,
m_pszErrStr, MAX_BUFFER);
break;
case WBEM_E_PARAMETER_ID_ON_RETVAL:
LoadString(NULL, IDS_E_WBEM_E_PARAMETER_ID_ON_RETVAL,
m_pszErrStr, MAX_BUFFER);
break;
case WBEM_E_INVALID_OBJECT_PATH:
LoadString(NULL, IDS_E_WBEM_E_INVALID_OBJECT_PATH,
m_pszErrStr, MAX_BUFFER);
break;
case WBEM_E_OUT_OF_DISK_SPACE:
LoadString(NULL, IDS_E_WBEM_E_OUT_OF_DISK_SPACE,
m_pszErrStr, MAX_BUFFER);
break;
case WBEM_E_BUFFER_TOO_SMALL:
LoadString(NULL, IDS_E_WBEM_E_BUFFER_TOO_SMALL,
m_pszErrStr, MAX_BUFFER);
break;
case WBEM_E_UNSUPPORTED_PUT_EXTENSION:
LoadString(NULL, IDS_E_WBEM_E_UNSUPPORTED_PUT_EXTENSION,
m_pszErrStr, MAX_BUFFER);
break;
case WBEM_E_UNKNOWN_OBJECT_TYPE:
LoadString(NULL, IDS_E_WBEM_E_UNKNOWN_OBJECT_TYPE,
m_pszErrStr, MAX_BUFFER);
break;
case WBEM_E_UNKNOWN_PACKET_TYPE:
LoadString(NULL, IDS_E_WBEM_E_UNKNOWN_PACKET_TYPE,
m_pszErrStr, MAX_BUFFER);
break;
case WBEM_E_MARSHAL_VERSION_MISMATCH:
LoadString(NULL, IDS_E_WBEM_E_MARSHAL_VERSION_MISMATCH,
m_pszErrStr, MAX_BUFFER);
break;
case WBEM_E_MARSHAL_INVALID_SIGNATURE:
LoadString(NULL, IDS_E_WBEM_E_MARSHAL_INVALID_SIGNATURE,
m_pszErrStr, MAX_BUFFER);
break;
case WBEM_E_INVALID_QUALIFIER:
LoadString(NULL, IDS_E_WBEM_E_INVALID_QUALIFIER,
m_pszErrStr, MAX_BUFFER);
break;
case WBEM_E_INVALID_DUPLICATE_PARAMETER:
LoadString(NULL, IDS_E_WBEM_E_INVALID_DUPLICATE_PARAMETER,
m_pszErrStr, MAX_BUFFER);
break;
case WBEM_E_TOO_MUCH_DATA:
LoadString(NULL, IDS_E_WBEM_E_TOO_MUCH_DATA,
m_pszErrStr, MAX_BUFFER);
break;
case WBEM_E_SERVER_TOO_BUSY:
LoadString(NULL, IDS_E_WBEM_E_SERVER_TOO_BUSY,
m_pszErrStr, MAX_BUFFER);
break;
case WBEM_E_INVALID_FLAVOR:
LoadString(NULL, IDS_E_WBEM_E_INVALID_FLAVOR,
m_pszErrStr, MAX_BUFFER);
break;
case WBEM_E_CIRCULAR_REFERENCE:
LoadString(NULL, IDS_E_WBEM_E_CIRCULAR_REFERENCE,
m_pszErrStr, MAX_BUFFER);
break;
case WBEM_E_UNSUPPORTED_CLASS_UPDATE:
LoadString(NULL, IDS_E_WBEM_E_UNSUPPORTED_CLASS_UPDATE,
m_pszErrStr, MAX_BUFFER);
break;
case WBEM_E_CANNOT_CHANGE_KEY_INHERITANCE:
LoadString(NULL, IDS_E_WBEM_E_CANNOT_CHANGE_KEY_INHERITANCE,
m_pszErrStr, MAX_BUFFER);
break;
case WBEM_E_CANNOT_CHANGE_INDEX_INHERITANCE:
LoadString(NULL, IDS_E_WBEM_E_CANNOT_CHANGE_INDEX_INHERITANCE,
m_pszErrStr, MAX_BUFFER);
break;
case WBEM_E_TOO_MANY_PROPERTIES:
LoadString(NULL, IDS_E_WBEM_E_TOO_MANY_PROPERTIES,
m_pszErrStr, MAX_BUFFER);
break;
case WBEM_E_UPDATE_TYPE_MISMATCH:
LoadString(NULL, IDS_E_WBEM_E_UPDATE_TYPE_MISMATCH,
m_pszErrStr, MAX_BUFFER);
break;
case WBEM_E_UPDATE_OVERRIDE_NOT_ALLOWED:
LoadString(NULL, IDS_E_WBEM_E_UPDATE_OVERRIDE_NOT_ALLOWED,
m_pszErrStr, MAX_BUFFER);
break;
case WBEM_E_UPDATE_PROPAGATED_METHOD:
LoadString(NULL, IDS_E_WBEM_E_UPDATE_PROPAGATED_METHOD,
m_pszErrStr, MAX_BUFFER);
break;
case WBEM_E_METHOD_NOT_IMPLEMENTED:
LoadString(NULL, IDS_E_WBEM_E_METHOD_NOT_IMPLEMENTED,
m_pszErrStr, MAX_BUFFER);
break;
case WBEM_E_METHOD_DISABLED:
LoadString(NULL, IDS_E_WBEM_E_METHOD_DISABLED,
m_pszErrStr, MAX_BUFFER);
break;
case WBEM_E_REFRESHER_BUSY:
LoadString(NULL, IDS_E_WBEM_E_REFRESHER_BUSY,
m_pszErrStr, MAX_BUFFER);
break;
case WBEM_E_UNPARSABLE_QUERY:
LoadString(NULL, IDS_E_WBEM_E_UNPARSABLE_QUERY,
m_pszErrStr, MAX_BUFFER);
break;
case WBEM_E_NOT_EVENT_CLASS:
LoadString(NULL, IDS_E_WBEM_E_NOT_EVENT_CLASS,
m_pszErrStr, MAX_BUFFER);
break;
case WBEM_E_MISSING_GROUP_WITHIN:
LoadString(NULL, WBEM_E_MISSING_GROUP_WITHIN,
m_pszErrStr, MAX_BUFFER);
break;
case WBEM_E_MISSING_AGGREGATION_LIST:
LoadString(NULL, IDS_E_WBEM_E_MISSING_AGGREGATION_LIST,
m_pszErrStr, MAX_BUFFER);
break;
case WBEM_E_PROPERTY_NOT_AN_OBJECT:
LoadString(NULL, IDS_E_WBEM_E_PROPERTY_NOT_AN_OBJECT,
m_pszErrStr, MAX_BUFFER);
break;
case WBEM_E_AGGREGATING_BY_OBJECT:
LoadString(NULL, IDS_E_WBEM_E_AGGREGATING_BY_OBJECT,
m_pszErrStr, MAX_BUFFER);
break;
case WBEM_E_UNINTERPRETABLE_PROVIDER_QUERY:
LoadString(NULL, IDS_E_WBEM_E_UNINTERPRETABLE_PROVIDER_QUERY,
m_pszErrStr, MAX_BUFFER);
break;
case WBEM_E_BACKUP_RESTORE_WINMGMT_RUNNING:
LoadString(NULL, IDS_E_WBEM_E_BACKUP_RESTORE_WINMGMT_RUNNING,
m_pszErrStr, MAX_BUFFER);
break;
case WBEM_E_QUEUE_OVERFLOW:
LoadString(NULL, IDS_E_WBEM_E_QUEUE_OVERFLOW,
m_pszErrStr, MAX_BUFFER);
break;
case WBEM_E_PRIVILEGE_NOT_HELD:
LoadString(NULL, IDS_E_WBEM_E_PRIVILEGE_NOT_HELD,
m_pszErrStr, MAX_BUFFER);
break;
case WBEM_E_INVALID_OPERATOR:
LoadString(NULL, IDS_E_WBEM_E_INVALID_OPERATOR,
m_pszErrStr, MAX_BUFFER);
break;
case WBEM_E_LOCAL_CREDENTIALS:
LoadString(NULL, IDS_E_WBEM_E_LOCAL_CREDENTIALS,
m_pszErrStr, MAX_BUFFER);
break;
case WBEM_E_CANNOT_BE_ABSTRACT:
LoadString(NULL, IDS_E_WBEM_E_CANNOT_BE_ABSTRACT,
m_pszErrStr, MAX_BUFFER);
break;
case WBEM_E_AMENDED_OBJECT:
LoadString(NULL, IDS_E_WBEM_E_AMENDED_OBJECT,
m_pszErrStr, MAX_BUFFER);
break;
case WBEM_E_CLIENT_TOO_SLOW:
LoadString(NULL, IDS_E_WBEM_E_CLIENT_TOO_SLOW,
m_pszErrStr, MAX_BUFFER);
break;
default:
LoadString(NULL, IDS_E_UNKNOWN_WBEM_ERROR,
m_pszErrStr, MAX_BUFFER);
break;
}
}
else
throw OUT_OF_MEMORY;
bstrErrDesc = m_pszErrStr;
SAFEDELETE(m_pszErrStr);
}
}
catch(_com_error& e)
{
_com_issue_error(e.Error());
}
}
/*------------------------------------------------------------------------
Name :GetWbemErrorText
Synopsis :This function takes the error code as input and returns
an error string
Type :Member Function
Input parameter :
hr - (error code) hresult value
bXML - Flag to indicate whether error is required in XML form
Output parameters :
bstrError - String to containg error info in XML form
Return Type :None
Global Variables :None
Calling Syntax :GetErrorString(hr)
Notes :None
------------------------------------------------------------------------*/
void CErrorInfo::GetWbemErrorText(HRESULT hr, BOOL bXML, _bstr_t& bstrError,
_bstr_t& bstrFacilityCode)
{
try
{
CHString sTemp;
if (bXML)
{
sTemp.Format(L"0x%x", hr);
}
bstrError += _bstr_t(sTemp);
if (m_pIStatus == NULL)
{
if (SUCCEEDED(CreateStatusCodeObject()))
{
BSTR bstrErr = NULL, bstrFacility = NULL;
// Get the text string description associated with
// the error code.
if(SUCCEEDED(m_pIStatus->GetErrorCodeText(hr, 0, 0, &bstrErr)))
{
if (bXML)
{
bstrError += L"";
bstrError += bstrErr;
bstrError += L"";
}
else
{
bstrError = bstrErr;
}
// Get the subsystem where the error occured
if(SUCCEEDED(m_pIStatus->GetFacilityCodeText(hr, 0, 0,
&bstrFacility)))
{
if (bstrFacility)
{
if (bXML)
{
bstrError += L"";
bstrError += bstrFacility;
bstrError += L"";
}
else
{
bstrFacilityCode = bstrFacility;
}
// If the subsystem is not Winmgmt ('Wbem')
// i.e. anyone of the "Windows" | "SSIP" | "RPC" set
// the m_bWMIErrSrc to FALSE
if ((CompareTokens(_T("Wbem"), (_TCHAR*) bstrFacility)) ||
(CompareTokens(_T("WMI"), (_TCHAR*) bstrFacility)))
{
m_bWMIErrSrc = TRUE;
}
else
m_bWMIErrSrc = FALSE;
}
}
SAFEBSTRFREE(bstrErr);
SAFEBSTRFREE(bstrFacility);
}
else
{
if (bXML)
{
bstrError +=
L"\"Unknown WBEM Error\"";
bstrError += L"";
}
m_bWMIErrSrc = FALSE;
}
SAFEIRELEASE(m_pIStatus);
}
}
}
catch(_com_error& e)
{
_com_issue_error(e.Error());
}
catch(CHeap_Exception)
{
_com_issue_error(WBEM_E_OUT_OF_MEMORY);
}
}
/*------------------------------------------------------------------------
Name :CreateStatusCodeObject()
Synopsis :This function creates the single uninitialized
object of the class associated with the CLSID
CLSID_WbemStatusCodeText
Type :Member Function
Input parameter :None
Output parameters :None
Return Type :HRESULT
Global Variables :None
Calling Syntax :CreateStatusCodeObject()
Notes :None
-------------------------------------------------------------------*/
HRESULT CErrorInfo::CreateStatusCodeObject()
{
// Create the single uninitialized object of the
// class associated with the CLSID CLSID_WbemStatusCodeText
return CoCreateInstance(CLSID_WbemStatusCodeText,
0, CLSCTX_INPROC_SERVER,
IID_IWbemStatusCodeText,
(LPVOID*) &m_pIStatus);
}
/*-------------------------------------------------------------------------
Name :GetErrorFragment
Synopsis :Frames the XML string for error info
Type :Member Function
Input parameters :
hr - HResult Parameter
Output parameters :
bstrError - String to containg error info in XML form
Return Type :void
Global Variables :None
Calling Syntax :GetErrorFragment()
-------------------------------------------------------------------------*/
void CErrorInfo::GetErrorFragment(HRESULT hr, _bstr_t& bstrError)
{
try
{
_bstr_t bstrFacility;
bstrError = L"";
GetWbemErrorText(hr, TRUE, bstrError, bstrFacility);
bstrError += L"";
}
catch(_com_error& e)
{
_com_issue_error(e.Error());
}
}