哪个 API 返回 NTSTATUS 消息?

问题描述 投票:0回答:1

是否有 Windows API 返回 NTSTATUS 代码的消息文本?

即类似于 WinAPI 的东西:

FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM, ....)

FormatMessage
不起作用 - 无论是在
ntstatus
代码上还是在
HRESULT_FROM_NT(ntstatus)
上都不起作用。

windows winapi
1个回答
0
投票

根据 MS 知识库文章

FormatMessage
API 可用于将
NTSTATUS
代码转换为文本。

使用重要注意事项:

  1. dwFlags
    (第一个参数)应包括:
    FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_FROM_HMODULE
    
  2. 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"

© www.soinside.com 2019 - 2024. All rights reserved.