// Convert a component type into a string inline wstring VssWriter::GetStringFromRestoreMethod(VSS_RESTOREMETHOD_ENUM eRestoreMethod) { FunctionTracer ft(DBG_INFO); ft.Trace(DBG_INFO, L"Interpreting constant %d", (int)eRestoreMethod); switch (eRestoreMethod) { CHECK_CASE_FOR_CONSTANT(VSS_RME_UNDEFINED); CHECK_CASE_FOR_CONSTANT(VSS_RME_RESTORE_IF_NOT_THERE); CHECK_CASE_FOR_CONSTANT(VSS_RME_RESTORE_IF_CAN_REPLACE); CHECK_CASE_FOR_CONSTANT(VSS_RME_STOP_RESTORE_START); CHECK_CASE_FOR_CONSTANT(VSS_RME_RESTORE_TO_ALTERNATE_LOCATION); CHECK_CASE_FOR_CONSTANT(VSS_RME_RESTORE_AT_REBOOT); #ifdef VSS_SERVER CHECK_CASE_FOR_CONSTANT(VSS_RME_RESTORE_AT_REBOOT_IF_CANNOT_REPLACE); #endif CHECK_CASE_FOR_CONSTANT(VSS_RME_CUSTOM); CHECK_CASE_FOR_CONSTANT(VSS_RME_RESTORE_STOP_START); default: ft.WriteLine(L"Unknown constant: %d",eRestoreMethod); _ASSERTE(false); return wstring(L"Undefined"); } }
// Convert a component type into a string inline wstring VssComponent::GetStringFromComponentType(VSS_COMPONENT_TYPE eComponentType) { FunctionTracer ft(DBG_INFO); ft.Trace(DBG_INFO, L"Interpreting constant %d", (int)eComponentType); switch (eComponentType) { CHECK_CASE_FOR_CONSTANT(VSS_CT_DATABASE); CHECK_CASE_FOR_CONSTANT(VSS_CT_FILEGROUP); default: ft.WriteLine(L"Unknown constant: %d",eComponentType); _ASSERTE(false); return wstring(L"Undefined"); } }
// Convert a component type into a string inline wstring VssWriter::GetStringFromRestoreConditions(VSS_WRITERRESTORE_ENUM eRestoreEnum) { FunctionTracer ft(DBG_INFO); ft.Trace(DBG_INFO, L"Interpreting constant %d", (int)eRestoreEnum); switch (eRestoreEnum) { CHECK_CASE_FOR_CONSTANT(VSS_WRE_UNDEFINED); CHECK_CASE_FOR_CONSTANT(VSS_WRE_NEVER); CHECK_CASE_FOR_CONSTANT(VSS_WRE_IF_REPLACE_FAILS); CHECK_CASE_FOR_CONSTANT(VSS_WRE_ALWAYS); default: ft.WriteLine(L"Unknown constant: %d",eRestoreEnum); _ASSERTE(false); return wstring(L"Undefined"); } }
// Convert a writer status into a string wstring VssClient::GetStringFromWriterStatus(VSS_WRITER_STATE eWriterStatus) { FunctionTracer ft(DBG_INFO); ft.Trace(DBG_INFO, L"Interpreting constant %d", (int)eWriterStatus); switch (eWriterStatus) { CHECK_CASE_FOR_CONSTANT(VSS_WS_STABLE); CHECK_CASE_FOR_CONSTANT(VSS_WS_WAITING_FOR_FREEZE); CHECK_CASE_FOR_CONSTANT(VSS_WS_WAITING_FOR_THAW); CHECK_CASE_FOR_CONSTANT(VSS_WS_WAITING_FOR_POST_SNAPSHOT); CHECK_CASE_FOR_CONSTANT(VSS_WS_WAITING_FOR_BACKUP_COMPLETE); CHECK_CASE_FOR_CONSTANT(VSS_WS_FAILED_AT_IDENTIFY); CHECK_CASE_FOR_CONSTANT(VSS_WS_FAILED_AT_PREPARE_BACKUP); CHECK_CASE_FOR_CONSTANT(VSS_WS_FAILED_AT_PREPARE_SNAPSHOT); CHECK_CASE_FOR_CONSTANT(VSS_WS_FAILED_AT_FREEZE); CHECK_CASE_FOR_CONSTANT(VSS_WS_FAILED_AT_THAW); CHECK_CASE_FOR_CONSTANT(VSS_WS_FAILED_AT_POST_SNAPSHOT); CHECK_CASE_FOR_CONSTANT(VSS_WS_FAILED_AT_BACKUP_COMPLETE); CHECK_CASE_FOR_CONSTANT(VSS_WS_FAILED_AT_PRE_RESTORE); CHECK_CASE_FOR_CONSTANT(VSS_WS_FAILED_AT_POST_RESTORE); default: ft.WriteLine(L"Unknown constant: %d",eWriterStatus); _ASSERTE(false); return wstring(L"Undefined"); } }
// Convert a failure type into a string wstring FunctionTracer::HResult2String(HRESULT hrError) { switch (hrError) { CHECK_CASE_FOR_CONSTANT(VSS_E_BAD_STATE ); CHECK_CASE_FOR_CONSTANT(VSS_E_UNEXPECTED ); CHECK_CASE_FOR_CONSTANT(VSS_E_PROVIDER_ALREADY_REGISTERED ); CHECK_CASE_FOR_CONSTANT(VSS_E_PROVIDER_NOT_REGISTERED); CHECK_CASE_FOR_CONSTANT(VSS_E_PROVIDER_VETO ); CHECK_CASE_FOR_CONSTANT(VSS_E_PROVIDER_IN_USE); CHECK_CASE_FOR_CONSTANT(VSS_E_OBJECT_NOT_FOUND); CHECK_CASE_FOR_CONSTANT(VSS_S_ASYNC_PENDING ); CHECK_CASE_FOR_CONSTANT(VSS_S_ASYNC_FINISHED); CHECK_CASE_FOR_CONSTANT(VSS_S_ASYNC_CANCELLED); CHECK_CASE_FOR_CONSTANT(VSS_E_VOLUME_NOT_SUPPORTED ); CHECK_CASE_FOR_CONSTANT(VSS_E_VOLUME_NOT_SUPPORTED_BY_PROVIDER ); CHECK_CASE_FOR_CONSTANT(VSS_E_OBJECT_ALREADY_EXISTS ); CHECK_CASE_FOR_CONSTANT(VSS_E_UNEXPECTED_PROVIDER_ERROR ); CHECK_CASE_FOR_CONSTANT(VSS_E_INVALID_XML_DOCUMENT ); CHECK_CASE_FOR_CONSTANT(VSS_E_MAXIMUM_NUMBER_OF_VOLUMES_REACHED ); CHECK_CASE_FOR_CONSTANT(VSS_E_FLUSH_WRITES_TIMEOUT ); CHECK_CASE_FOR_CONSTANT(VSS_E_HOLD_WRITES_TIMEOUT ); CHECK_CASE_FOR_CONSTANT(VSS_E_UNEXPECTED_WRITER_ERROR ); CHECK_CASE_FOR_CONSTANT(VSS_E_SNAPSHOT_SET_IN_PROGRESS ); CHECK_CASE_FOR_CONSTANT(VSS_E_MAXIMUM_NUMBER_OF_SNAPSHOTS_REACHED ); CHECK_CASE_FOR_CONSTANT(VSS_E_WRITER_INFRASTRUCTURE ); CHECK_CASE_FOR_CONSTANT(VSS_E_WRITER_NOT_RESPONDING ); CHECK_CASE_FOR_CONSTANT(VSS_E_WRITER_ALREADY_SUBSCRIBED ); CHECK_CASE_FOR_CONSTANT(VSS_E_UNSUPPORTED_CONTEXT ); CHECK_CASE_FOR_CONSTANT(VSS_E_VOLUME_IN_USE ); CHECK_CASE_FOR_CONSTANT(VSS_E_MAXIMUM_DIFFAREA_ASSOCIATIONS_REACHED ); CHECK_CASE_FOR_CONSTANT(VSS_E_INSUFFICIENT_STORAGE ); CHECK_CASE_FOR_CONSTANT(VSS_E_NO_SNAPSHOTS_IMPORTED ); CHECK_CASE_FOR_CONSTANT(VSS_S_SOME_SNAPSHOTS_NOT_IMPORTED ); CHECK_CASE_FOR_CONSTANT(VSS_E_MAXIMUM_NUMBER_OF_REMOTE_MACHINES_REACHED ); CHECK_CASE_FOR_CONSTANT(VSS_E_REMOTE_SERVER_UNAVAILABLE ); CHECK_CASE_FOR_CONSTANT(VSS_E_REMOTE_SERVER_UNSUPPORTED ); CHECK_CASE_FOR_CONSTANT(VSS_E_REVERT_IN_PROGRESS ); CHECK_CASE_FOR_CONSTANT(VSS_E_REVERT_VOLUME_LOST ); CHECK_CASE_FOR_CONSTANT(VSS_E_REBOOT_REQUIRED ); CHECK_CASE_FOR_CONSTANT(VSS_E_TRANSACTION_FREEZE_TIMEOUT ); CHECK_CASE_FOR_CONSTANT(VSS_E_TRANSACTION_THAW_TIMEOUT ); CHECK_CASE_FOR_CONSTANT(VSS_E_WRITERERROR_INCONSISTENTSNAPSHOT ); CHECK_CASE_FOR_CONSTANT(VSS_E_WRITERERROR_OUTOFRESOURCES); CHECK_CASE_FOR_CONSTANT(VSS_E_WRITERERROR_TIMEOUT ); CHECK_CASE_FOR_CONSTANT(VSS_E_WRITERERROR_RETRYABLE); CHECK_CASE_FOR_CONSTANT(VSS_E_WRITERERROR_NONRETRYABLE); CHECK_CASE_FOR_CONSTANT(VSS_E_WRITERERROR_RECOVERY_FAILED ); CHECK_CASE_FOR_CONSTANT(VSS_E_BREAK_REVERT_ID_FAILED); CHECK_CASE_FOR_CONSTANT(VSS_E_LEGACY_PROVIDER); CHECK_CASE_FOR_CONSTANT(VSS_E_MISSING_DISK ); CHECK_CASE_FOR_CONSTANT(VSS_E_MISSING_HIDDEN_VOLUME ); CHECK_CASE_FOR_CONSTANT(VSS_E_MISSING_VOLUME ); CHECK_CASE_FOR_CONSTANT(VSS_E_AUTORECOVERY_FAILED ); CHECK_CASE_FOR_CONSTANT(VSS_E_DYNAMIC_DISK_ERROR ); CHECK_CASE_FOR_CONSTANT(VSS_E_NONTRANSPORTABLE_BCD ); CHECK_CASE_FOR_CONSTANT(VSS_E_CANNOT_REVERT_DISKID ); CHECK_CASE_FOR_CONSTANT(VSS_E_RESYNC_IN_PROGRESS ); CHECK_CASE_FOR_CONSTANT(VSS_E_CLUSTER_ERROR ); CHECK_CASE_FOR_CONSTANT(VSS_E_ASRERROR_DISK_ASSIGNMENT_FAILED ); CHECK_CASE_FOR_CONSTANT(VSS_E_ASRERROR_DISK_RECREATION_FAILED ); CHECK_CASE_FOR_CONSTANT(VSS_E_ASRERROR_NO_ARCPATH ); CHECK_CASE_FOR_CONSTANT(VSS_E_ASRERROR_MISSING_DYNDISK ); CHECK_CASE_FOR_CONSTANT(VSS_E_ASRERROR_SHARED_CRIDISK ); CHECK_CASE_FOR_CONSTANT(VSS_E_ASRERROR_DATADISK_RDISK0 ); CHECK_CASE_FOR_CONSTANT(VSS_E_ASRERROR_RDISK0_TOOSMALL ); CHECK_CASE_FOR_CONSTANT(VSS_E_ASRERROR_CRITICAL_DISKS_TOO_SMALL ); CHECK_CASE_FOR_CONSTANT(VSS_E_WRITER_STATUS_NOT_AVAILABLE ); CHECK_CASE_FOR_CONSTANT(VSS_E_UNSELECTED_VOLUME ); CHECK_CASE_FOR_CONSTANT(VSS_E_SNAPSHOT_NOT_IN_SET ); CHECK_CASE_FOR_CONSTANT(VSS_E_NESTED_VOLUME_LIMIT ); // Regular COM errors CHECK_CASE_FOR_CONSTANT(S_OK); CHECK_CASE_FOR_CONSTANT(S_FALSE); CHECK_CASE_FOR_CONSTANT(E_UNEXPECTED); CHECK_CASE_FOR_CONSTANT(E_OUTOFMEMORY); default: break; } PWCHAR pwszBuffer = NULL; DWORD dwRet = ::FormatMessageW( FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS, NULL, hrError, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), (LPWSTR)&pwszBuffer, 0, NULL); // No message found for this error. Just return <Unknown> if (dwRet == 0) return wstring(L"<Unknown error code>"); // Convert the message into wstring wstring errorText(pwszBuffer); LocalFree(pwszBuffer); return errorText; }
// Convert a failure type into a string wstring FunctionTracer::HResult2String(HRESULT hrError) { switch (hrError) { CHECK_CASE_FOR_CONSTANT(VSS_E_BAD_STATE ); CHECK_CASE_FOR_CONSTANT(VSS_E_PROVIDER_ALREADY_REGISTERED ); CHECK_CASE_FOR_CONSTANT(VSS_E_PROVIDER_NOT_REGISTERED); CHECK_CASE_FOR_CONSTANT(VSS_E_PROVIDER_VETO ); CHECK_CASE_FOR_CONSTANT(VSS_E_PROVIDER_IN_USE); CHECK_CASE_FOR_CONSTANT(VSS_E_OBJECT_NOT_FOUND); CHECK_CASE_FOR_CONSTANT(VSS_S_ASYNC_PENDING ); CHECK_CASE_FOR_CONSTANT(VSS_S_ASYNC_FINISHED); CHECK_CASE_FOR_CONSTANT(VSS_S_ASYNC_CANCELLED); CHECK_CASE_FOR_CONSTANT(VSS_E_VOLUME_NOT_SUPPORTED ); CHECK_CASE_FOR_CONSTANT(VSS_E_VOLUME_NOT_SUPPORTED_BY_PROVIDER ); CHECK_CASE_FOR_CONSTANT(VSS_E_OBJECT_ALREADY_EXISTS ); CHECK_CASE_FOR_CONSTANT(VSS_E_UNEXPECTED_PROVIDER_ERROR ); CHECK_CASE_FOR_CONSTANT(VSS_E_CORRUPT_XML_DOCUMENT ); CHECK_CASE_FOR_CONSTANT(VSS_E_INVALID_XML_DOCUMENT ); CHECK_CASE_FOR_CONSTANT(VSS_E_MAXIMUM_NUMBER_OF_VOLUMES_REACHED ); CHECK_CASE_FOR_CONSTANT(VSS_E_FLUSH_WRITES_TIMEOUT ); CHECK_CASE_FOR_CONSTANT(VSS_E_HOLD_WRITES_TIMEOUT ); CHECK_CASE_FOR_CONSTANT(VSS_E_UNEXPECTED_WRITER_ERROR ); CHECK_CASE_FOR_CONSTANT(VSS_E_SNAPSHOT_SET_IN_PROGRESS ); CHECK_CASE_FOR_CONSTANT(VSS_E_MAXIMUM_NUMBER_OF_SNAPSHOTS_REACHED ); CHECK_CASE_FOR_CONSTANT(VSS_E_WRITER_INFRASTRUCTURE ); CHECK_CASE_FOR_CONSTANT(VSS_E_WRITER_NOT_RESPONDING ); CHECK_CASE_FOR_CONSTANT(VSS_E_WRITER_ALREADY_SUBSCRIBED ); CHECK_CASE_FOR_CONSTANT(VSS_E_UNSUPPORTED_CONTEXT ); CHECK_CASE_FOR_CONSTANT(VSS_E_VOLUME_IN_USE ); CHECK_CASE_FOR_CONSTANT(VSS_E_MAXIMUM_DIFFAREA_ASSOCIATIONS_REACHED ); CHECK_CASE_FOR_CONSTANT(VSS_E_INSUFFICIENT_STORAGE ); #ifdef VSS_SERVER CHECK_CASE_FOR_CONSTANT(VSS_E_NO_SNAPSHOTS_IMPORTED ); CHECK_CASE_FOR_CONSTANT(VSS_S_SOME_SNAPSHOTS_NOT_IMPORTED ); #endif // Regular COM errors CHECK_CASE_FOR_CONSTANT(S_OK); CHECK_CASE_FOR_CONSTANT(S_FALSE); CHECK_CASE_FOR_CONSTANT(E_UNEXPECTED); CHECK_CASE_FOR_CONSTANT(E_OUTOFMEMORY); default: break; } PWCHAR pwszBuffer = NULL; DWORD dwRet = ::FormatMessageW( FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS, NULL, hrError, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), (LPWSTR)&pwszBuffer, 0, NULL); // No message found for this error. Just return <Unknown> if (dwRet == 0) return wstring(L"<Unknown error code>"); // Convert the message into wstring wstring errorText(pwszBuffer); LocalFree(pwszBuffer); return errorText; }