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时,将继续引用其原始流程。