none
Habilitar / Desabilitar USB RRS feed

  • Pergunta

  • Bom dia,
    Criei um grupo de trabalho aqui na rede que administro chamado pendrivers aonde os membros ficariam com o uso de pen drivers bloqueado.
    Isso foi feito através de uma GPO e com o script que segue abaixo:

    Set wshNet = CreateObject("WScript.Network")
    Set objSysInfo = CreateObject("ADSystemInfo")
    Set objNetwork = CreateObject("Wscript.Network")
    Set CurrentUser =_
    GetObject("WinNT://dominio/" & wshNet.Username & ",user")
    Dim objShell, WSHShell
    Const HKEY_LOCAL_MACHINE = &H80000002
    For Each grp In CurrentUser.Groups
          MapDrive grp.Name
    Next
    Sub MapDrive(byval strGroupname)
     If InStr(strGroupName, "PenDrivers") Then
      Set WSHShell = WScript.CreateObject("WScript.Shell")
      WSHShell.RegWrite "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\USBSTOR\Start",4 ,"REG_DWORD"
      Set WSHShell = nothing
      Wscript.quit
     Else
      strComputer = "." 
      Set oReg=GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & _
         strComputer & "\root\default:StdRegProv")
      strKeyPath = "SYSTEM\CurrentControlSet\Services\USBStor"
      oReg.EnumValues HKEY_LOCAL_MACHINE, strKeyPath, _
         arrValueNames, arrValueTypes
      x=0
       For i=0 To UBound(arrValueNames) ' verificando condição específica
        If arrValueNames(i) = "Block" Then
            x=x+1
        End If
       Next
       If x=0 Then
        Set wshNet = CreateObject("WScript.Network")
        Set CurrentUser =_
        GetObject("WinNT://dirap/" & wshNet.Username & ",user")
        Set WSHShell = WScript.CreateObject("WScript.Shell")
        WSHShell.RegWrite "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\USBSTOR\Start",3 ,"REG_DWORD"
        Set WSHShell = Nothing
       End If
     End If          
    End Sub

    A verificação da condição específica foi necessária porque algumas estações tiveram o uso de pen drivers bloqueados para todos os usuários e isso é feito quando ocorrem muitos incidentes em uma determinada estação através de um script rodado remotamente e de forma manual.
    Para evitar que essas estações tenham o uso de pen drivers liberados novamente por essa GPO, durante o bloqueio manual é criado uma chave no registro dessas estações para que o script acima possa diferenciar uma estação da outra.
    Abaixo está o script que utilizo para ativar ou desativar essas estações manualmente:

    Dim WSHShell,FileLog,colServiceList, objService, objWMIService, objDom, soft, objShell, objFSO, WshNetwork, ObjFileAppending, ActionList, FileSysObj,objTextFile
    Const OverwriteExisting = TRUE
    Const HKEY_LOCAL_MACHINE = &H80000002
    strComputer = Inputbox("Digite O Nome do Computador","Desativar - Ativar USB")
     If strComputer= "" then
      WScript.Echo "É Necessário Digitar O Nome de um Computador - Script Finalizado"
      Wscript.quit
     Else
      Set WshNetwork = WScript.CreateObject("WScript.Network")
      FileLog = "\\servidor\compartilhamento\"& strComputer &".txt"
      Set ObjFSO = CreateObject("Scripting.FileSystemObject")
      Const ForReading = 1, ForWriting = 2, ForAppending = 8
      Set ObjFileRead = ObjFSO.opentextfile(FileLog, ForReading, True)
      Set ObjFileAppending = ObjFSO.opentextfile(FileLog, ForAppending, True)
      Dim Retorno
       retorno=msgbox ("Clique em Sim para desativar USB ou não para ativá-la",vbyesnocancel,"Desativa USB remotamente")
       Set objShell = CreateObject("WScript.Shell")
        If retorno=6 then
          dim Motivo
          Motivo = Inputbox("digite o motivo para desativação da USB","Desativar USB")
          Set oReg=GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & _
              strComputer & "\root\default:StdRegProv")
          strKeyPath = "SYSTEM\CurrentControlSet\Services\USBSTOR"
          strValueName = "Start"
          dwValue =4
          oReg.SetDWORDValue HKEY_LOCAL_MACHINE,strKeyPath,strValueName,dwValue
          Set oReg=GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & _
              strComputer & "\root\default:StdRegProv")
           strKeyPath = "SYSTEM\CurrentControlSet\Services\USBStor\"
          strValueName = "Block"
          arrStringValues = Array("USB Bloqueada")
          oReg.SetMultiStringValue HKEY_LOCAL_MACHINE,strKeyPath, _
             strValueName,arrStringValues
          WriteLog " USB desabilitada na estação de trabalho "& ""& strComputer &""& " em " & now() & " pelo usuário " & WshNetwork.UserName  
          WriteLog "Motivo da desativação: " & ""& Motivo &""
        Else
         If retorno=7 then
           Motivo = Inputbox("digite o motivo para ativação da USB","Ativar USB")
           Set oReg=GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & _
               strComputer & "\root\default:StdRegProv")
           strKeyPath = "SYSTEM\CurrentControlSet\Services\USBSTOR"
           strValueName = "Start"
           dwValue =3
           oReg.SetDWORDValue HKEY_LOCAL_MACHINE,strKeyPath,strValueName,dwValue
           Set oReg=GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & _
               strComputer & "\root\default:StdRegProv")
     
           strKeyPath = "SYSTEM\CurrentControlSet\Services\USBStor\"
           strStringValueName = "Block"
           oReg.DeleteValue HKEY_LOCAL_MACHINE,strKeyPath,strStringValueName
           WriteLog " USB habilitada na estação de trabalho "& ""& strComputer &""& " em " & now() & " pelo usuário " & WshNetwork.UserName
           WriteLog "Motivo da ativação: " & ""& Motivo &""
         Else
           WScript.Echo "Nenhum Computador Teve As Portas USB Alteradas"
           Wscript.quit
         End If
        End If
      End If

    Function WriteLog (Text)
    ObjFileAppending.WriteLine Text
    End Function

    A principal questão é a seguinte:
    Nesse script implementado via GPO, aonde os usuários membro do grupo PenDrivers tem o acesso aos pen drivers desabilitados durante o logon, eu notei um problema que tem ocorrido.
    Caso o pen driver seja conectado durante o login de um usuário com acesso liberado, esse usuário faça logoff, mas com o pen driver ainda conectado e logo a seguir um usuário sem acesso faça o logon, ele continuará acessando o pen driver conectado no login do usuário anterior.

    Para contornar essa situação, criei um outro script que roda no logoff de cada usuário e que ejeta os pen drivers conectados. Esse script precisa de um executável chamado devcon que achei em uma busca pela internet.
    O script segue abaixo:

    Set wshNet = CreateObject("WScript.Network")
    Set objSysInfo = CreateObject("ADSystemInfo")
    Set objNetwork = CreateObject("Wscript.Network")
    strComputer = "."
    Set objShell = CreateObject("WScript.Shell")
    objShell.Run "\\servidor\compartilhamento\devcon remove @usb\VID*"

    Só que esse script só funciona quando o usuário que faz o logoff possui direitos administrativos na estação.
    Alguém tem alguma sugestão?
    quinta-feira, 22 de outubro de 2009 11:12

Todas as Respostas

  • Rafael,

               Tente utilizar o script abaixo. Baixe o CPAU em http://www.joeware.net/freetools/tools/cpau/index.htm

    CPAU -u DOMINIO/USUÁRIO -p SENHA -ex "CAMINHO DO EXECUTÁVEL OU SCRIPT"

    Lembrando que esse processo deve ser bem elaborado, para não ocorrer uma falha de segurança.



    Espero ter ajudado.
    Se útil, classifique.
    Leonardo Sousa
    quinta-feira, 22 de outubro de 2009 11:59
  • Olá,

    O devcon só funciona com admin mesmo...

    É comum um usuário fazer o logoff e logon ? Talvez, você faz um script para reiniciar  a maquina. Não é uma maneira muito lógica, mas evita você ter que passar usuário e senha de administrador por script.



    Até mais,

    Jesiel

    Obs.: Se útil, classifique


    quinta-feira, 22 de outubro de 2009 13:10
  • Bom dia Leo,
    Infelizmente por esse método eu teria de colocar uma senha de admin no script e como aqui na rede tem muito usuário que fica tentando burlar o sistema, isso seria muito arriscado. Mas de qualquer forma valeu pela dica, até porque eu não conhecia esse utilitário.
    terça-feira, 27 de outubro de 2009 10:40
  • Olá Jesiel,
    Os usuários costumam fazer logon e logoff cmo frequência, até mesmo para que eles consigam usar o pen-driver nas contas bloqueadas.
    terça-feira, 27 de outubro de 2009 10:42