如何打印NTSTATUS?

How to print NTSTATUS?

我已经使用本机编写了应用程序 APIs.I 我在理解方面遇到了一些困难 return values.What 是用于打印 native API 状态代码的格式说明符 return 由 NTSTATUS 在 c?

中编辑

我通常在printf中使用%X将其格式化为十六进制。所以你可以检查这些值的含义 here.

此外,如果您正在编写没有控制台的驱动程序或类似的东西,您应该将所有内容记录到文件中。

如果您没有 printf,您应该使用参数列表和 StringCbVPrintf

例如:

NTSTATUS Log (PWCHAR text, ... )
{
    va_list args;
    IO_STATUS_BLOCK iosb;
    ULONG length;
    UNICODE_STRING uniStr;
    WCHAR buffer [1024] = { 0 };

    va_start (args, text);
    StringCbVPrintfW ((STRSAFE_LPWSTR) buffer, 1024 * sizeof (TCHAR), text, args);
    RtlInitUnicodeString (&uniStr, (PCWSTR) buffer);
    va_end (args);

    RtlStringCbLengthW(buffer, 1024 * sizeof (TCHAR), (size_t *)&length);
    return ZwWriteFile(hLog, NULL, NULL, NULL, &iosb, (PVOID)buffer, length, NULL, NULL);
}

hLog是全局变量,开头的某处应该调用ZwCreateFile来打开日志文件。