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?
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.
Die Benutzer-Einträge stehen unter HKEY_USERS.
--
If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch --
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.
Hi.
Benutze die API-Funktion RegLoadKey(): msdn.microsoft.com/en-us/libra…s724889%28v=vs.85%29.aspx. Sie sieht vielversprechend aus - die Frage ist nur, ob die Systemdatei, die du laden willst, den Voraussetzungen entspricht (siehe Link).
Gruß
hal2000
Danke für die Antwort!!!!
Jedoch funktioniert das bei mir bis jetzt nicht so wirklich. Ich bekomme keine Fehlermeldung b.z.w. Ausnahme geworfen.
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
Dim rv = RegistryHive.Users
Dim rd AsString= My.Computer.Registry.LocalMachine.OpenSubKey("SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList\" & sid).GetValue("ProfileImagePath") & "\NTUSER.DAT"
Dim rl = RegLoadKey(rv, sid, rd)
Dim runkey As RegistryKey = My.Computer.Registry.Users.OpenSubKey(sid & "\Software\Microsoft\Windows\CurrentVersion\Run")
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:
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
Danke für die Antworten!
Wie kann ich denn feststellen, ob der Wert ERROR_SUCCESS ist? Der Wert ist bei mir immer "Users {-2147483645}Microsoft.Win32.RegistryHive"
Der Rückgabewert von RegLoadKey() muss ERROR_SUCCESS sein, sonst ist irgendwas schiefgegangen. Laut MSDN gilt:
ERROR_SUCCESS = 0 (0x0), The operation completed successfully.