Registry anderer Benutzer

  • VB.NET

Es gibt 9 Antworten in diesem Thema. Der letzte Beitrag () ist von hal2000.

    Registry anderer Benutzer

    Hallo zusammen,

    ich möchte mit meinem Programm die Registry Struktur der anderen Windowsbenutzer laden und evnt. bearbeiten (Adminrechte vorhanden), wie man es mit regedit.exe über "Struktur laden" machen kann.
    Gibt es da eine Möglichkeit?

    Danke im Voraus!
    Erstmal Danke für die Antwort. Meine Frage ist jedoch, wie ich auf die Registryschlüssel der anderen Benutzer zugreifen kann. Als z.b.: als Administrator auf den Schlüssel des Gastkontos. Mit regedit.exe kann ich einfach auf Strucktur laden gehen und dann die Datei ntuser.bat im Verzeichnis des entsprechenden Benutzers auswählen. Das ganze möchte ich mit VB 2008 realisieren.
    Ja, aber man kann dort nur auf die Schlüssel der Systemkonten ("System", "Lokaler Dienst", usw) und den eigenen zugreifen. Nur wenn man in regedit.exe manuell auf "Struktur laden" geht, kann man bis zum nächsten Neustart die Registryschlüssel der anderern Benutzer sehen und bearbeiten.
    Danke für die Antwort!!!!

    Jedoch funktioniert das bei mir bis jetzt nicht so wirklich. Ich bekomme keine Fehlermeldung b.z.w. Ausnahme geworfen.

    VB.NET-Quellcode

    1. Public Declare Function RegLoadKey Lib "advapi32.dll" Alias "RegLoadKeyA" ( _
    2. ByVal hKey As Integer, _
    3. ByVal lpSubKey As String, _
    4. ByVal lpFile As String _
    5. ) As Integer
    6. Public Declare Function RegUnLoadKey Lib "advapi32.dll" Alias "RegUnLoadKeyA" ( _
    7. ByVal hKey As Integer, _
    8. ByVal lpSubKey As String _
    9. ) As Integer


    Aufruf (ich habe bereits geprüft, ob der wert rd richtig gesetzt wird; sid steht für die Id des Benutzers und wird ebenfalls korrekt gesetzt):

    VB.NET-Quellcode

    1. Dim rv = RegistryHive.Users
    2. Dim rd As String = My.Computer.Registry.LocalMachine.OpenSubKey("SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList\" & sid).GetValue("ProfileImagePath") & "\NTUSER.DAT"
    3. Dim rl = RegLoadKey(rv, sid, rd)
    4. Dim runkey As RegistryKey = My.Computer.Registry.Users.OpenSubKey(sid & "\Software\Microsoft\Windows\CurrentVersion\Run")
    5. RegUnLoadKey(RegistryHive.Users, sid)


    Ich kann auf den geladenen Schlüssel nach wie vor nicht zugreifen. Zum Test habe ich zwischen zeitig mal ein Funktion eingefügt, die alle Unterschlüssel von HKEY_USERS ausgibt. Der geladenen wird nicht aufgeführt!
    Wenn ich jedoch manuell über regedit.exe die Struktur lade, kann ich auf den Schlüssel, wie auf jeden anderen zugreifen.
    Was mache ich falsch?
    Zunächst solltest du die Attribut-Deklaration verwenden:

    VB.NET-Quellcode

    1. <DllImport("advapi32.dll", CharSet:=Unicode)>
    2. Public Shared Function RegLoadKey(ByVal hKey As Integer, ByVal lpSubKey As String, ByVal lpFile As String) As Integer
    3. End Function

    Vergleiche dann die Werte von RegistryHive.Users und der Konstante HKEY_USERS aus der passenden Header-Datei - sie müssen übereinstimmen.
    Schau dir auch den Rückgabewert an. Ist er ERROR_SUCCESS (Wert nachschauen)?
    Deklariere ggf. die Funktion FormatMessage(), der du den Rückgabewert übergeben kannst, um eine Fehlerbeschreibung abzurufen.
    Probiere alternativ die Funktion RegLoadAppKey() aus - sie benötigt keine gesonderten Rechte (laut MSDN).
    Gruß
    hal2000

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „hal2000“ () aus folgendem Grund: Headfer --> Header