Как определить с помощью С#, подключен ли флешка к USB-порту?

StackOverflow https://stackoverflow.com/questions/271907

Вопрос

Есть ли способ узнать, когда в локальной сети кто-нибудь подключает флешку к порту 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?Если да, то существует групповая политика, позволяющая ограничить доступ.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top