Ich bereite ein Delphi-Modul vor, das einen Haken in einem Thread setzt, um ein Makro aufzuzeichnen:
%Vor% Das funktioniert auf WinXP gut, aber auf Vista / Windows 7 scheitert mit ERROR_ACCESS_DENIED
.
Ich habe in Google gefunden ( dies ) Referenzieren ( das ). Das Zitat:
Ein niedrigerer Privilegierungsprozess kann nicht: ... Verwenden Sie Journal-Hooks, um a zu überwachen Prozess mit höherer Berechtigung.
Versuchte ohne Erfolg:
Das Codebeispiel:
%Vor% LogonUser
und ImpersonateLoggedOnUser
werden ohne Fehler ausgeführt.
Andere Möglichkeiten zu versuchen:
Könnten Sie bitte den Code zeigen, der den Haken unter Visa / Windows 7 setzt oder die Arbeitslösung vorschlägt?
Lesen Sie den Artikel im Abschnitt "Einschränkung der Benutzeroberflächenprivilegien" noch einmal sorgfältig. Es bezieht sich auf Integritätslevel , nicht auf Benutzerberechtigungen . Aus diesem Grund löst die Identität eines anderen Benutzers das Problem nicht. Die Integritätsstufe wird beim Start des Prozesses festgelegt und kann im Code nicht dynamisch geändert werden.
User Interface Privilege Isolation (UIPI) ist einer der Mechanismen Dies hilft bei der Isolierung von Prozessen, die als vollständiger Administrator ausgeführt werden Prozesse, die als ein Konto ausgeführt werden, das niedriger ist als ein Administrator auf dem gleicher interaktiver Desktop UIPI ist spezifisch für die Fensterung und Grafik-Subsystem, bekannt als USER, das Windows und Benutzer unterstützt Schnittstellensteuerungen. UIPI verhindert eine Anwendung mit niedrigerer Berechtigung von Verwenden von Windows-Nachrichten, um Eingaben von einem Prozess an einen höheren zu senden Privilegierungsprozess. Das Senden von Eingaben von einem Prozess zu einem anderen ermöglicht a Prozess, um Eingabe in einen anderen Prozess ohne den Benutzer zu injizieren Bereitstellung von Tastatur- oder Mausaktionen.
Windows Vista implementiert UIPI, indem es eine Benutzerschnittstelle definiert Privilegien Ebenen in einer hierarchischen Art und Weise. Die Art der Ebenen ist so, dass höhere Berechtigungsstufen Fenstermeldungen an senden können Anwendungen, die auf niedrigeren Ebenen ausgeführt werden. Niedrigere Ebenen können jedoch nicht Fenstermeldungen an Anwendungsfenster senden, die auf höheren Ebenen ausgeführt werden.
Die Berechtigungsebene der Benutzerschnittstelle befindet sich auf Prozessebene. Wenn ein Prozess wird initialisiert, das Benutzersubsystem ruft die Sicherheit auf Subsystem zur Bestimmung der Desktop - Integritätsebene, die im Sicherheitszugriffstoken des Prozesses. Die Desktop-Integritätsebene wird durch festgelegt das Sicherheitssubsystem, wenn der Prozess erstellt wird und nicht Veränderung. Daher wird die Benutzeroberflächen-Berechtigungsebene auch durch festgelegt Das Benutzer-Subsystem, wenn der Prozess erstellt wird und sich nicht ändert.
Alle Anwendungen, die von einem Standardbenutzer ausgeführt werden, haben dieselbe Benutzeroberfläche Privilegstufe. UIPI stört nicht oder ändert das Verhalten von Window-Messaging zwischen Anwendungen auf derselben Berechtigungsstufe. UIPI tritt für einen Benutzer in Kraft, der Mitglied der Administratorgruppe und führt möglicherweise Anwendungen als Standard aus Benutzer (manchmal als Prozess mit einem gefilterten Zugriffstoken bezeichnet) und Prozesse, die mit einem vollständigen Administratorzugriffstoken ausgeführt werden derselbe Desktop. UIPI verhindert Prozesse mit niedrigeren Rechten Zugriff auf Prozesse mit höherer Berechtigung durch Blockieren des aufgelisteten Verhaltens unten.
- Verwenden Sie Journal-Hooks, um einen Prozess mit höheren Berechtigungen zu überwachen.
Laut diesem Artikel benötigt Ihre App ein UAC-Manifest, das requestedExecutionLevel=requireAdministrator
angibt. und uiAccess=True
. Das UIAccess-Recht ist wichtig:
Durch Angabe von UIAccess="true" im Attribut requestedPrivileges Die Anwendung fordert die Umgehung von UIPI-Einschränkungen ... Ein Prozess, der mit UIAccess-Rechten gestartet wird:
- Kann Journal-Hooks setzen.
Tags und Links windows-7 delphi winapi windows-vista setwindowshookex