为什么GetCurrentProcess返回-1?
问题描述:
在这个小程序中,为什么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
答
这是正确的,请参阅this API reference for GetCurrentProcess。
GetCurrentProcess
函数检索当前进程的伪句柄,该句柄当前定义为(HANDLE)-1
。但是,因为您不应该认为该值永远不会改变,所以可以使用GetCurrentProcess
函数作为将常量硬编码到代码中的替代方法。
答
-1
是伪句柄表示当前进程。这是正常的。
答
-1值没有错。它会指示当前的进程句柄。您可以参考this msdn page中的备注部分
+1
如果你试图跨越进程边界来传递这个句柄,那么这是没有意义的,所以根据你如何看待它会出现问题。在进程A中,它指的是进程A,如果你将它传递给进程B,它将引用进程B.真正(非负)句柄没有这些属性,当从进程A传递给B时继续引用其原始进程。 – 2016-09-28 11:00:16
这是一个自引用特例。你可以通过使用'OpenProcess(...)'来获得代表你的过程的实际'HANDLE',如果你需要它的话(可能是IPC)。 – 2016-09-28 10:57:18