Здраствуйте!
Представляю обзор функций для получения текста ошибок из их кодов, который представлен в программе 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