Win8: Kann einzelne RegistryKeys nicht öffnen

  • VB.NET

Es gibt 12 Antworten in diesem Thema. Der letzte Beitrag () ist von michivandersar.

    Win8: Kann einzelne RegistryKeys nicht öffnen

    Hallo zusammen,

    Für meine Applikation ist es notwendig, einige Keys in der Registry zu ändern. Und zwar betrifft es alle Unterschlüssel von HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\AccountPicture\Users. Unterschlüssel dieses Keys sind die SID's der User. Darin wiederum befinden sich die 'Links' zu den Benutzerbildern von Win8.

    Mein Code ist bis anhin folgender:

    VB.NET-Quellcode

    1. Dim key As String = "SOFTWARE\Microsoft\Windows\CurrentVersion\AccountPicture\Users"
    2. Dim regKey As RegistryKey
    3. regKey = Registry.LocalMachine.OpenSubKey(key, True)
    4. regKey = regKey.OpenSubKey(pInfo.pSID) 'pInfo.pSID ist die SID des aktuellen Users als String gespeichert.

    Das Problem ist, dass beim Öffnen der SID nichts passiert. Also regKey bleibt auf dem Users-Schlüssel. Wenn ich die SID mit in die erste Zuweisung nehme, bekomme ich 'Nothing' als Resultat.

    Inzwischen habe ich in der Registry die Berechtigungen temporär auf Jeder->Vollzugriff geändert und die Applikation läuft mit 'requireAdministrator'.

    Ich vermute das Problem liegt an irgend einem Schutzmechanismus von Win8... Aber es muss doch möglich sein, diese Werte/Schlüssel zu ändern oder?

    Ich bedanke mich schonmal im Voraus für eure Hilfe ;)

    michivandersar schrieb:

    Aber es muss doch möglich sein, diese Werte/Schlüssel zu ändern oder?

    Nein, definitiv nicht. Genau dafür ist spätestens seit Vista (teilweise schon in XP - aber sehr unzureichend) dieser Schutzmechanismus vorhanden.

    Gerade das was du vorhast - Manipulation der Benutzerverwaltung - ist eine Sache, die ein Programm wirklich nur dann können sollte, wenn es auch mit den passenden Berechtigungen gestartet wird. Sowas sollte nicht jeder ausführen können, und ich sehe auch keinen Anwendungsfall, in dem eine Null-acht-fünfzehn-Anwendung sowas machen respektive können sollte.

    Keine Ahnung, warum ausgerechnet bei deinem Projekt sowas nötig sein sollte, aber ich bin der Meinung, du musst dir eine andere Topologie ausdenken, um das gewünschte zu erreichen. Einfach jedem Benutzer alle Rechte zu geben und einfach alle Anwendungen auf "als Admin ausführen" zu stellen ist der falsche Weg und konterkariert das mittlerweile eigentlich gut ausgearbeitete Sicherheitssystem von Windows.
    Weltherrschaft erlangen: 1%
    Ist dein Problem erledigt? -> Dann markiere das Thema bitte entsprechend.
    Waren Beiträge dieser Diskussion dabei hilfreich? -> Dann klick dort jeweils auf den Hilfreich-Button.
    Danke.

    sonne75 schrieb:

    Wie hast du es festgestellt?
    Habe beim Debuggen die regKey-Variable überwacht und dort hat sich nichts geändert...

    @Arby
    Und was für Berechtigungen müssen da vorhanden sein? - Mein User ist DomainAdmin und das Programm wird als Administrator ausgeführt. Viel mehr gibt es da gar nicht mehr...

    Hintergrund ist, dass wenn sich ein Benutzer anmeldet, mein Tool ausgeführt werden soll, welches das Benutzerbild aus der AD liest und dann im Win8 setzt. Laut unserem Sysadmin gibt es noch keine solche Funktion oder Tool welches dies macht. Die API's scheinen nur mit einer "Store-App" zu funktionieren und dann dachte ich, ich kann ja "einfach" die Bilder laden, die benötigten Grössen erstellen, diese in dem korrekten Ordner ablegen und dann in der Registry die Pfade eintragen.
    --> Wenn man ein Bild über die Systemsteuerung setzt, werden diese Bilder mit einer GUID im Namen erstellt. Leider weiss ich nicht woher diese kommt, deshalb die Änderun(en) an der Registry...
    @sonne75 : Ja, die war bereits weiter unten.

    Die zweite Frage ist, wie ich in meinem Programm die erforderlichen Rechte erhalte um diese Schlüssel zu bearbeiten. Oder falls das halt nicht möglich ist, wie ich per .Net das Benutzerbild von einem Win8-User dynamisch ändern kann...

    Update: Inzwischen konnte ich den Schlüssel zwar öffnen (kein Plan wie, habe mE nichts geändert), aber Schreiben geht nach wie vor nicht =/
    Ja das ist auf True, ging nur beim Abschreiben verloren und habs danach vergessen zu Erwähnen :S

    Beim OpenSubKey gibt es noch einen dritten Parameter: RegistryRights... Den kann ich setzen auf was ich will, ich erhalte immer eine ArgumentException (Der Angegebene RegistryKeyPermissionCheck-Wert ist ungültig) zur Laufzeit.

    sonne75 schrieb:

    Und warum gibt es kein "True" in der zweiten Anweisung? Im Objektkatalog steht, es wird dann schreibgeschützt geöffnet, ich dachte, du wolltest was ändern?

    Auszug aus MSDN:
    Type: System.Boolean
    Set to true if you need write access to the key.

    Also muss man den zweiten Parameter auf True setzen, um Schreibzugriff auf den Key zu bekommen.

    sonne75 schrieb:

    Dann wird wohl das von @Arby: stimmen...
    Das hatte ich leider befürchtet...

    Dennoch: Was ist da notwendig? Irgend ein Sicherheitszertifkat (wie bei Apps mit speziellen Berechtigungen) oder muss es als bestimmten User (z.B: System) ausgeführt werden?

    --> Ich muss @Arby widersprechen: Finde an dieser Stelle einen Schutzmechanismus völlig Sinnfrei, denn mehr als das Benutzerbild kann ich dort ja nicht ändern...