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.
Bloqueador de USB
#1
Escrito 18 febrero 2021 - 10:40
#2
Escrito 21 febrero 2021 - 08:17
Existe una forma de bloquear las entradas USB desde el registro:
HKEY_LOCAL_MACHINE\\SYSTEM\\CurrentControlSet\\Services\\USBSTOR Start = 3 --> Habilita 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
procedure TForm1.WMDEVICECHANGE(var Msg: TMessage); var Letra: Char; begin if Msg.WParam = DBT_DEVICEARRIVAL then // Se conecta una unidad, pasos a seguir if Msg.WParam = DBT_DEVICEREMOVAL) then // se desconecta una unidad inherited; 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.