Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/61.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 为什么GetCurrentProcess返回-1?_C++_C_Windows_Winapi - Fatal编程技术网

C++ 为什么GetCurrentProcess返回-1?

C++ 为什么GetCurrentProcess返回-1?,c++,c,windows,winapi,C++,C,Windows,Winapi,在这个小程序中,为什么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 -1是表示当前进程

在这个小程序中,为什么
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

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

这是正确的,请参阅

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


-1值没有问题。它将指示当前进程句柄。您可以参考

中的备注部分,这是一个自指特例。如果出于某种原因(可能是IPC)需要,您可以使用
OpenProcess(…)
获得表示流程的实际
句柄。如果您试图跨流程边界传递此句柄,则毫无意义,因此根据您对它的看法,会出现一些错误。在流程A中,它指的是流程A,如果将其传递给流程B,则它指的是流程B。实际(非负)句柄没有这些属性,当从流程A传递到流程B时,将继续引用其原始流程。