如何打印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
来打开日志文件。
我已经使用本机编写了应用程序 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
来打开日志文件。