rakzozeram
Usuario (México)
Como muchos ya han de saber, un porcentaje mayor de los virus entran a tu computadora aparte de Internet, también por memoria infectadas y mas cuando tienes bastantes computadoras y el control a veces no es del todo total. hay un dicho que me gusta mucho, las memorias son como el sexo, es decir la memoria solo metela en una sola maquina, si la metes en mas de una, hay muchas probabilidades que se te infecte... Este proyecto se genero en delphi 7 y funciona también con embarcadero 2010; este proyecto solo afecta a las memorias USB, puedes conectar cualquier otro dispositivo como impresoras, scaner y no se vera afectado. al momento de que tu insertas una memoria al puerto usb, este automáticamente busca en los driver en los archivos: usbstor.inf sbstor.PNF https://cxs2fw.blu.livefilestore.com/y1pIprjzVVtBofGdtr-71lCFUGWmS7grGs588E_5E7fsU4L1scOcMP8d7Xx_nC-ykXoygyVoGW6xzf_mTNUY6zJWMuye7XkWyQy/usbstor.bmp?psid=1 al no encontrar estos archivos los drivers de cualquier memoria que se inserte no se instalara los drivers. por otro lado si la memoria ya había sido insertada con anterioridad estos archivos ya no son útiles ya que los drivers ya están instalados y tendríamos que recurrir al registro para bloquearlo. "HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesUSBSTORStart" 3 = Habilitado 4 = DesHabilitado ahora que mas o menos sabemos como funciona el bloqueo del usb, veamos le código del mismo las librerías que utilizaremos serian las siguientes: Registry,ShellAPI {el primer proceso que tendremos seria el de cambiar el nombre de los archivos, para cuando queramos habilitar la opción de instalar de nuevo una memoria usb regresemos los archivos a su nombre original y listo usbstor.inf sbstor.PNF} Procedure Tusbs.MadrearArchivo(Sender: TObject); Var lpFileOp: TSHFileOpStruct; ArchivoABuscar1,ArchivoABuscar2:String; Begin ArchivoABuscar1:='C:WINDOWSinfusbstor.inf'; If FindFirst(ArchivoABuscar1, faAnyFile and not (faVolumeID or faDirectory), SearchRec) = 0 then Begin lpFileOp.Wnd := Self.Handle; lpFileOp.wFunc := FO_RENAME; lpFileOp.pFrom := PChar('C:WINDOWSinfusbstor.inf' + #0#0); lpFileOp.pTo := PChar('C:WINDOWSinfusbstorinf.Txt' + #0#0); lpFileOp.fFlags:= FOF_SIMPLEPROGRESS or FOF_FILESONLY; lpFileOp.fAnyOperationsAborted := FALSE; lpFileOp.hNameMappings := nil; lpFileOp.lpszProgressTitle := PChar('Trasladando archivos al disco D' + #0#0); if ShFileOperation(lpFileOp) <> 0 then ShowMessage('Ha Fallado El cambio de Nombre de Archivo de usbstor.inf a usbstorinf.Txt'); End; ArchivoABuscar2:='C:WINDOWSinfusbstor.PNF'; If FindFirst(ArchivoABuscar2, faAnyFile and not (faVolumeID or faDirectory), SearchRec) = 0 then Begin lpFileOp.Wnd := Handle; lpFileOp.wFunc := FO_RENAME; lpFileOp.pFrom := PChar('C:WINDOWSinfusbstor.PNF' + #0#0); lpFileOp.pTo := PChar('C:WINDOWSinfusbstorPNF.Txt' + #0#0); lpFileOp.fFlags:= FOF_ALLOWUNDO or FOF_RENAMEONCOLLISION; if ShFileOperation(lpFileOp) <> 0 then ShowMessage('Ha Fallado El cambio de Nombre de Archivo de usbstor.PNF a usbstorPNF.Txt'); End; End; recuerda que hay que crear tus procedimientos para regresar los archivos a la normalidad, ya que estos procedimientos cambian el archivo a un txt, una vez hecho esto entonces creamos el procedimiento para habilitar o deshabilitar el puertos usb del registro: Procedure EnableUSB(Value: Boolean); begin With TRegistry.Create do Try RootKey:= HKEY_LOCAL_MACHINE; If OpenKey('SYSTEMCurrentControlSetServicesUSBSTOR',TRUE) then begin if Value then WriteInteger('Start',3) Else WriteInteger('Start',4); CloseKey; end; finally Free; end; end; para mandarlos llamar solo: EnableUSB(False); MadrearArchivo(Sender); y bueno aunque faltan otros detalles, como iconizarlo, y que corra siempre cuando inicie windows, por el momento es el proposito de este post,