Hi,
habe das nun mal implementiert und die Meldung lautet nun:
Failed to load the hive. Error code: 0. D
Irgendwelche Ideen?
Hi,
danke für die Rückmeldung. Mit dem Debugger werde ich mich tiefer auseinandersetzen. Einige andere Beispiele habe ich auch ausprobiert und hatte keinen Erfolg. Hatte darauf gehofft, dass hier bereits irgendjemand einen funktionierenden Code-Snipsel rumfliegen hat.
Guten Tag liebe Forenteilnehmer,
ich hoffe Ihr könnt mir helfen, da ich hier komplett auf dem Schlauch stehe!
Ich würde gerne mit C# eine zuvor gesichterte ntuser.dat - nach den installierten Druckern und später auch den Netzlaufwerken auslesen wollen.
Meine äußerst limitierten Fähigkeiten haben mich bislang das hier runterschreiben/runterkopieren lassen:
using System;
using System.IO;
using System.Windows.Forms;
using Microsoft.Win32;
namespace Registry_Auslesentest
{
public partial class Form1 : Form
{
private const string TempHiveName = "TempHive";
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
}
private void exportButton_Click(object sender, EventArgs e)
{
using (OpenFileDialog openFileDialog = new OpenFileDialog())
{
openFileDialog.Filter = "NTUSER.DAT files|NTUSER.DAT";
openFileDialog.Title = "Select the NTUSER.DAT file";
if (openFileDialog.ShowDialog() == DialogResult.OK)
{
string ntUserDatPath = openFileDialog.FileName;
try
{
// Load the hive
if (RegLoadKey(RegistryHive.Users, TempHiveName, ntUserDatPath) != 0)
{
textBox1.Text = "Failed to load the hive.";
return;
}
// Read a value from the loaded hive
using (RegistryKey key = Registry.Users.OpenSubKey(TempHiveName))
{
if (key != null)
{
string valueName = "SomeRegistryKey";
object value = key.GetValue(valueName);
if (value != null)
{
textBox1.Text = value.ToString();
}
else
{
textBox1.Text = $"Key '{valueName}' not found.";
}
}
else
{
textBox1.Text = "Failed to open the hive.";
}
}
// Unload the hive
if (RegUnLoadKey(RegistryHive.Users, TempHiveName) != 0)
{
textBox1.Text = "Failed to unload the hive.";
}
}
catch (Exception ex)
{
textBox1.Text = $"Error: {ex.Message}";
}
}
}
}
// PInvoke to load and unload registry hives
[System.Runtime.InteropServices.DllImport("advapi32.dll", SetLastError = true)]
public static extern int RegLoadKey(RegistryHive hKey, string lpSubKey, string lpFile);
[System.Runtime.InteropServices.DllImport("advapi32.dll", SetLastError = true)]
public static extern int RegUnLoadKey(RegistryHive hKey, string lpSubKey);
}
}
Hier bekomme ich immer "Failed to load the hive."
Natürlich habe ich auf die ntuser.dat Zugriff und es ist auch meine eigene, daher sollte es vermutlich keine Rechtethema sein.
Wenn mir jemand hier behilflich sein könnte, wäre ich sehr dankbar!
LG
Sascha
Hallo,
danke erstmal für Eure Hilfe, meine Vermutung ging auch in Richtung von irgendeiner Inkompatibilität. Mir fehlt allerdings aktuell die nötige Zeit mich mit diesem Thema weiter zu beschäftigen, weil ein anderes dringenderes Projekt dazwischengerutscht ist. Ich komme daher später auf diesen Projekt zurück.
Danke erstmal!
Guten Tag liebe Forenmitglieder,
ich bin absoluter Noob in C# und muss daher auch eine evtl. einfache Anfängerfrage stellen:
Ich versuche eine Windows-Forms-App über Visual Studio 2019 zu erstellen, die später eine simple GUI für Robocopy mit Prozentanzeige abbilden und außerdem einen Start/Pause-Button beinhalten soll. Ich habe mir das so gedacht, dass ich zunächst die Quellverzeichnisgröße (normalerweise ein Benutzerverzeichnis, welches auch teilweise sehr groß ist > 40GB) abfrage, von Robocopy über Powershell den Fortschritt abfrage und die Bytes quasi abziehe. Damit die Form nutzbar bleibt wollte ich Powershell->Robocopy über Runspaces aufrufen. Mir gelingt es aber nicht, eine Pipeline zu erstellen, da mir offensichlich immer die richtige (Version???) für die using-directive fehlt.
Der nachfolgende Code im Dateianhang beinhaltet erstmal nur einen Codesnipsel, zeigt aber schon woran ich scheitere und ich würde mich sehr freuen, wenn mir hier jemand behilflich sein kann.
Vielen Dank!