PDA

Ver la versión completa : Detectar dispositivos USB



hystd
06-02-2008, 02:20
Buenas! como comenté en respuesta a otro hilo en el foro de intrusión, me surgió la idea de cómo hacer una aplicación de este tipo.

Bien comentar que no he investigado sobre el tema, pero básicamente se puede realizar utilizando los notificadores de eventos de Windows. Pero dado que aun no he tenido tiempo, os dejo un método muy sencillo y eficaz, además de no consumir muchos recursos.

El método sirve para detectar un dispositivo de almacenamiento (pen drive) en un sistema, claro que ésto es extensible a cualquier dispositivo USB.

1er paso: Detectar unidades activas
2º paso: Guardarlas en una array
3er paso: Cada intervalo de tiempo, comprobar si las unidades activas en el instante actual han cambiado (se han añadido o quitado unidades extraibles)

Esto se puede llevar a cabo mediante la API: GetDriveType(Raiz: PChar), que devuelve uno de los siguientes valores:

DRIVE_UNKNOWN = 0;
DRIVE_NO_ROOT_DIR = 1;
DRIVE_REMOVABLE = 2; // este es el nuestro, para los dispositivos de almacenamiento
DRIVE_FIXED = 3;
DRIVE_REMOTE = 4;
DRIVE_CDROM = 5;
DRIVE_RAMDISK = 6;

Entonces, el algoritmo sería algo así como:

for LetraUnidad:='A' to 'Z' do
if GetDriveType(PChar(LetraUnidad+':\'))=DRIVE_REMOVA BLE then
ShowMessage('Hola desde '+LetraUnidad+':\');
end;
end;

El algoritmo está implementado en delphi. La idea se entiende.

Evidentemente, habria que realizar esta tarea al principio de la ejecución del programa, guardarla en un array, y cada intervalo de tiempo volver a capturar dichas unidades, si el número de unidades detectadas es menor que el que tenemos en el array, entonces actualizamos el array.

Para que en vez de mostrar un mensajito de saludo, se realice una acción simplemente habrá que programar dicha acción dentro de nuestra aplicación.

Dadme 30 minutos y os subo un programa de ejemplo ;)

Un saludo

hystd
06-02-2008, 03:53
Bueno... aquí está un pequeño programita, para que veais un ejemplo.

http://www.terra.es/personal7/crazypaddr/PDFetch.rar

Es simple, lanzais el programa, pulsad el botón para activar el monitor y ya está... cuando insertes un pen drive en el sistema, saltará la opción que hayais elegido. Sólo he puesto esas 3 para mostrar un ejemplo de opciones distintas. Esto se puede ampliar a muchos mas conceptos (cerrar aplicaciones, abrir la bandeja del cd, apagar el sistema, desactivar el audio, etc...)

Es lo que me ha dado tiempo de hacer en un rato, y paso de seguir porque es tarde y me voy a dormir...

Un saludo y buenas noches

Satanheoba
06-02-2008, 13:12
hola, yo estoy buscando ya hace rato sin conseguir un codigo simple de como manejar el puerto USB pero programando desde Visual Basic 6.0 ... me sirviria de mucho si tienes algo para este lenguaje...

Saludos.-

gondar_f
06-02-2008, 15:57
El API lo puedes llamar también desde Visual Basic, no depende del lenguaje, del lenguaje solo depende como llamarla.

Un Saludo

hystd
08-02-2008, 21:02
Buenas!


hola, yo estoy buscando ya hace rato sin conseguir un codigo simple de como manejar el puerto USB pero programando desde Visual Basic 6.0 ... me sirviria de mucho si tienes algo para este lenguaje...

Bueno lo primero que debes preguntarte es sobre qué dispositivo USB vas a trabajar, ya que no es lo mismo tratar por ejemplo un Pen Drive que una Web cam, un teclado o una impresora...

Existen dos tipos de dispositivos USB: Dispositivos de Interfaz Humano (HID) y Dispositivos de almacenamiento masivo, asi que dependiendo de lo que quieras hacer, se tratará de una manera o de otra, se creará un driver específico para el dispositivo en el puerto usb o se tratará directamente con la API de Windows.

He supuesto que estamos hablando de hacerlo bajo Windows y una versión posterior al 95/98, ya que aunque ésto también vale para SO anteriores a éstos, en ellos sería posible acceder mediantes instrucciones "in" y "out" al mapa de E/S independiente, típico de arquitecturas x86, sin ningún tipo de problemas de "Instruccion privilegiada".

Un saludo

txiki00
09-04-2008, 01:29
hola,
me interesa bastante puesto que estoy intentando realizar un tema con detección de dispositivos usb.
Una pregunta, si antes de iniciar el pc conectas el pen usb, se detectaría o como ya estaba conectado y al iniciarse el sistema ya está instalada no la detectaría??puesto que antes has comentado que chekea las unidades para ver si aumenta y/o disminulle, pero si ya estaba??muchísimas gracias

sl2

j8k6f4v9j
10-04-2008, 02:02
Chequea el sistema para ver lo que hay, y luego lo compara con lo que tienes para ver si aumenta o disminuye para saber si tienes que actualizar lo que ya tienes

Esto se puede llevar a cabo mediante la API: GetDriveType(Raiz: PChar), que devuelve uno de los siguientes valores:

DRIVE_UNKNOWN = 0;
DRIVE_NO_ROOT_DIR = 1;
DRIVE_REMOVABLE = 2; // este es el nuestro, para los dispositivos de almacenamiento
DRIVE_FIXED = 3;
DRIVE_REMOTE = 4;
DRIVE_CDROM = 5;
DRIVE_RAMDISK = 6;

Salu2



http://img359.imageshack.us/img359/6631/celliigy4.pngKeep on Rollin' :mad: