2008-11-07 55 views
13

¿Hay alguna manera de averiguar cuándo en una LAN alguien conecta un pendrive al puerto USB? Programaticamente (en C# preferiblemente) oa 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.¿Cómo detectar usando C# si un pendrive está enchufado a un puerto USB?

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

EDITAR

No quiero desactivar el puerto USB en su totalidad. 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.

Respuesta

13

[Asumiendo 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. Observe el 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 sabes una unidad ha llegado, use System.IO.FileSystemWatcher

actualización he encontrado una mejor solución - si se registra para recibir notificaciones de interfaz de volumen, que obtendrá la ruta de volumen para el nuevo manejar. Primero, cree un DEV_BROADCAST_DEVICEINTERFACE con dbcc_classguid=GUID_DEVINTERFACE_VOLUME. Luego, pase esto al RegisterDeviceNotification(). Nuevamente obtendrá un WM_DEVICECHANGE, pero ahora puede convertir el lParam del mensaje al DEV_BROADCAST_DEVICEINTERFACE*.

Puede pasar el dbcc_name que recibe al 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.

+0

Bah, error del analizador de URL. WM_DEVICECHANGE docs @ http://msdn.microsoft.com/en-us/library/aa363480(VS.85).aspx – MSalters

0

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

+0

No del todo. está en una necesidad de tener 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. – user20358

1

Si se trata de un entorno pequeño y desea evitar que se usen 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 todos los dispositivos usb. utilizar.

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

3

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

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

Esta utilidad gratuita son de gran ayuda cuando pooking en torno a: http://www.nirsoft.net/utils/usb_devices_view.html

Puedes seleccionar una unidad USB, optar por abrir la clave de registro de esa unidad y activar/desactivar el dispositivo y mucho más.

En el registro se puede ver si el dispositivo está conectado, si es de tipo de 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 los eventos del registro: http://msdn.microsoft.com/en-us/library/aa393035(VS.85).aspx

Salida System.Management en .Net

Cuestiones relacionadas