Попытка выполнить тест бедняков о том, запущен процесс или нет (по сути, эквивалент тривиального kill(pid, 0)
.)
Надеялся, что можно будет просто позвонить OpenProcess
с минимальным желаемым доступом, а затем проверить на GetLastError() == ERROR_INVALID_PARAMETER
или GetExitCodeProcess(...) != STILL_ACTIVE
.
Хорошая попытка ... Работает в Windows XP от имени администратора:
HANDLE hProc = OpenProcess(PROCESS_QUERY_INFORMATION, FALSE, pid);
if (!hProc) {
DWORD dwLastError = GetLastError();
}
... терпит неудачу с dwLastError == ERROR_ACCESS_DENIED
, когда pid
принадлежит другому (не SYSTEM) пользователю. Более того, если pid
изначально принадлежал другому пользователю, но с тех пор прекратил работу, OpenProcess
также завершится с ERROR_ACCESS_DENIED
(не ERROR_INVALID_PARAMETER
.)
Нужно ли использовать Process32First
/ Process32Next
или EnumProcesses
?
Я абсолютно не хочу использовать SeDebugPrivilege
.
Спасибо,
V * * 1 032