Как определить с помощью С#, подключен ли флешка к USB-порту?
-
07-07-2019 - |
Вопрос
Есть ли способ узнать, когда в локальной сети кто-нибудь подключает флешку к порту USB?Программно (предпочтительно на C#) или с помощью какого-либо инструмента.По сути, я предполагаю, что клиентское приложение сидит на каждом терминале, контролирует порты USB и отправляет информацию на сервер.
а.) Могу ли я получить подробную информацию о копируемых файлах?б.) Есть ли способ сделать это без клиентского приложения?
РЕДАКТИРОВАТЬ
Я не хочу полностью отключать порт USB.это должно быть основано на необходимости иметь основу.По сути, просто хочу, чтобы пользователи локальной сети ответственно делились данными и знали, что любые передаваемые данные отслеживаются, регистрируются и могут быть подвергнуты сомнению позже.
Решение
[Предполагая, что Windows, учитывая замечание C#.Пожалуйста, отметьте соответствующим образом]
Да, это возможно.И можно получить подробную информацию о файле.Однако это потребует программирования.Следить за WM_DEVICECHANGE и впоследствии перенумеровать диски.Он предоставит вам USB-накопители, а также SD-карты.Я ожидаю, что это будет для тебя бонусом.
Чтобы получить более подробную информацию, как только вы узнаете, что диск прибыл, используйте System.IO.FileSystemWatcher
ОбновлятьЯ нашел лучшее решение — если вы зарегистрируетесь для получения уведомлений интерфейса тома, вы получите путь к тому для нового диска.Сначала создайте DEV_BROADCAST_DEVICEINTERFACE
с dbcc_classguid=GUID_DEVINTERFACE_VOLUME
.Затем передайте это RegisterDeviceNotification()
.Вы снова получите WM_DEVICECHANGE, но теперь вы можете передать lParam из сообщения в DEV_BROADCAST_DEVICEINTERFACE*
.
Вы можете пройти dbcc_name
вы получаете GetVolumeNameForVolumeMountPoint()
.Вы также можете передать все буквы дисков из GetLogicalDriveStrings()
к GetVolumeNameForVolumeMountPoint()
.У вас будет одно подходящее имя тома;это новый диск.
Другие советы
Также проверьте реестр, где хранится вся информация о USB-устройствах.HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\USB
Вы можете подключиться к изменениям этого ключа в реестре и действовать в соответствии с этим.
Эта бесплатная утилита очень поможет при поиске: http://www.nirsoft.net/utils/usb_devices_view.html
Вы можете выбрать USB-накопитель, открыть ключ реестра для этого диска, включить/отключить устройство и многое другое.
В реестре вы можете увидеть, подключено ли устройство, имеет ли оно тип Massstorage и другую интересную информацию.Легко отфильтровать ключи реестра, чтобы просто получить USB-накопители, а затем подключиться и дождаться изменений (подключиться/отключиться).
С помощью инструментария управления Windows вы можете зарегистрироваться для получения событий реестра:http://msdn.microsoft.com/en-us/library/aa393035(VS.85).aspx
Проверьте System.Management в .Net
Если это небольшая среда и вы хотите запретить использование каких-либо USB-устройств, вы можете отключить USB-порты в диспетчере устройств, убедиться, что ни один пользователь не настроен в качестве администраторов на машинах, и это должно предотвратить любое использование USB.
А если вы действительно параноики по этому поводу, просто откройте машины и заткните порты.
Взгляните на эту статью.Объясняет сообщения и как с ними работать.Обнаружение удаления USB-накопителя
Я никогда им не пользовался, но у ребят из ic#code (sharpdevelop) есть usblib.Возможно, это поможет вам.
http://www.icsharpcode.net/OpenSource/SharpUSBLib/default.aspx
Вы пытаетесь запретить использование флэш-накопителей USB?Если да, то существует групповая политика, позволяющая ограничить доступ.