WINSDK: Determining whether an arbitrary pid identifies a running process on Windows
        Posted  
        
            by Vlad Romascanu
        on Stack Overflow
        
        See other posts from Stack Overflow
        
            or by Vlad Romascanu
        
        
        
        Published on 2010-03-05T01:42:47Z
        Indexed on 
            2010/03/12
            6:37 UTC
        
        
        Read the original article
        Hit count: 274
        
Attempting to implement a poor man's test of whether a process is still running or not (essentially an equivalent of the trivial kill(pid, 0).)
Hoped to be able to simply call OpenProcess with some minimal desired access then test for either GetLastError() == ERROR_INVALID_PARAMETER or GetExitCodeProcess(...) != STILL_ACTIVE.
Nice try... Running on Windows XP, as administrator:
HANDLE hProc = OpenProcess(PROCESS_QUERY_INFORMATION, FALSE, pid);
if (!hProc) {
  DWORD dwLastError = GetLastError();
}
...fails miserably with dwLastError == ERROR_ACCESS_DENIED when pid is owned by a different (not SYSTEM) user.  Moreover, if pid was originally owned by a different user but has since terminated, OpenProcess also fails with ERROR_ACCESS_DENIED (not ERROR_INVALID_PARAMETER.)
Do I have to use Process32First/Process32Next or EnumProcesses?
I absolutely do not want to use SeDebugPrivilege.
Thanks, V
© Stack Overflow or respective owner