Как обнаружить с помощью С#, если pendrive подключен к USB-порту?
Есть ли способ узнать, когда в локальной сети кто-нибудь подключается к порту USB?
Программно (предпочтительно в С#) или через какой-либо инструмент. В принципе, я бы предположил, что клиентское приложение сидит на каждом терминале и контролирует порты USB и отправляет информацию на сервер.
a.) Могу ли я получить информацию о копировании файла (ов)?
б) Есть ли способ сделать это без клиентского приложения?
ИЗМЕНИТЬ
Я не хочу полностью отключать порт USB. его необходимо иметь основу. В основном просто хотят, чтобы пользователи в локальной сети сообщали данные ответственно и знали, что любые передаваемые данные отслеживаются и регистрируются и могут быть допрошены позже.
Ответы
Ответ 1
[Предполагая Windows, учитывая замечание С#. Пожалуйста, отметьте соответствующим образом]
Да, это возможно. И можно получить информацию о файле. Это потребует программирования. Следите за 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()
. У вас будет одно совпадающее имя тома; это новый диск.
Ответ 2
Также проверьте реестр, где хранится вся информация о USB-устройствах.
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\USB
Вы можете подключиться к изменениям этого ключа в реестре и действовать по этому поводу.
Эта бесплатная утилита является большой помощью при запуске: http://www.nirsoft.net/utils/usb_devices_view.html
Вы можете выбрать USB-накопитель, выбрать, чтобы открыть раздел реестра для этого диска и включить/отключить устройство и многое другое.
В реестре вы можете увидеть, подключено ли устройство, если оно имеет тип massstorage и другую интересную информацию. Его легко фильтровать regkeys, чтобы просто получить usb-massstorage диски, а затем подключиться и ждать изменений (connect/disconnect).
С помощью инструментария управления Windows вы можете зарегистрироваться, чтобы получать события реестра:
http://msdn.microsoft.com/en-us/library/aa393035(VS.85).aspx
Проверьте System.Management в .Net
Ответ 3
Если это небольшая среда и вы хотите запретить использование каких-либо устройств USB, вы можете отключить порты USB в диспетчере устройств, убедитесь, что ни один пользователь не настроен как администраторы на машинах, и это должно предотвратить использование usb.
И если вы действительно параноики об этом, просто откройте машины и подключите порты.
Ответ 4
Взгляните на эту статью. Объясняет сообщения и как работать с ними.
Обнаружение удаления USB-диска
Ответ 5
Я никогда не использовал его, но у людей с кодом iС# (sharpdevelop) есть usblib. Может быть, это может помочь вам.
http://www.icsharpcode.net/OpenSource/SharpUSBLib/default.aspx
Ответ 6
Вы пытаетесь предотвратить использование флэш-накопителей USB? Если это так, существует групповая политика, которая позволяет вам ограничить доступ.