USB存储设备控制 By Yu2n
XP系统测试通过,需要管理员权限。
在下次插拔设备时生效,无须重启。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
|
'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 |