Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Das folgende Codebeispiel zeigt, wie eine ADSI-Fehlermeldung abgerufen wird.
CString GetErrorMessage( HRESULT hr )
{
BOOL bRet;
CString s;
LPTSTR lpBuffer=NULL;
if ( SUCCEEDED(hr) )
{
return _T("Success");
}
if ( hr & 0x00005000) // standard ADSI Errors
{
s = GetADSIError(hr);
}
else if ( HRESULT_FACILITY(hr)==FACILITY_WIN32 )
{
/////////////////////////////////////////////
// Retrieve the Win32 Error message
/////////////////////////////////////////////
bRet = FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER |
FORMAT_MESSAGE_FROM_SYSTEM,
NULL, hr,
MAKELANGID(LANG_NEUTRAL,
SUBLANG_SYS_DEFAULT),
(LPTSTR) &lpBuffer, 0, NULL);
if ( !bRet )
{
s.Format(_T("Error %ld"), hr );
}
if ( lpBuffer )
{
s = lpBuffer;
LocalFree( lpBuffer );
}
}
else // Non Win32 Error
{
s.Format("%X", hr );
return s;
}
//////////////////////////////////////////////////////////////////
//
// Extended error message may be returned.
//
// IADs, IADsContainer, IDirectoryObject or IDirectorySearch may
// return this extended error message
//
/////////////////////////////////////////////////////////////////
WCHAR szBuffer[MAX_PATH];
WCHAR szName[MAX_PATH];
DWORD dwError;
hr = ADsGetLastError( &dwError, szBuffer, (sizeof(szBuffer)/sizeof(WCHAR))-1,
szName, (sizeof(szName)/sizeof(WCHAR))-1 );
if ( SUCCEEDED(hr) && dwError != ERROR_INVALID_DATA &&
wcslen(szBuffer))
{
USES_CONVERSION;
s += _T(" -- Extended Error --- ");
s += OLE2T(szName);
s += _T(" : ");
s += OLE2T( szBuffer );
}
return s;
}
typedef struct tagADSERRMSG
{
HRESULT hr;
LPCTSTR pszError;
}ADSERRMSG;
#define ADDADSERROR(x) x, _T(#x)
ADSERRMSG adsErr[] =
{
ADDADSERROR(E_ADS_BAD_PATHNAME),
ADDADSERROR(E_ADS_INVALID_DOMAIN_OBJECT),
ADDADSERROR(E_ADS_INVALID_USER_OBJECT),
ADDADSERROR(E_ADS_INVALID_COMPUTER_OBJECT),
ADDADSERROR(E_ADS_UNKNOWN_OBJECT),
ADDADSERROR(E_ADS_PROPERTY_NOT_SET),
ADDADSERROR(E_ADS_PROPERTY_NOT_SUPPORTED),
ADDADSERROR(E_ADS_PROPERTY_INVALID),
ADDADSERROR(E_ADS_BAD_PARAMETER),
ADDADSERROR(E_ADS_OBJECT_UNBOUND),
ADDADSERROR(E_ADS_PROPERTY_NOT_MODIFIED),
ADDADSERROR(E_ADS_PROPERTY_MODIFIED),
ADDADSERROR(E_ADS_CANT_CONVERT_DATATYPE),
ADDADSERROR(E_ADS_PROPERTY_NOT_FOUND),
ADDADSERROR(E_ADS_OBJECT_EXISTS),
ADDADSERROR(E_ADS_SCHEMA_VIOLATION),
ADDADSERROR(E_ADS_COLUMN_NOT_SET),
ADDADSERROR(E_ADS_INVALID_FILTER),
ADDADSERROR(0),
};
/////////////////////////////////////////////
//
// Error message specific to ADSI
//
////////////////////////////////////////////
CString GetADSIError( HRESULT hr )
{
CString s;
if ( hr & 0x00005000 )
{
int idx=0;
while (adsErr[idx].hr != 0 )
{
if ( adsErr[idx].hr == hr )
{
return adsErr[idx].pszError;
}
idx++;
}
}
return _T("");
}