ProzessName & BenutzerName -> ProzessID?
-
Hallo,
ich habe den Benutzer- und den Prozess-Namen. Wie kann ich daraus die Prozess-ID herausfinden?
Danke!
-
wird in der struktur <processentry32> gespeichert http://msdn.microsoft.com/library/default.asp?url=/library/en-us/perfmon/base/processentry32_str.asp
alle prozesse durchlaufen
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/perfmon/base/taking_a_snapshot_and_viewing_processes.asp
exe-namen vergleichen und schon hast du die id
-
Danke für die Antwort!
Folgendes:
- Ich verwende WINNT, deshalb bekomme ich bei der Ausführung des Beispiels auf der SDK-Seite folgende Fehlermeldung:Der Prozedureinstiegspunkt "CreateToolhelp32Snapshot" konnte
in der Dynamic Link Library "KERNEL32.DLL" nicht gefunden werden.Gibt es da eine Lösung?
- Ich finde da keinen Benutzernamen, oder habe ich den übersehen? Der Benutzername dient dazu, die richtige ProzessID zu finden, da mehrere User den gleichen Prozess (Programm) starten (auf dem Server).
Danke nochmals
-
Ok, hat sich erledigt. Ich habe was gefunden und einbißchen angepaßt:
//--------------------------------------------------------------------------- AnsiString LookupProcessUser(DWORD dwPID) { HANDLE hProcessHandle; /* for OpenProcess */ HANDLE hProcessToken; /* for OpenProcessToken */ hProcessHandle = OpenProcess(PROCESS_QUERY_INFORMATION | PROCESS_VM_READ, FALSE, dwPID); if (hProcessHandle == NULL) { // unable to get process handle, try next ShowMessage("ERROR:OpenProcess"); return ""; } if (!OpenProcessToken(hProcessHandle, TOKEN_READ | TOKEN_EXECUTE, &hProcessToken)) { // unable to get process token, try next ShowMessage("ERROR:OpenProcessToken"); return ""; } /* get information from the process token, specifically the user name */ TOKEN_USER userToken, *pUserToken; DWORD dwSize = sizeof(TOKEN_USER), dwRetSize; PSID pSid; if (!GetTokenInformation(hProcessToken, TokenUser, (LPVOID)&userToken, dwSize, &dwRetSize)) { // Assume userToken too small, try larger buffer pUserToken = (TOKEN_USER*)new BYTE[dwRetSize]; dwSize = dwRetSize; if (!GetTokenInformation(hProcessToken, TokenUser, (LPVOID)pUserToken, dwSize, &dwRetSize)) { delete [] pUserToken; ShowMessage("ERROR:GetTokenInformation"); return ""; } else { pSid = pUserToken->User.Sid; } } else { pSid = userToken.User.Sid; } // Now, try to look up the username. char szUserName[1024], szDomainName[1024]; DWORD dwUserSize = 1024, dwDomainSize = 1024; SID_NAME_USE sidType; if (!LookupAccountSid(NULL, pSid, szUserName, &dwUserSize, szDomainName, &dwDomainSize, &sidType)) { // unable to get user name if (pUserToken) delete [] pUserToken; ShowMessage("ERROR:GetTokenInformation"); return ""; } // Finally. if (pUserToken) delete [] pUserToken; AnsiString sUser(szUserName); return sUser; } //---------------------------------------------------------------------------
-