几个 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_SUCCESS
或 STATUS_WAIT_0
或 S_OK
或 NOERROR
或 false
- 都只是 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的主要内容,如果未能解决你的问题,请参考以下文章