【问题标题】:Why does GetCurrentProcess return -1?为什么 GetCurrentProcess 返回 -1?
【发布时间】:2011-08-14 15:51:30
【问题描述】:

在这个小程序中,GetCurrentProcess()为什么返回-1?

int _tmain(int argc, _TCHAR* argv[]) {
    HANDLE h = GetCurrentProcess(); // ret -1 
    printf("0x%x\n",(DWORD)h); 
    return 0;
}

怎么了?

Kernel32.GetCurrentProcess 我看到了这个:

OR EAX,FFFFFFFF  ; EAX - ?
RETN

【问题讨论】:

  • 这是一个自引用的特例。如果出于某种原因(可能用于 IPC)需要它,您可以使用 OpenProcess (...) 获取代表您的流程的实际 HANDLE

标签: c++ c windows winapi


【解决方案1】:

没错,见this API reference for GetCurrentProcess

GetCurrentProcess 函数检索当前进程的伪句柄,当前定义为(HANDLE)-1。但是,由于您不应假定该值永远不会改变,因此提供了 GetCurrentProcess 函数作为将常量硬编码到代码中的替代方法。

【讨论】:

    【解决方案2】:

    -1 是代表当前进程的伪句柄。这很正常。

    【讨论】:

      【解决方案3】:

      -1 值没有任何问题。它将指示当前进程句柄。可以参考this msdn page的备注部分

      【讨论】:

      • 如果你试图跨进程边界来传递这个句柄是没有意义的,所以这取决于你如何看待它。在进程 A 中,它引用进程 A,如果将其传递给进程 B,则它引用进程 B。真实(非负)句柄不具有这些属性,并且当从进程 A 传递到 B 时,继续引用它们的原始进程。
      猜你喜欢
      • 1970-01-01
      • 2012-01-25
      • 2012-03-05
      • 2017-06-04
      • 2015-01-25
      • 2023-03-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多