【问题标题】:Several Nt functions return STATUS_WAIT_0 on Windows 7 x32几个 Nt 函数在 Windows 7 x32 上返回 STATUS_WAIT_0
【发布时间】: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 转换为字符串?这当然不是特定于操作系统的,也不是因为您直接进行系统调用

标签: c++ c windows winapi


【解决方案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,如果这个答案对你有帮助,请随时为有相同问题的人标记它。
猜你喜欢
  • 2014-04-14
  • 1970-01-01
  • 1970-01-01
  • 2013-06-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-01-31
相关资源
最近更新 更多