Laden...

Laufwerk sperren/verstecken

Erstellt von KoF vor 17 Jahren Letzter Beitrag vor 17 Jahren 3.807 Views
K
KoF Themenstarter:in
16 Beiträge seit 2007
vor 17 Jahren
Laufwerk sperren/verstecken

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?

2.223 Beiträge seit 2005
vor 17 Jahren

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

Gelöschter Account
vor 17 Jahren

du kannst im windows einstellen das der zugriff auf laufwerke vom benutzerkonto abhängt. und wenn dein programm darauf zugreifen will muss es unter anderen rechten laufen.

K
KoF Themenstarter:in
16 Beiträge seit 2007
vor 17 Jahren

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 😦

B
1.529 Beiträge seit 2006
vor 17 Jahren

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.

K
KoF Themenstarter:in
16 Beiträge seit 2007
vor 17 Jahren

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?

B
1.529 Beiträge seit 2006
vor 17 Jahren

Was macht das denn:

if(!Equals(device.LogicalDrive,"B:"))

Woher kommt das Equals?

Wieso nicht einfach

if (device.LogicalDrive.ToLower() != "b:")
Gelöschter Account
vor 17 Jahren
device.Eject(false);

also wenn ich das richtig verstehe dann wirft er den device an dieser stelle nicht aus?

B
1.529 Beiträge seit 2006
vor 17 Jahren

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.

K
KoF Themenstarter:in
16 Beiträge seit 2007
vor 17 Jahren

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!

B
1.529 Beiträge seit 2006
vor 17 Jahren

Wie jetzt? Was soll das heißen: eine Lösung gibt es nicht? Schreib die Bedingung ordentlich und gut ist.