Domanda

Ho letto un paio di post su come verificare se un processo è uscito da un processo diverso (mi rendo conto che alcune persone vengono appese alla semantica qui, ma ho solo umoriti) e ho provato a implementarlo ma sto correndo nel codice di errore 5 ("ERROR_ACCESS_DENIED") dappertutto.

Ecco cosa faccio.

1) Il processo 1 (P1) lancia il processo 2 e scrive in una posizione di memoria condivisa il proprio PID.

2) processo 2 (p2) legge il PID dalla memoria condivisa

3) P2 chiama OpenProcess (...) con il PID di P1 per salvare un manico che può controllare in seguito.

4) P2 chiama getExitCodeProcess (...) con il PID di P1 ripetutamente e controlla un codice Still_Active.

Nel metodo sopra, continuo a ottenere l'errore Access_Denied su getExitCodeProcess. Ho provato a modificare i privilegi di P2 utilizzando il codice seguente dai documenti di 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);

Ma continuo a ricevere l'errore Access_Denied sulla chiamata al metodo OpenProcessToken (...). Quindi questo indica una sorta di ostacolo a livello di sistema? Ho i diritti di amministrazione sulla mia macchina e sto eseguendo XP.

Grazie in anticipo per qualsiasi aiuto.

Nessuna soluzione corretta

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top