是否有 Windows API 返回 NTSTATUS 代码的消息文本?
即类似于 WinAPI 的东西:
FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM, ....)
FormatMessage
不起作用 - 无论是在 ntstatus
代码上还是在 HRESULT_FROM_NT(ntstatus)
上都不起作用。
根据 MS 知识库文章,
FormatMessage
API 可用于将 NTSTATUS
代码转换为文本。
使用重要注意事项:
dwFlags
(第一个参数)应包括:
FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_FROM_HMODULE
lpSource
(第二个参数)应该是“NTDLL.DLL”的HMODULE
(可以通过LoadLibrary("NTDLL.DLL")
获取)。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"
。