Pregunta

Leí un par de publicaciones sobre cómo verificar si un proceso ha salido de un proceso diferente (me doy cuenta de que algunas personas se colgan de la semántica aquí, pero solo me encantan) e intenté implementarlo, pero me estoy encontrando con el código de error 5 ("Error_access_Denied") por todo el lugar.

Esto es lo que hago.

1) El proceso 1 (P1) inicia el proceso 2 y escribe en una ubicación de memoria compartida su propio PID.

2) El proceso 2 (P2) lee el PID de la memoria compartida

3) P2 llama a OpenProcess (...) con el PID de P1 para guardar un mango que pueda verificar más tarde.

4) Las llamadas de P2 getExitCodeProcess (...) con el PID de P1 repetidamente y verifica un código aún_activo.

En el método anterior, sigo recibiendo el error Access_Denied en GetExitCodeProcess. He intentado modificar los privilegios de P2 usando el siguiente código de los documentos de MSDN:

HANDLE proc_h = OpenProcess(SYNCHRONIZE, FALSE, GetCurrentProcessId());
HANDLE hToken;
OpenProcessToken(proc_h, TOKEN_ADJUST_PRIVILEGES, &hToken);

LookupPrivilegeValue(NULL, lpszPrivilege, &luid );

tp.PrivilegeCount = 1;
tp.Privileges[0].Luid = luid;
tp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
// Enable the privilege
AdjustTokenPrivileges(hToken, 
                      FALSE, 
                      &tp, 
                      sizeof(TOKEN_PRIVILEGES), 
                      (PTOKEN_PRIVILEGES) NULL, 
                      (PDWORD) NULL);

Pero sigo recibiendo el error Access_Denied en el método de llamada a OpenProcessToken (...). Entonces, ¿esto indica algún tipo de obstáculo a nivel de sistema? Tengo derechos de administración en mi máquina y estoy ejecutando XP.

Gracias de antemano por cualquier ayuda.

No hay solución correcta

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top