Komfortabler Dateimanager mit vielen Funktionen

UAC in der Praxis

By Sven on 06.01.2007 - 10:11 in Windows Vista

Im November hat mich die c’t gefragt, ob ich nicht einen Artikel zur Benutzerkontensteuerung in Vista schreiben wolle. SpeedCommander 11.5 war fertiggestellt und mein Kopf war wieder frei für etwas Abwechslung, also habe ich zugesagt. Das Ergebnis findet ihr in der aktuellen Ausgabe 2/2007 auf Seite 170. DerArtikel liefert ein paar Hintergrundinformationen zur UAC und sollte auch für Nicht-Programmierer interessant sein. Geplant waren eigentlich nur zwei bis drei Seiten, am Ende sind es dann aber doch fünf geworden.

Interessierte Programmierer können sich über den Softlink auch ein kleines Programm samt Quellcode herunterladen, welches den Einsatz eines COM-Objekts für Funktionen mit erhöhten Rechten demonstriert. Das Programm hatte ich gleich am Anfang geschrieben. Kurz vor Abgabetermin stellte sich aber heraus, dass das COM-Objekt nur bei eingeschränkten Administratoren wie gewünscht funktionierte. Bei einfachen Benutzern wurde es zwar über die Benutzerkontensteuerung gestartet, allerdings gab jeder Methodenaufruf nur ein E_ACCESSDENIED zurück. Das Debuggen von Anwendungen über Prozessgrenzen hinweg ist eine abenteuerliche Sache, die unterschiedliche Rechtelage kommt hier noch erschwerend hinzu. Es bleibt einem daher nicht viel mehr übrig, als das zu debuggende COM-Objekt mit MessageBox-Aufrufen zuzupflastern, um zu sehen, woran es hakt.

Das Objekt wurde korrekt initialisiert und auch wieder freigegeben, was mir auch per MessageBox bestätigt wurde. Bei den einzelnen Methodenaufrufen gab es allerdings keine Reaktion, der MessageBox-Aufruf gleich beim Start der Routine wurde nicht ausgeführt. Die IUnknown-Funktionen QueryInterface, AddRef und Release haben hingegen funktioniert. Als erstes hatte ich den Proxycode im Verdacht, aber warum funktioniert das ganze dann bei einem eingeschränkten Administrator ohne Probleme?

Bei der Suche nach einer Antwort stolperte ich dann über einen Blogeintrag des Vista Compatibility Teams, welcher ein Beispiel zum Aufruf eines COM-Objekts enthält. In den Kommentaren hatte jemand das gleiche Problem festgestellt, so dass der Eintrag noch einmal aktualisiert wurde:

If you try to launch this application from a real standard user (so not a filtered admin), you will get an E_ACCESSDENIED on the actual method call. In order to get around this you will need to give the interactive user access permission to the COM component.

Es ist natürlich müßig zu erwähnen, dass dieser extrem wichtige Hinweis in keiner Dokumentation erwähnt wird. Die Freigabe für interaktive Benutzer kann über die Komponentendienste (dcomcnfg.exe) erfolgen. Freunde der Kommandozeile benutzen das Programm dcomperm.exe, welches sich im Platform SDK (Samples\Com\Fundamentals\DCom) befindet. Bei Interesse bringe ich gerne auch noch ein paar Zeilen ATL-Code, mit denen sich das gleich bei der Registrierung des COM-Objekts erledigen lässt.

Es gibt 3 Kommentare zu diesem Beitrag

Trackback URL | RSS-Feed für Kommentare

  1. Kay sagt:

    Hab Dich lange nicht gesehen…
    Seit wann hast Du einen Bart und ein buntes Küchenfenster? 😉

  2. thomas sagt:

    hab die ct schon seit fr aber gelesen hab ich noch nichts 🙁 also direkt mal anfangen!

  3. Sven sagt:

    Tja Kay, man wird eben älter. 😉

Top