Wie unter Verwendung von c # zu erkennen, ob ein USB-Stick in einen USB-Port angeschlossen ist?
-
07-07-2019 - |
Frage
Gibt es eine Möglichkeit, um herauszufinden, wenn in einem LAN jemand in einem USB-Stick an den USB-Anschluss eingesteckt? Programatically (in C # bevorzugt) oder durch irgendein Werkzeug. Grundsätzlich würde ich mir vorstellen, eine Client-Anwendung auf jedem Terminal sitzt und überwacht die USB-Ports und sendet die Informationen an den Server.
a.) Kann ich die Details der Datei erhalten (n) kopiert? b.) Gibt es eine Möglichkeit, dies ohne eine Client-Anwendung zu tun?
EDIT
Ich mag nicht ganz den USB-Port deaktivieren. seine auf einer Notwendigkeit, Grundlage zu haben. Grundsätzlich möchte nur die Benutzer im LAN Daten verantwortungsvoll zu teilen und wissen, dass alle Daten, tranfered wird überwacht und protokolliert und können später in Frage gestellt werden.
Lösung
[Unter der Annahme von Windows, da die C # Bemerkung. Bitte markieren Sie entsprechend]
Ja, das ist möglich. Und es ist möglich, die Details der Datei zu erhalten. Es wird die Programmierung erfordern, though. Achten Sie auf WM_DEVICECHANGE und neu auflisten Laufwerke danach. Es wird Sie USB pendrives, aber auch SD-Karten. Ich gehe davon aus, dass ein Bonus für Sie.
Für weitere Details zu erhalten, wenn Sie ein Laufwerk wissen angekommen ist, verwenden Sie System.IO.FileSystemWatcher
Aktualisieren
Ich fand eine bessere Lösung - wenn Sie für die Lautstärke-Schnittstelle Benachrichtigungen anmelden, werden Sie die Lautstärke Weg für das neue Laufwerk bekommen.
Erstellen Sie zunächst ein DEV_BROADCAST_DEVICEINTERFACE
mit dbcc_classguid=GUID_DEVINTERFACE_VOLUME
. passieren diese dann zu RegisterDeviceNotification()
. Sie werden wieder eine WM_DEVICECHANGE erhalten, aber Sie können nun die lParam aus der Nachricht zu gieße DEV_BROADCAST_DEVICEINTERFACE*
.
Sie können die dbcc_name
passieren Sie erhalten GetVolumeNameForVolumeMountPoint()
. Sie können auch alle Laufwerksbuchstaben von GetLogicalDriveStrings()
zu GetVolumeNameForVolumeMountPoint()
passieren. Sie werden einen passenden Volume-Namen haben; das ist das neue Laufwerk.
Andere Tipps
Auch die Registrierung überprüfen, wo alle Informationen über die USB-Geräte gespeichert sind. HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ Enum \ USB
Sie können in der Registrierung und danach handeln, dass in Änderungen dieses Schlüsselhaken.
Dieses kostenlose Dienstprogramm sind eine große Hilfe, wenn pooking um: http: //www.nirsoft. net / utils / usb_devices_view.html
Sie können ein USB-Laufwerk wählen, wählen Sie für das Laufwerk den Registrierungsschlüssel zu öffnen und aktivieren / deaktivieren Sie das Gerät und vieles mehr.
In der Registrierung können Sie sehen, ob das Gerät angeschlossen ist, wenn es von Massenspeichertyp und anderen interresting Informationen. Es ist einfach, die RegKeys zu filtern, dass nur USB-Massenspeicherlaufwerke zu erhalten und dann in und für Änderungen (Verbinden / Trennen).
warten HakenMit Windows Management Instrumentation können Sie sich registrieren Registrierungs-Events zu erhalten: http://msdn.microsoft.com/en-us /library/aa393035(VS.85).aspx
Überprüfen Sie heraus System.Management in .Net
Wenn ihr eine kleine Umgebung und Sie alle USB-Geräte verhindern, verwendet wird, dann können Sie die USB-Anschlüsse in Gerätemanager deaktivieren, stellen Sie sicher, dass keine Benutzer als Administratoren auf den Maschinen einzurichten und das sollte alle usb-Nutzung verhindern .
Und wenn Sie wirklich paranoid sind darüber, nur die Maschinen öffnen und die Ports Stecker.
Haben Sie einen Blick auf diesen Artikel. Erklärt die Meldungen und wie mit ihnen zu arbeiten. Erkennung von USB-Laufwerk Entfernen
Ich habe es nie benutzt, aber die Leute bei ic # -Code (SharpDevelop) einen usblib. Vielleicht kann es Ihnen helfen.
http://www.icsharpcode.net/OpenSource/SharpUSBLib/default.aspx
Versuchen Sie, die Verwendung von USB-Sticks zu verhindern? Wenn ja gibt es eine Gruppenrichtlinie, die Sie den Zugriff einschränken können.