Für einige Benutzer wird der OpenProcess-Zugriff verweigert
Posted: 05 Jan 2025, 05:07
Ich habe eine Anwendung, die einen anderen 32-Bit-Prozess außerhalb des Systems öffnet und versucht, mit EnumProcessModulesEx eine Liste seiner geladenen Module und mit GetModuleFileNameEx den Pfad jedes Moduls abzurufen. Es funktioniert gut in meiner Entwicklungsumgebung (Windows 10) und bei vielen Benutzern, die die Anwendung getestet haben. Allerdings schlägt bei einigen Benutzern (zwei Benutzer, Windows 8.1 und Windows 10) die OpenProcess()-Funktion mit Zugriff verweigert (Fehlercode 5).
Ich öffne den Prozess mit PROCESS_QUERY_INFORMATION | PROCESS_VM_READ. Das Öffnen des Prozesses mit PROCESS_QUERY_LIMITED_INFORMATION funktioniert, aber dann schlägt EnumProcessModulesEx fehl. Nach meinen Tests führen sowohl PROCESS_QUERY_INFORMATION als auch PROCESS_VM_READ bei alleiniger Verwendung dazu, dass OpenProcess() für Benutzer mit dem genannten Problem fehlschlägt. Ich glaube auch, dass PROCESS_QUERY_INFORMATION | PROCESS_VM_READ ist für EnumPorcessModulesEx erforderlich, daher ist der Versuch mit weniger Zugriffsrechten keine Option.
Wenn die Anwendung jedoch mit „< strong>Als Administrator ausführen“, tritt dieses Problem nicht mehr auf. OpenProcess() funktioniert und auch die Anwendung funktioniert wie erwartet.
Das Problem
Funktioniert für die meisten Benutzer, gibt jedoch den Fehlercode 5 zurück, der Zugriff wird für einige Benutzer der Anwendung verweigert.
Teillösung
...besteht darin, die Anwendung als Administrator auszuführen. OpenProcess() funktioniert dann gut.
Frage
Warum wird der Zugriff verweigert? einige Benutzer, wenn die Anwendung ohne „Als Administrator ausführen“ ausgeführt wird? Gibt es eine alternative Möglichkeit, eine Liste der Module eines anderen Prozesses abzurufen, ohne meine Anwendung als Administrator auszuführen?
Ich öffne den Prozess mit PROCESS_QUERY_INFORMATION | PROCESS_VM_READ. Das Öffnen des Prozesses mit PROCESS_QUERY_LIMITED_INFORMATION funktioniert, aber dann schlägt EnumProcessModulesEx fehl. Nach meinen Tests führen sowohl PROCESS_QUERY_INFORMATION als auch PROCESS_VM_READ bei alleiniger Verwendung dazu, dass OpenProcess() für Benutzer mit dem genannten Problem fehlschlägt. Ich glaube auch, dass PROCESS_QUERY_INFORMATION | PROCESS_VM_READ ist für EnumPorcessModulesEx erforderlich, daher ist der Versuch mit weniger Zugriffsrechten keine Option.
Wenn die Anwendung jedoch mit „< strong>Als Administrator ausführen“, tritt dieses Problem nicht mehr auf. OpenProcess() funktioniert und auch die Anwendung funktioniert wie erwartet.
Das Problem
Code: Select all
hProcess = OpenProcess(PROCESS_QUERY_INFORMATION | PROCESS_VM_READ, FALSE, processid);
Teillösung
...besteht darin, die Anwendung als Administrator auszuführen. OpenProcess() funktioniert dann gut.
Frage
Warum wird der Zugriff verweigert? einige Benutzer, wenn die Anwendung ohne „Als Administrator ausführen“ ausgeführt wird? Gibt es eine alternative Möglichkeit, eine Liste der Module eines anderen Prozesses abzurufen, ohne meine Anwendung als Administrator auszuführen?