USB-Sticks sperren - gpedit.msc <-> C#

Gast #4978062
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
Gast
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.
Gast
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.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 9 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.