Я прочитал пару постов о том, как проверить, завершился ли процесс из другого процесса (я понимаю, что некоторые люди зацикливаются на семантике здесь, но просто приколят меня), и я попытался реализовать это, но сталкиваюсь с код ошибки 5 («ERROR_ACCESS_DENIED») повсюду.
Вот что я делаю.
1) Процесс 1 (P1) запускает процесс 2 и записывает в общую память свой собственный PID.
2) Процесс 2 (P2) считывает PID из общей памяти
3) P2 вызывает OpenProcess (...) с PID P1, чтобы сохранить дескриптор, который он может проверить позже.
4) P2 неоднократно вызывает GetExitCodeProcess (...) с PID P1 и проверяет код STILL_ACTIVE.
В приведенном выше методе я продолжаю получать сообщение об ошибке ACCESS_DENIED в GetExitCodeProcess. Я попытался изменить привилегии P2 с помощью приведенного ниже кода из документов 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);
Но я продолжаю получать ошибку ACCESS_DENIED при вызове метода OpenProcessToken (...). Так значит ли это что-то вроде системного барьера? У меня есть права администратора на моей машине, и я использую XP.
Заранее спасибо за любую помощь.