c# windows usb monitoring usb-flash-drive

¿Cómo detectar usando c#si un pendrive está conectado a un puerto USB?



windows monitoring (6)

¿Estás tratando de evitar el uso de memorias USB? De ser así, existe una política de grupo que le permite restringir el acceso.

¿Hay alguna manera de averiguar cuándo en una LAN alguien conecta un pendrive al puerto USB? Programaticalmente (en C # preferiblemente) o a través de alguna herramienta. Básicamente, me imagino que una aplicación cliente se ubica en cada terminal y monitorea los puertos USB y envía la información al servidor.

a.) ¿Puedo obtener los detalles de los archivos que se copian? b.) ¿Hay alguna manera de hacer esto sin una aplicación cliente?

EDITAR

No quiero deshabilitar el puerto USB por completo. es estar en la necesidad de tener una base. Básicamente, solo queremos que los usuarios de la LAN compartan datos de manera responsable y sepan que los datos que se transfieren se supervisan y registran y pueden ser cuestionados más adelante.




Si se trata de un entorno pequeño y desea evitar el uso de dispositivos usb, puede deshabilitar los puertos usb en el administrador de dispositivos, asegúrese de que no haya usuarios configurados como administradores en las máquinas y eso debe evitar el uso de todos los usb.

Y si realmente está paranoico, solo abra las máquinas y desconecte los puertos.


También consulte el registro donde se almacena toda la información sobre los dispositivos usb. HKEY_LOCAL_MACHINE / SYSTEM / CurrentControlSet / Enum / USB

Puede conectar los cambios de esa clave en el registro y actuar en consecuencia.

Esta utilidad gratuita es de gran ayuda cuando se trata de: http://www.nirsoft.net/utils/usb_devices_view.html

Puede seleccionar una unidad usb, elegir abrir la clave de registro para esa unidad y habilitar / deshabilitar el dispositivo y mucho más.

En el registro, puede ver si el dispositivo está conectado, si es de tipo almacenamiento masivo y otra información interesante. Es fácil filtrar los regkeys para obtener unidades usb-massstorage y luego conectar y esperar cambios (conectar / desconectar).

Con Windows Management Instrumentation, puede registrarse para recibir eventos del Registro: http://msdn.microsoft.com/en-us/library/aa393035(VS.85).aspx

Consulte System.Management en .Net


[Suponiendo que Windows, dada la observación de C #. Por favor marque en consecuencia]

Sí, esto es posible Y es posible obtener los detalles del archivo. Sin embargo, requerirá programación. Esté atento a WM_DEVICECHANGE y vuelva a enumerar las unidades después. Le conseguirá pendrives USB, pero también tarjetas SD. Espero que sea una bonificación para ti.

Para obtener más detalles una vez que sabe que ha llegado una unidad, use System.IO.FileSystemWatcher

Actualización Encontré una solución mejor: si se registra para las notificaciones de interfaz de volumen, obtendrá la ruta de volumen para la nueva unidad. Primero, cree un DEV_BROADCAST_DEVICEINTERFACE con dbcc_classguid=GUID_DEVINTERFACE_VOLUME . Luego pasa esto a RegisterDeviceNotification() . Nuevamente obtendrá un WM_DEVICECHANGE pero ahora puede convertir el lParam del mensaje a DEV_BROADCAST_DEVICEINTERFACE* .

Puede pasar el dbcc_name que recibe a GetVolumeNameForVolumeMountPoint() . También puede pasar todas las letras de unidad de GetLogicalDriveStrings() a GetVolumeNameForVolumeMountPoint() . Tendrás un nombre de volumen coincidente; esta es la nueva unidad.