2011-04-28 18 views
19

En este pequeño programa, ¿por qué GetCurrentProcess() devuelve -1?¿Por qué GetCurrentProcess devuelve -1?

int _tmain(int argc, _TCHAR* argv[]) { 
    HANDLE h = GetCurrentProcess(); // ret -1 
    printf("0x%x\n",(DWORD)h); 
    return 0; 
} 

¿Qué problema?

En Kernel32.GetCurrentProcess I ver esto:

OR EAX,FFFFFFFF ; EAX - ? 
RETN 
+0

Es un caso especial autorreferencial. Puede obtener el 'MANGO' real que representa su proceso si lo necesita por alguna razón (quizás para IPC) usando 'OpenProcess (...)'. –

Respuesta

21

Eso es correcto, vea this API reference for GetCurrentProcess.

La función GetCurrentProcess recupera una pseudo-mango para el proceso actual, que se define actualmente como (HANDLE)-1. Sin embargo, como no debe suponer que el valor nunca cambiará, la función GetCurrentProcess se proporciona como una alternativa a la codificación de la constante en su código.

6

-1 es el pseudo-mango que representa el proceso actual. Es normal.

4

No hay nada malo con -1 value. Indicará el manejo del proceso actual. Puede consultar la sección de comentarios en this msdn page

+1

No tiene sentido si intentas comunicar este identificador a través de los límites del proceso, por lo que hay algo mal dependiendo de cómo lo mires. En el proceso A se refiere al proceso A, si pasa al proceso B se refiere al proceso B. Los identificadores reales (no negativos) no tienen estas propiedades, y cuando pasan del proceso A al B continúan haciendo referencia a su proceso original. –

Cuestiones relacionadas