Forum: PC-Programmierung USB-Sticks sperren - gpedit.msc <-> C#


von M92 (Gast)


Lesenswert?

Hallo,

ich möchte USB-Sticks am PC sperren. Das soll programmgesteuert 
an-/abgeschaltet werden können.

Unter Windows gibt es ja die gpedit.msc mit der man Lokale 
Sicherheitsrichtlinien ändern kann. Dort gibt es die Option 
Computerkonfiguration->Administrative 
Vorlagen->System->Wechselmedienzugriff->Alle Wechselmedianklassen: 
Jeglichen Zugriff verweigern.
Die Option kann genau dass was ich will und wir auch sofort angewendet. 
Nur wie kann ich die in meinem C#-Programm modifizieren?

Wenn man etwas weiter forscht, dann findet man die entsprechenen 
Registry-Keys für die Optionen in der 
"C:\Windows\PolicyDefinitions\RemovableStorage.admx"-Datei. Allerdings - 
wenn ich die entsprechenden Keys anlege/modifiziere, dann funktioniert 
das erst nach Rechnerneustart. Wie bekomme ich Windows dazu, dass diese 
wie in der gpedit.msc direkt angewendet werden?

Viele Grüße
Michael

von Peter II (Gast)


Lesenswert?

M92 schrieb:
> Wie bekomme ich Windows dazu, dass diese
> wie in der gpedit.msc direkt angewendet werden?

nach der Änderung muss man ein Event verschicken, damit die Prozesse die 
Änderung mitbekommen. Wüsste jetzt aber nicht wie das Event heißt, 
einfach mal googlen.

von Peter II (Gast)


Lesenswert?

Nachtrag:

könnte aber auch sein, das es überhaupt nicht geht, weil das nur einmal 
bei starten angelesen wird.

von Sven L. (sven_rvbg)


Lesenswert?

eventuell ein gpupdate /force ausführen...

von M92 (Gast)


Lesenswert?

Danke für die Antwort.


Habe vorhin nochmals das halbe Internet durchforstet und habe es nun 
hinbekommen.

Für die, die es nachbauen möchten:
Es gibt Librarys, welche die GPOs bearbeiten können, z.B.: siehe 
Quelltext-Kommentar
Dann wird nur noch eine Funktion benötigt:
1
        //http://tech.labs.oliverwyman.com/blog/2013/03/25/programmatically-updating-local-policy-in-windows/
2
        //https://bitbucket.org/MartinEden/local-policy/overview
3
        private static void usb_en_diable(bool enable)
4
        {
5
            ComputerGroupPolicyObject gpo = new ComputerGroupPolicyObject();
6
7
            //  C:\Windows\PolicyDefinitions\RemovableStorage.admx
8
            const string keyPath = @"Software\Policies\Microsoft\Windows\RemovableStorageDevices";
9
10
            using (var machine = gpo.GetRootRegistryKey(GroupPolicySection.Machine))
11
            {
12
                if (enable)
13
                {
14
                    machine.DeleteSubKey(keyPath);
15
                } else { 
16
                    using (var terminalServicesKey = machine.CreateSubKey(keyPath))
17
                    {
18
                        terminalServicesKey.SetValue("Deny_All", 00000001, RegistryValueKind.DWord);
19
                    }
20
                }
21
            }
22
            gpo.Save();
23
        }
Das ganze funktioniert logischerweise nur mit Admin-Rechten.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.