Ir al contenido


Foto

Bloqueador de USB


  • Por favor identifícate para responder
1 respuesta en este tema

#1 Dante

Dante

    Advanced Member

  • Miembros
  • PipPipPip
  • 89 mensajes

Escrito 18 febrero 2021 - 10:40

Hola a todos, en mi empresa me han dado la tarea de bloquear los puertos usb de las pc, autorisando solo mediante una lista blanca los dispositivos permitidos , para esto me e tomado la tarea de crear un sistema cliente servidor pero no logro  definir el proceso del bloqueo del usb  mediante Delphi, si alguno a trabajado en algo como esto agradeceria su ayuda.


  • 0

#2 escafandra

escafandra

    Advanced Member

  • Moderadores
  • PipPipPip
  • 3.962 mensajes
  • LocationMadrid - España

Escrito 21 febrero 2021 - 08:17

Existe una forma de bloquear las entradas USB desde el registro:


delphi
  1. HKEY_LOCAL_MACHINE\\SYSTEM\\CurrentControlSet\\Services\\USBSTOR
  2. Start = 3 --> Habilita
  3. Start = 4 --> Bloquea

El problema de usar lo anterior es que no es una solución factible pues no discrimina lo conectado.
 

 

Centrando el tema, creo que lo que necesitas es un sistema que:
1.- No bloquee las entradas USB
2.- Detecte si una unidad de almacenamiento externo se conectó a un a entrada y lea su identificador.
3.- Se compare el identificador con una lista blanca.
4.- En caso de no encontrar el identificador y desmontar la unidad.
 

Veamos:
1.- El primer problema es detectar que se ha enchufado una unidad externa, tienes dos formas:
 
A.- Bien respondiendo al mensaje WM_DEVICECHANGE


delphi
  1. procedure TForm1.WMDEVICECHANGE(var Msg: TMessage);
  2. var
  3.   Letra: Char;
  4. begin
  5.   if Msg.WParam = DBT_DEVICEARRIVAL then
  6.     // Se conecta una unidad, pasos a seguir
  7.   if Msg.WParam = DBT_DEVICEREMOVAL) then
  8.     // se desconecta una unidad
  9.   inherited;
  10. end;

B.- Usando la la API SHChangeNotify. para registrarte como receptor de las notificaciones del shell como explico aquí: Monitorizando el Shell sólo con la API

que es menos engorrosa que WM_DEVICECHANGE si queremos un control exhaustivo.

 

2.- El siguiente paso es decidir cual será el identificador único de cada unidad, eso se puede resolver encontrando su número de serie.

 

3.- Como comparar con tu lista blanca y como confeccionarla, lo dejo a tu criterio.

 

4.- Finalmente se deberá resolver el tema para desmontar la unidad la unidad no admitida. Te recomiendo la lectura de este hilo Trabajando con FAT16 y FAT32 que aunque se centre en FAT 16 y 32, tiene muchas funciones e ideas aplicables a cualquier unidad. Ahí veras como desmontar cualquier unidad de disco. El código adjuntado en archivos está en C++ pero en el hilo se muestra mucho código en delphi en el que se incluye como desmontar cualquier unidad,

 

 

Creo que con esto tienes las bases para resolver tus duda sobre este tema y el código necesario para ello, lo siguiente es ver tus necesidades particulares para adaptarlo todo y escribir tu unidad.

 

 

Saludos.


  • 0