Список функций для получения текста ошибок из их кодов (WinAPI)

в 7:44, , рубрики: c++, error, msdn, WinAPI, windows, метки: , , ,

Список функций для получения текста ошибок из их кодов (WinAPI)

Здраствуйте!

Представляю обзор функций для получения текста ошибок из их кодов, который представлен в программе Error Lookup.

1. FormatMessage

Эта функция не такая уж и простая как может показаться (большая часть функционала в вышеупомянутой программе реализована через неё, т.к. эту функцию можно настроить на получение НЕ только системных кодов ошибок, см. пункт 2). По умолчанию функция выдаёт код системной ошибки.

Пример:
Функция получает текст ошибки из кода системных ошибок

// пример получения текста системной ошибки
FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM, NULL, 1337, 0, lpszBuffer, cchBuffer, NULL);

printf("Error Code: %dnError Name: %s", 1337, lpszBuffer);

Результат:

Error Code: 1337
Error Text: Идентификатор безопасности имеет неверную структуру.
2. FormatMessage + FORMAT_MESSAGE_FROM_HMODULE

При установленном флаге FORMAT_MESSAGE_FROM_HMODULE можно загрузить список ошибок из модуля (DLL) в котором находится список ошибок:

  • ntdll.dll — список ошибок NTSTATUS
  • wininet.dll — список ошибок Wininet
  • pdh.dll — список ошибок Performance Data Helper
  • … допишите в комментариях если знаете ещё

Пример:
В этом примере база ошибок загружается из файла ntdll.dll

// загружаем ntdll.dll для получения текста NTSTATUS ошибки
FormatMessage(FORMAT_MESSAGE_FROM_HMODULE, LoadLibrary("ntdll.dll"), -1072037872, 0, lpszBuffer, cchBuffer, NULL);

printf("Error Code: %dnError Name: %s", -1072037872, lpszBuffer);

Результат:

Error Code: -1072037872
Error Text: Служба журнала обнаружила попытку ошибочного выделения или освобождения зарезервированного пространства.
3. DXGetErrorString & DXGetErrorDescription
  • DXGetErrorString — функция для получения имени ошибки (например ERROR_INVALID_SID)
  • DXGetErrorDescription — функция для получения текста ошибки (например The security ID structure is invalid.)

Пример:
Пример получения ошибки DirectX:

// получение текста DirectX ошибки
printf("Error Code: %dnError Name: %snError Text: %s", 1337, DXGetErrorString((HRESULT)1337), DXGetErrorDescription((HRESULT)1337));

Результат:

Error Code: 1337
Error Name: ERROR_INVALID_SID
Error Text: The security ID structure is invalid.
4. RasGetErrorString

Эта функция для получает текст ошибки из библиотеки функций RAS

Пример:
Функция получает текст ошибки из кода RAS ошибок

// пример получения текста RAS ошибки
RasGetErrorString(633, lpszBuffer, cchBuffer);

printf("Error Code %dnError Text: %s", 633, lpszBuffer);

Результат:

Error Code: 633
Error Text: Модем или другое устройство связи уже используется или не настроено.
5. GetIpErrorString

Эта функция для получения текста ошибки из библиотеки функций IP Helper Library

Пример:
Функция получает текст ошибки

// получаем текст ошибки IP Helper Library
GetIpErrorString(12, lpszBuffer, cchBuffer);

printf("Error Code %dnError Text: %s", 12, lpszBuffer);

Результат:

Error Code: 12
Error Text: General failure.
Бонус

Ссылки на скачивание программы

Автор: hatred

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js