Существует ли Windows API, возвращающий текст сообщения для кодов NTSTATUS?
то есть что-то похожее на WinAPI: FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM, ....)
FormatMessage
не работает - ни на ntstatus
коде, ни на HRESULT_FROM_NT(ntstatus)
.
Важным моментом в записи базы знаний является использование FORMAT_MESSAGE_FROM_HMODULE
и передача результата LoadLibrary("NTDLL.DLL")
для параметра lpSource
.
Это должно быть опубликовано как ответ.
Согласно этой статье базы знаний MS , FormatMessage API можно использовать для преобразования NTSTATUS
кода в текст.
Статья выше содержит полный пример использования.
Важные замечания по использованию:
dwFlags
(первый параметр) должен включать:
FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_FROM_HMODULE
lpSource
(второй параметр) должен быть HMODULE
файла «NTDLL.DLL» (можно получить через LoadLibrary("NTDLL.DLL")
).Другая альтернатива, если вы используете C++, — использовать std::system_category (доступно начиная с C++ 11).
#include <system_error> // required for std::system_category
#include <iostream>
// ...
std::string message1 = std::system_category().message(STATUS_TIMEOUT);
std::cout << message1 << std::endl;
Выход:
The wait operation timed out.
Примечание: не все значения NTSTATUS
поддерживаются std::system_category()
, для некоторых вы получите "unknown error"
.
FormatMessage
должна иметь возможность конвертироватьNTSTATUS
в строку. Там есть пример, как его использовать. Вы уверены, что это не работает?