USB存储设备控制 By Yu2n
XP系统测试通过,需要管理员权限。
在下次插拔设备时生效,无须重启。
"USB_Stock_Block.vbs"===========================================================================================CheckOS " 检查操作系统版本CheckMeState" 检查程序运行状态main" 执行主程序"==========================================================================================="主函数Sub main()Dim wso, windir, EnableUSBSet wso = CreateObject("WScript.Shell")Set objNetwork = CreateObject("wscript.network")strComputer = objNetwork.ComputerNameIf wso.Popup(VbCrLf & "禁用 USB 存储设备,请按“确定”"& VbCrLf & _VbCrLf & "启用 USB 存储设备,请按“取消” (6秒后自动取消)" _, 6, "USB 存储设备控制 - 主菜单", 48+4096+1) = 1 ThenEnableUSB = 0ElseEnableUSB = 1End IfIf Exist( "C:windowssystem32cmd.exe" ) Then windir = "windows"If Exist( "C:winntsystem32cmd.exe" ) Then windir = "winnt"If EnableUSB = 1 Thenwso.RegWrite "HKEY_LOCAL_MACHINESYSTEMCurrentControlSetControlStorageDevicePoliciesWriteProtect","1","REG_DWORD" "禁止写入wso.RegWrite "HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesUSBSTORStart","3","REG_DWORD" "启用USBStorMove "C:" & windir & "infusbstor.pnf_" , "C:" & windir & "infusbstor.pnf"Move "C:" & windir & "infusbstor.inf_" , "C:" & windir & "infusbstor.inf"Move "C:" & windir & "system32driversusbstor.sys_" , "C:" & windir & "system32driversusbstor.sys"If (Not Exist( "C:" & windir & "infusbstor.pnf_" )) And (regKeyRead( "HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesUSBSTORStart" ) = 3 ) Thenwso.Popup VbCrLf & "启用 USB 存储设备成功。 ", 5, "USB 存储设备控制 - 操作完成", 64+4096Elsewso.Popup VbCrLf & "启用 USB 存储设备失败。 ", 5, "USB 存储设备控制 - 操作完成", 16+4096End IfElsewso.RegWrite "HKEY_LOCAL_MACHINESYSTEMCurrentControlSetControlStorageDevicePoliciesWriteProtect","1","REG_DWORD" "禁止写入wso.RegWrite "HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesUSBSTORStart","4","REG_DWORD" "禁用用USBStorMove "C:" & windir & "infusbstor.pnf" , "C:" & windir & "infusbstor.pnf_"Move "C:" & windir & "infusbstor.inf" , "C:" & windir & "infusbstor.inf_"Move "C:" & windir & "system32driversusbstor.sys" , "C:" & windir & "system32driversusbstor.sys_"If (Not Exist( "C:" & windir & "infusbstor.pnf" )) And (regKeyRead( "HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesUSBSTORStart" ) = 4 ) Thenwso.Popup VbCrLf & "禁用 USB 存储设备成功。 ", 5, "USB 存储设备控制 - 操作完成", 64+4096Elsewso.Popup VbCrLf & "禁用 USB 存储设备失败。 ", 5, "USB 存储设备控制 - 操作完成", 16+4096End IfEnd ifSet wso = NothingEnd Sub"==========================================================================================="小函数Function Exist( strPath )"On Error Resume NextSet fso = CreateObject("Scripting.FileSystemObject")If ((fso.FolderExists( strPath )) Or (fso.FileExists( strPath ))) thenExist = TrueElseExist = FalseEnd ifSet fso = NothingEnd FunctionSub Move( strSource, strDestination )On Error Resume NextIf Exist( strSource ) ThenSet fso = CreateObject("Scripting.FileSystemObject")If (fso.FileExists(strSource)) Then fso.MoveFile strSource, strDestinationIf (fso.FolderExists(strSource)) Then fso.MoveFolder strSource, strDestinationSet fso = NothingElseWarningInfo "警告", "找不到 " & strSource & " 文件!", 2End IfIf Not Exist( strDestination ) Then WarningInfo "警告", "移动失败,无法移动 " & VbCrLf & strSource & " 至" & VbCrLf & strDestination, 2End SubFunction regKeyRead( strKey )Set wso = CreateObject("WScript.Shell")regKeyRead = wso.RegRead( strKey )"strKey = "HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindowsCurrentVersionRunDocTip"Set wso = NothingEnd Function"==========================================================================================="是否重复运行Sub CheckMeState()If IsRun( WScript.ScriptFullName ) ThenSet wso = CreateObject("WScript.Shell")If wso.Popup("程序已运行,请不要重复运行本程序!" & VbCrLf & VbCrLf & _"退出已运行程序,请按“确定”,否则请按“取消”。(3秒后自动取消)" _, 3, "警告", 1) = 1 ThenKillMeAllRunEnd IfSet wso = Nothing"WarningInfo "警告:", "程序已运行,请不要重复运行本程序!!", 1WScript.QuitEnd IfEnd Sub" 检测是否重复运行Function IsRun(appPath)IsRun=FalseFor Each ps in GetObject("winmgmts:\.
ootcimv2:win32_process").instances_"IF Lcase(ps.name)="mshta.exe" ThenIF Lcase(ps.name)="wscript.exe" ThenIF instr(Lcase(ps.CommandLine),Lcase(appPath)) Then i=i+1End IFnextif i>1 thenIsRun=Trueend ifEnd Function"终止自身Function KillMeAllRun()Dim MeAllPidSet pid = Getobject("winmgmts:\.").InstancesOf("Win32_Process")For Each ps In pid"if LCase(ps.name) = LCase("mshta.exe") thenIF Lcase(ps.name)="wscript.exe" Or Lcase(ps.name)="cscript.exe"ThenIF instr(Lcase(ps.CommandLine),Lcase(WScript.ScriptFullName)) Then MeAllPid = MeAllPid & "/PID " & ps.ProcessID & " "end ifnextSet wso = CreateObject("WScript.Shell")wso.Run "TASKKILL " & MeAllPid & " /F /T", 0, FalseSet wso = NothingSet pid = NothingEnd Function"==========================================================================================="检查操作系统版本Sub CheckOS()Dim os_veros_ver = GetSystemVersionIf os_ver >= 60 Or os_ver <= 50 ThenMsgbox "不支持该操作系统! ", 48+4096, "警告"WScript.Quit" 退出程序End IfEnd Sub"取得操作系统版本Function GetSystemVersion()Dim os_obj, os_version, os_version_arrSet os_obj = GetObject("winmgmts:").InstancesOf("Win32_OperatingSystem")For Each os_info In os_objos_version = os_info.VersionIf os_version <> "" Then Exit ForNextSet os_obj = Nothingos_version_arr = Split( os_info.Version, ".")GetSystemVersion = Cint( os_version_arr( 0 ) & os_version_arr( 1 ) )End Function