使用VBS禁用、启动USB存储设备

   2015-11-20 0
核心提示:这篇文章主要介绍了使用VBS禁用、启动USB存储设备,需要的朋友可以参考下

USB存储设备控制 By Yu2n

XP系统测试通过,需要管理员权限。

在下次插拔设备时生效,无须重启。

'USB_Stock_Block.vbs
'===========================================================================================
CheckOS     ' 检查操作系统版本
CheckMeState  ' 检查程序运行状态
main      ' 执行主程序

'===========================================================================================
'主函数
Sub main()
    Dim wso, windir, EnableUSB
    Set wso = CreateObject("WScript.Shell")
    Set objNetwork = CreateObject("wscript.network")
        strComputer = objNetwork.ComputerName
        
    If wso.Popup(VbCrLf & "禁用 USB 存储设备,请按“确定”"& VbCrLf & _
                VbCrLf & "启用 USB 存储设备,请按“取消”   (6秒后自动取消)" _
                , 6, "USB 存储设备控制 - 主菜单", 48+4096+1) = 1 Then
        EnableUSB = 0
    Else
        EnableUSB = 1
    End If
    
    If Exist( "C:\windows\system32\cmd.exe" ) Then windir = "windows"
    If Exist( "C:\winnt\system32\cmd.exe" ) Then windir = "winnt"

    If EnableUSB = 1 Then
        wso.RegWrite "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\StorageDevicePolicies\WriteProtect","1","REG_DWORD" '禁止写入
        wso.RegWrite "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\USBSTOR\Start","3","REG_DWORD"           '启用USBStor
        
        Move "C:\" & windir & "\inf\usbstor.pnf_" , "C:\" & windir & "\inf\usbstor.pnf"
        Move "C:\" & windir & "\inf\usbstor.inf_" , "C:\" & windir & "\inf\usbstor.inf"
        Move "C:\" & windir & "\system32\drivers\usbstor.sys_" , "C:\" & windir & "\system32\drivers\usbstor.sys"
        
        If (Not Exist( "C:\" & windir & "\inf\usbstor.pnf_" )) And (regKeyRead( "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\USBSTOR\Start" ) = 3 ) Then
            wso.Popup VbCrLf & "启用 USB 存储设备成功。    ", 5, "USB 存储设备控制 - 操作完成", 64+4096
        Else
            wso.Popup VbCrLf & "启用 USB 存储设备失败。    ", 5, "USB 存储设备控制 - 操作完成", 16+4096
        End If
    Else
        wso.RegWrite "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\StorageDevicePolicies\WriteProtect","1","REG_DWORD" '禁止写入
        wso.RegWrite "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\USBSTOR\Start","4","REG_DWORD"           '禁用用USBStor
        
        Move "C:\" & windir & "\inf\usbstor.pnf" , "C:\" & windir & "\inf\usbstor.pnf_"
        Move "C:\" & windir & "\inf\usbstor.inf" , "C:\" & windir & "\inf\usbstor.inf_"
        Move "C:\" & windir & "\system32\drivers\usbstor.sys" , "C:\" & windir & "\system32\drivers\usbstor.sys_"
        
        If (Not Exist( "C:\" & windir & "\inf\usbstor.pnf" )) And (regKeyRead( "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\USBSTOR\Start" ) = 4 ) Then
            wso.Popup VbCrLf & "禁用 USB 存储设备成功。    ", 5, "USB 存储设备控制 - 操作完成", 64+4096
        Else
            wso.Popup VbCrLf & "禁用 USB 存储设备失败。    ", 5, "USB 存储设备控制 - 操作完成", 16+4096
        End If
    End if
        
    Set wso = Nothing
End Sub

'===========================================================================================
'小函数
Function Exist( strPath )
    'On Error Resume Next
    Set fso = CreateObject("Scripting.FileSystemObject")
    If ((fso.FolderExists( strPath )) Or (fso.FileExists( strPath ))) then
        Exist = True
    Else
        Exist = False
    End if
    Set fso = Nothing
End Function
Sub Move( strSource, strDestination )
    On Error Resume Next
    If Exist( strSource ) Then
        Set fso = CreateObject("Scripting.FileSystemObject")
        If (fso.FileExists(strSource)) Then fso.MoveFile strSource, strDestination
        If (fso.FolderExists(strSource)) Then fso.MoveFolder strSource, strDestination
        Set fso = Nothing
    Else
        WarningInfo "警告", "找不到 " & strSource & " 文件!", 2
    End If
    If Not Exist( strDestination ) Then WarningInfo "警告", "移动失败,无法移动 " & VbCrLf & strSource & " 至" & VbCrLf & strDestination, 2
End Sub
Function regKeyRead( strKey )
    Set wso = CreateObject("WScript.Shell")
    regKeyRead = wso.RegRead( strKey )  'strKey = "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run\DocTip"
    Set wso = Nothing
End Function

'===========================================================================================
'是否重复运行
Sub CheckMeState()
    If IsRun( WScript.ScriptFullName ) Then
        Set wso = CreateObject("WScript.Shell")
        If wso.Popup("程序已运行,请不要重复运行本程序!" & VbCrLf & VbCrLf & _
                            "退出已运行程序,请按“确定”,否则请按“取消”。(3秒后自动取消)" _
                            , 3, "警告", 1) = 1 Then
            KillMeAllRun
        End If
        Set wso = Nothing
        'WarningInfo "警告:", "程序已运行,请不要重复运行本程序!!", 1
        WScript.Quit
    End If
End Sub
' 检测是否重复运行
Function IsRun(appPath)
    IsRun=False
    For Each ps in GetObject("winmgmts:\\.\root\cimv2:win32_process").instances_
        'IF Lcase(ps.name)="mshta.exe" Then
        IF Lcase(ps.name)="wscript.exe" Then
            IF instr(Lcase(ps.CommandLine),Lcase(appPath)) Then i=i+1
        End IF
    next
    if i>1 then
        IsRun=True
    end if
End Function
'终止自身
Function KillMeAllRun()
    Dim MeAllPid
    Set pid = Getobject("winmgmts:\\.").InstancesOf("Win32_Process")
    For Each ps In pid
        'if LCase(ps.name) = LCase("mshta.exe") then
        IF Lcase(ps.name)="wscript.exe" Or Lcase(ps.name)="cscript.exe"Then
            IF instr(Lcase(ps.CommandLine),Lcase(WScript.ScriptFullName)) Then MeAllPid = MeAllPid & "/PID " & ps.ProcessID & " "
        end if
    next
    Set wso = CreateObject("WScript.Shell")
    wso.Run "TASKKILL " & MeAllPid & " /F /T", 0, False
    Set wso = Nothing
    Set pid = Nothing
End Function

'===========================================================================================
'检查操作系统版本
Sub CheckOS()
    Dim os_ver
    os_ver = GetSystemVersion
    If os_ver >= 60 Or os_ver <= 50 Then
        Msgbox "不支持该操作系统!    ", 48+4096, "警告"
        WScript.Quit  ' 退出程序
    End If
End Sub
'取得操作系统版本
Function GetSystemVersion()
    Dim os_obj, os_version, os_version_arr
    Set os_obj = GetObject("winmgmts:").InstancesOf("Win32_OperatingSystem")
    For Each os_info In os_obj
        os_version = os_info.Version
        If os_version <> "" Then Exit For
    Next
    Set os_obj = Nothing
    os_version_arr = Split( os_info.Version, ".")
    GetSystemVersion = Cint( os_version_arr( 0 ) & os_version_arr( 1 ) )
End Function

 
反对 0举报 0 评论 0
 

免责声明:本文仅代表作者个人观点,与乐学笔记(本网)无关。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
    本网站有部分内容均转载自其它媒体,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责,若因作品内容、知识产权、版权和其他问题,请及时提供相关证明等材料并与我们留言联系,本网站将在规定时间内给予删除等相关处理.

  • VB用API实现各种对话框(总结) vbs简单代码对话
    VB用API实现各种对话框(总结)  各种对话框(总结)标准对话框(SmDialog)Option Explicit''定义一个全局变量,用于保存字体的各种属性Public Type SmFontAttrFontName As String '字体名FontSize As Integer '字体大小FontBod As Boolean '是否黑体FontItalic A
    02-09
  • 脚本语言语言脚本语言:Shell , JavaScript、VBS
    今天一直在研究脚本语言语言之类的问题,上午正好有机会和大家共享一下.     脚本语言:Shell , JavaScript、VBScript、Perl、PHP、Python、Ruby、Lua                  工作控制语言和shell    Shell 脚本    此类脚本用于自动
    02-09
  • VB中的Dictionary对象 vbs dictionary
     VB中的Dictionary对象     Dictionary对象不是VBA或Visual Basic实时语言的具体存在的部分,它是存在于Microsoft Scripting Runtime Library(SCRRUN.DLL)中的一个对象。    为了在应用程序中使用Dictionary对象,就必须利用Reference对话框增加一个
    02-09
  • VB6文本框中日文乱码的解决办法 vbs写入中文后乱码
    VB6文本框中日文乱码的解决办法 vbs写入中文后
    TextBox控件的Font设置为MS Goshic 太字 并且下面的文字Set设置为 日本语。 
    02-09
  • vb常用函数一览表 vbs函数大全
    常用内部函数数学函数函数功能示例结果说明Abs(x)绝对值Abs(-50.3)50.3 Exp(x)自然指数Exp(2)e^2e(自然对数的底)的某次方Fix(x)取整(取参数的整数部分)Fix(-99.8)-99参数大于 0 时,去掉小数部分;参数小于 0 时,返回大于或等于该参数值Int(x)取整(取小于
    02-08
  • VBA/VB6/VBS/VB.NET/C#/Python/PowerShell都能调用的API封装库
    VBA/VB6/VBS/VB.NET/C#/Python/PowerShell都能
     API函数很强大,但是声明的时候比较繁琐。我开发的封装库,包括窗口、键盘、鼠标、消息等常用功能。用户不需要添加API函数的声明,就可以用到API的功能。在VBA、VB6的引用对话框中引用API.tlb文件,就可以用到其中的函数和方法,在VB.Net或C#项目中引用API.
    02-08
  • 如何在VB.net中建立word文档 vbs创建文本文档
    Private Sub Button1_Click(ByVal sender As System.Object, _ByVal e As System.EventArgs) Handles Button1.ClickEnd Subwith:Private Sub Button1_Click(ByVal sender As System.Object, _ByVal e As System.EventArgs) Handles Button1.ClickDim oWord As
    02-08
  • VB中的+与&符号的区别 vb和vbs
    字符串运算符和字符串表达式  字符串运算符的作用是将两个字符串连接成一个字符串,经常形象的叫做连接符。  在VB中就提供了两种连接用的字符串运算符 “”、“+” 例如  “VB”+“编程入门” 就等同于“VB编程入门” “VB”“编程入门” 就等同于“V
    02-07
  • 使用 Iisext.vbs 列出Web服务扩展的方法
    这篇文章主要介绍了如何使用 iisext.vbs 在本地或远程计算机上列出 Web 服务扩展,需要的朋友可以参考下
  • 使用 Iisext.vbs 启用Web服务扩展文件的方法
    这篇文章主要介绍了如何使用 iisext.vbs 在本地或远程计算机上启用 Web 服务扩展文件,需要的朋友可以参考下
点击排行