几个 Nt 函数在 Windows 7 x32 上返回 STATUS_WAIT_0

Posted

技术标签:

【中文标题】几个 Nt 函数在 Windows 7 x32 上返回 STATUS_WAIT_0【英文标题】:Several Nt functions return STATUS_WAIT_0 on Windows 7 x32 【发布时间】:2020-01-10 19:20:24 【问题描述】:

我从 Microsoft 网站下载了一个 Windows 7 x32 Enterprise (IE11) hyper-v 映像来测试一个研究项目。

由于某种原因,我调用(系统调用)的所有 Ntdll 函数都返回 STATUS_WAIT_0。我的意思是我测试过的所有这些,包括 RtlGetVersion、NtAllocateVirtualMemory、NtCreateFile 等等。

这可能是因为它是虚拟机吗?还是因为我直接进行系统调用?

请告知,我已经在包括最新 Windows 10 在内的非虚拟机下测试了我的项目,它工作正常,所以我怀疑这是我的代码。

更新:

STATUS_WAIT_0 可以认为是 STATUS_SUCCESS,因为它的值都是 0。

【问题讨论】:

STATUS_WAIT_0 == 0 == STATUS_SUCCESS @RbMm 是的,这就是它的定义方式,但为什么呢?在某些操作系统上返回 STATUS_SUCCESS 和在某些 STATUS_WAIT_0 上没有意义... 奇怪的问题。操作系统返回二进制值 - 0。0 是 0。无处不在。 STATUS_SUCCESSSTATUS_WAIT_0S_OKNOERRORfalse - 都只是 0 的解释。 @RbMm 好的,我明白了,当然 0 是 0。我只是很困惑为什么在这个特定的操作系统上状态描述是 STATUS_WAIT_0。老实说,我认为这是因为我直接进行系统调用。谢谢! 老实说你还是不明白。 api 调用不返回字符串。它返回 0。谁以及如何将 0 转换为字符串?这当然不是特定于操作系统的,也不是因为您直接进行系统调用 【参考方案1】:

Ntdll 函数基本上返回一个NTSTATUS,比如RtlGetVersion,NtAllocateVirtualMemory,NtCreateFile 等等。

以下文档包含NTSTATUS 值的常见用法详细信息 https://docs.microsoft.com/en-us/openspecs/windows_protocols/ms-erref/596a1078-e883-4972-9bbc-49e60bebca55

返回值/代码:

0x00000000

STATUS_SUCCESS/STATUS_WAIT_0

说明:

操作成功完成。

调用方为 WaitType 指定了 WaitAny,并且 Object 数组中的一个调度程序对象已设置为信号状态。

【讨论】:

嗨,@Norbert Boros,如果这个答案对你有帮助,请随时为有相同问题的人标记它。

以上是关于几个 Nt 函数在 Windows 7 x32 上返回 STATUS_WAIT_0的主要内容,如果未能解决你的问题,请参考以下文章

windows x32调用门实现 ring3提权

windows x32调用门/中断门实现 ring3提权

windows 多少 nt 函数

Windows内核NT驱动框架基础分析

为啥 Windows 32 位称为 Windows x86 而不是 Windows x32? [关闭]

为什么Windows 32位称为Windows x86而不是Windows x32?