2011-04-28 273 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