Hallo, ich suche mich schon eine Ewigkeit, ein Laufwerk komplett dem User zu verbergen!
Sinn ist es, ein „Backuplaufwerk“ in Form eines USB-Stick einzubauen, an den der User nicht heran kommen kann,
aber das Programm, welches Backups erzeugen wird, soll auf ihn zugreifen können.
Um den User nicht zu verwirren darf dieser Stick aber nicht als Laufwerk im z.B. Explorer angezeigt werden.
Hat da einer eine Idee?
Hallo KoF,
Laufwerke im Explorer verstecken
Wenn Du mehrere Festplatten hast, und Du willst bei der Anwendung von Benutzerprofilen einige davon für andere Benutzer verstecken, hält Windows dazu ein passendens Mittel bereit. Öffne die Registry und dann den Schlüssel
"HKEY_USERS.Default\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer" oder "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer" für einen bestimmten Benutzer (hier mußt Du Dich aber korrekt als der betreffende User einloggen, d.h. Du mußt sein Paßwort kennen). Hier erstellst Du mit "Bearbeiten/Neu" einen "DWORD-Wert" namens "NoDrives" und gibst einen der folgenden Werte ein (je nachdem welches Laufwerk Du verstecken willst):
Laufwerk(e) Wert
A: 00000001
B: 00000002
C: 00000004
D: 00000008
A: und B: 00000003
A: und C: 00000005
A: und D: 00000009
B: und C: 00000006
B: und D: 0000000A
C: und D: 0000000C
Vorsicht: Die Laufwerke sind nur versteckt, aber nicht gesperrt! Man kann weiterhin unter DOS auf die Lauwerke zugreifen, auch in einigen anderen Programmen/Dateimanagern bleiben die Laufwerke sichtbar.
mfg
Und ohne Benutzerrechte ist da nichts zu machen?
Ich wollte das ganze eigentlich umgeben und eine Art Treiber schreiben...
Andere Frage...
Wie kann ich ein USB-Stick per c# auswerfen?
Ich will da nicht, dass ein Stick eines falschen Rechners ein Backup wieder einspielen kann.
Die Sticks haben eine Signatur, und wenn diese nicht mit dem rechner übereinstimmt, dann ist der Stick von einem falschen Rechner.
Dafür muss ich aber auch wohl mitkriegen, wann ein Stick angesteckt wird.
Oh man, Fragen über Fragen 😦
Event zu Mount und Unmount von Laufwerken?
Hardware sicher entfernen
Du könntest bei der Installation des Backup-Programms einen neuen Nutzer erstellen, der sich nicht lokal anmelden darf.
Dann startest du einen Service unter diesem Benutzer, der nur auf angesteckte Hardware wartet und diese darauf testet, ob sie eines deiner Backup-Medien sind.
Sollte das der Fall sein, entzieht der Service dem Gerät den Laufwerksbuchstaben und bindet es unter einem NTFS-Ordner ein, dessen Rechte so gesetzt werden, dass nur der Service-eigene Benutzer darauf zugreifen darf.
Die eigentliche Backupsoftware kann dann über eine der vielen Schnittstellen mit dem Service kommunizieren und so auf die Daten zugreifen.
Wenn der Nutzer allerdings Admin-Rechte hat oder den Stick an einen anderen Rechner steckt, war die ganze Mühe umsonst.
Du solltest also zusätzlich darüber nachdenken, Daten zu verschlüsseln und zu signieren.
Heul... es ist zum verzweifeln!!!
Jetzt bin ich dem Beispiel aus dem CodeProjekt (übrigens das einzige im ganzen web) gefolgt und... es funktioniert nicht richtig 😦
Wenn ich 2 Sticks Am Rechner habe und explizit einen auswerfen will, wirf er mir immer den ersten, den er findet aus 😦
VolumeDeviceClass volumeDeviceClass = new VolumeDeviceClass();
foreach (Volume device in volumeDeviceClass.Devices)
{
Console.WriteLine(device.LogicalDrive);
if (device.IsUsb )
{
if(!Equals(device.LogicalDrive,"B:"))
{
Thread.Sleep(3000);
device.Eject(false);
}
}
}
So mache ich es und SO geht es nicht!
Im System gibt es 2 Sticks (B & H) es sollen alle AUßER B ausgeworfen werden. Aber so wird B ausgeworfen und H bleibt drinne 😦
Kann mir da einer weiterhelfen?
Was macht das denn:
if(!Equals(device.LogicalDrive,"B:"))
Woher kommt das Equals?
Wieso nicht einfach
if (device.LogicalDrive.ToLower() != "b:")
also wenn ich das richtig verstehe dann wirft er den device an dieser stelle nicht aus?
Doch tut er.
Aber:
es sollen alle AUßER B ausgeworfen werden. Aber so wird B ausgeworfen und H bleibt drinne 😦
Was mich zu der Vermutung brachte, dass eher die Bedingung falsch formuliert bzw. Equals falsch implementiert ist.
ich hab mir das projekt nochmal angesehn...
unter den kommentaren zu dem projekt ist das schon mal jemandem aufgefallen.
aber eine lösung gibt es scheinbar nicht... so ein mist!
Wie jetzt? Was soll das heißen: eine Lösung gibt es nicht? Schreib die Bedingung ordentlich und gut ist.