Como bloquear pendrive definitivamente

Recentemente, fiz um post aqui citando um programa para fazer o bloqueio/desbloqueio de pendrives. Este post você pode conferir aqui: http://ricardomartins.com.br/2010/08/15/como-bloquear-pendrive/

Hoje descobri que este programa tem um problema que é o seguinte: Ele só funciona, fazendo o bloqueio do pendrive, caso o pendrive já tenha sido plugado na máquina antes. Caso seja um pendrive novo, ele não funciona.

Isso mesmo! Se você pegar um pendrive que nunca tenha sido ligado na máquina onde tenha utilizado o software para bloquear, ele é reconhecido normalmente.

O que ocorre é que ao clicar em “Lock” no software, ele altera o valor da seguinte chave no registro:  HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesUSBSTORStart. No caso, muda o valor de 3 para 4 de modo a bloquear. Mas ao plugar um pendrive que ainda não tenha sido utilizado na máquina em questão, o Windows volta o valor da chave para 3, deixando desbloqueado.

Isso porque ao conectar um pendrive, ele é detectado pelo arquivo C:Windowssystem32DRIVERSUSBSTOR.SYS e caso ele já “conheça” esse pendrive, ele mantém o valor da chave como está. Caso ele não conheça, ele altera o valor da chave no registro para 3, para poder instalar o driver do pendrive.

Assim acaba desfazendo a modificação feita pelo software. Por esta razão, o ideal continuava sendo o método tradicional ( já postado aqui também – http://ricardomartins.com.br/2009/04/10/bloqueando-pendrives-no-windows-facil-facil/), que consiste em negar permissões nos arquivos usbstor.inf, usbstor.pnf e usbstor.sys e alterar a chave do registro citada acima.

Para resolver este problema e facilitar a minha vida, hoje eu fiz um script em vbs, que muda o valor da chave do registro, e altera as permissões dos arquivos. Assim, ao invés de ter que ir em cada arquivo e mecher nas permissões, o script faz tudo pra mim.

Eu fiz dois scripts, um para bloquear e outro para desbloquear. Eu poderia criar um script, que perguntasse o que fazer, no caso, bloquear ou desbloquear, e ele executar as ações necessárias de acordo com a resposta. No entanto como não sou nenhum expert em programação vbs, este já está muito bom para a minha necessidade.

Abaixo o código. Basta copiar e colar no notepad e salvar como “Bloqueia.vbs” e “Desbloqueia.vbs”

É um script simples, onde utilizo o cacls para alterar as permissões. Para quem não conhece, o cacls é um comando nativo do Windows, para mudar permissões de arquivos via console.

Você também poderá notar que eu configurei para mudar as permissões para os usuários TODOS e EVERYONE. Isto não é uma redundância desnecessária. É que assim não tenho problemas com o idioma do SO. Caso seja pt_br, irá funcionar pelo TODOS, caso contrário, pelo EVERYONE.

Abaixo o código do “Bloqueia.vbs”:

'Script para Bloquear Pendrive - Ricardo Macedo Martins
'Inicio do script
Set WshShell = WScript.CreateObject("WScript.Shell")
WshShell.RegWrite "HKLMSYSTEMCurrentControlSetServicesUSBSTORStart",4,"REG_DWORD"
WshShell.Run "cacls c:windowsinfUsbstor.inf /E /P EVERYONE:N", 0 , True
WshShell.Run "cacls c:windowsinfUsbstor.inf /E /P TODOS:N", 0 , True
WshShell.Run "cacls c:windowsinfUsbstor.inf /E /P SYSTEM:N", 0 , True
WshShell.Run "cacls c:windowsinfUsbstor.pnf /E /P EVERYONE:N", 0 , True
WshShell.Run "cacls c:windowsinfUsbstor.pnf /E /P TODOS:N", 0 , True
WshShell.Run "cacls c:windowsinfUsbstor.pnf /E /P SYSTEM:N", 0 , True
WshShell.Run "cacls C:Windowssystem32driversusbstor.sys /E /P EVERYONE:N", 0 , True
WshShell.Run "cacls C:Windowssystem32driversusbstor.sys /E /P TODOS:N", 0 , True
WshShell.Run "cacls C:Windowssystem32driversusbstor.sys /E /P SYSTEM:N", 0 , True
MsgBox "Pendrive Bloqueado!",0,"Informacao"
'Fim do script

Abaixo o código do “Desbloqueia.vbs”:

'Script para Bloquear Pendrive - Ricardo Macedo Martins
'Inicio do script
Set WshShell = WScript.CreateObject("WScript.Shell")
WshShell.RegWrite "HKLMSYSTEMCurrentControlSetServicesUSBSTORStart",3,"REG_DWORD"
WshShell.Run "cacls c:windowsinfUsbstor.inf /E /P EVERYONE:F", 0 , True
WshShell.Run "cacls c:windowsinfUsbstor.inf /E /P TODOS:F", 0 , True
WshShell.Run "cacls c:windowsinfUsbstor.inf /E /P SYSTEM:F", 0 , True
WshShell.Run "cacls c:windowsinfUsbstor.pnf /E /P EVERYONE:F", 0 , True
WshShell.Run "cacls c:windowsinfUsbstor.pnf /E /P TODOS:F", 0 , True
WshShell.Run "cacls c:windowsinfUsbstor.pnf /E /P SYSTEM:F", 0 , True
WshShell.Run "cacls C:Windowssystem32driversusbstor.sys /E /P EVERYONE:F", 0 , True
WshShell.Run "cacls C:Windowssystem32driversusbstor.sys /E /P TODOS:F", 0 , True
WshShell.Run "cacls C:Windowssystem32driversusbstor.sys /E /P SYSTEM:F", 0 , True
MsgBox "Pendrive Desbloqueado!",0,"Informacao"
'Fim do script

Se você preferir, eu coloquei os scripts disponíveis para download. Clique aqui para baixar.

Até a próxima!

  • kaka

    parabéns valw tava precisando continue asim amigo, me serviu muito

  • Thiago Aquino Gomes

    Bom dia. Dessa forma todos os dispositivos usb são bloqueados?

  • Madu

    Este procedimento de negar os arquivos usbstor.inf, usbstor.pif e usbstor.sys são reversíveis? Já houve casos que neguei a permissão a todos e quando tentei reverter para permitir (usando usuário administrador), as permissões não voltaram ao normal.

    Grato!
    Madu

    • Maciel

      Sim Manu,

      o Desbloqueia.vbs desfaz corretamente!

  • Maciel

    Ricardo, apenas pra agradecer pois o script me foi útil.

  • mariana

    Aqui comigo não funcionou, o primeiro pen drive não funciona, mas um segundo diferente abri

  • Boa tarde, Ricardo

    Na maquinas com windows XP funcionou certinho, mas estou tendo problemas com Windows 7.
    A mensagem aparece normal de que foi bloqueado mas ele nao consegue bloquear realmente.

  • rafael

    oi amigo no win xp funcionou bem mais esta dando erro no windows 7