2011-04-28 168 views
19

在这个小程序中,为什么GetCurrentProcess()返回-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 
+0

这是一个自引用特例。你可以通过使用'OpenProcess(...)'来获得代表你的过程的实际'HANDLE',如果你需要它的话(可能是IPC)。 – 2016-09-28 10:57:18

回答

21

这是正确的,请参阅this API reference for GetCurrentProcess

GetCurrentProcess函数检索当前进程的伪句柄,该句柄当前定义为(HANDLE)-1。但是,因为您不应该认为该值永远不会改变,所以可以使用GetCurrentProcess函数作为将常量硬编码到代码中的替代方法。

6

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

4

-1值没有错。它会指示当前的进程句柄。您可以参考this msdn page中的备注部分

+1

如果你试图跨越进程边界来传递这个句柄,那么这是没有意义的,所以根据你如何看待它会出现问题。在进程A中,它指的是进程A,如果你将它传递给进程B,它将引用进程B.真正(非负)句柄没有这些属性,当从进程A传递给B时继续引用其原始进程。 – 2016-09-28 11:00:16