Как определить, используя c #, если Pendrive подключен к USB-порту? - PullRequest
13 голосов
/ 07 ноября 2008

Есть ли способ узнать, когда в локальной сети кто-нибудь подключает Pendrive к USB-порту? Программно (предпочтительно на C #) или с помощью какого-либо инструмента. По сути, я представляю, что клиентское приложение находится на каждом терминале и контролирует порты USB и отправляет информацию на сервер.

a.) Могу ли я получить информацию о копируемых файлах? б.) Есть ли способ сделать это без клиентского приложения?

EDIT

Я не хочу полностью отключать USB-порт. это должно быть на основе. По сути, просто нужно, чтобы пользователи в локальной сети обменивались данными ответственно и знали, что любые передаваемые данные отслеживаются и регистрируются, и могут быть опрошены позже.

Ответы [ 6 ]

13 голосов
/ 07 ноября 2008

[Предполагая 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(). У вас будет одно соответствующее имя тома; это новый диск.

3 голосов
/ 07 ноября 2008

Также проверьте реестр, где хранится вся информация об USB-устройствах. HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ Enum \ USB

Вы можете подключиться к изменениям этого ключа в реестре и действовать в соответствии с этим.

Эта бесплатная утилита очень полезна, когда вы играете: http://www.nirsoft.net/utils/usb_devices_view.html

Вы можете выбрать usb-диск, открыть раздел реестра для этого диска, включить / отключить устройство и многое другое.

В реестре вы можете видеть, подключено ли устройство, имеет ли оно тип массовой памяти и другую интересную информацию. Его легко отфильтровать, чтобы получить диски usb-massstorage, а затем подключиться и ждать изменений (подключить / отключить).

С инструментарием управления Windows вы можете зарегистрироваться для получения событий реестра: http://msdn.microsoft.com/en-us/library/aa393035(VS.85).aspx

Проверьте System.Management в .Net

1 голос
/ 07 ноября 2008

Я никогда не использовал его, но у людей с кодом # # (sharpdevelop) есть usblib. Может быть, это поможет вам.

http://www.icsharpcode.net/OpenSource/SharpUSBLib/default.aspx

1 голос
/ 07 ноября 2008

Посмотрите на эту статью. Объясняет сообщения и как с ними работать. Обнаружение извлечения USB-накопителя

1 голос
/ 07 ноября 2008

Если это небольшая среда, и вы хотите запретить использование любых usb-устройств, вы можете отключить usb-порты в диспетчере устройств, убедитесь, что ни один пользователь не назначен администратором на компьютерах, и это должно предотвратить использование usb. .

И если вы действительно параноики, просто откройте машины и отключите порты.

0 голосов
/ 07 ноября 2008

Вы пытаетесь запретить использование флэш-накопителей USB? В этом случае существует групповая политика, которая позволяет вам ограничивать доступ.

...