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
|