一、 需求
有时,我们希望USB存储设备(移动硬盘、U盘、SD等等)能像软盘一样提供写保护功能。
如何做到呢?
二、 现有软件
有款叫做UsbWriteProtector的软件(下载地址见后),可以实现我们需要的功能。
那它又是如何实现的呢?
三、 实现原理
从一本资料——USB_Write_Protect.en_us.pdf——可以了解到:
Windows XP SP2提供了一个特性, 只需要向注册表中写入一个值, 就可以做到对USB存储设备进行写保护。
——具体地说:
在Windows XP SP2上, 当USB存储设备连接到系统时, 系统会检查如下的项:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\StorageDevicePolicies
如果存在一个名为WriteProtect,类型为REG_DWORD的值,并且值为1,
系统就会对该USB存储设备进行写保护, 直到断开连接。
如果需要去掉写保护属性, 只能断开设备, 并在再次连接前, 将该值设置为0。
UsbWriteProtector正是使用这一特性实现其功能的。
——从它对注册表的修改即可看出。
四、 改进
—— 四、1
UsbWriteProtector完成的仅仅是注册表操作,却提供了一个只有2个选项的GUI界面。
通常使用方式如下:
启动软件,选中打开或者关闭,然后关闭这个软件 —— GUI在这里用处不太大。
同时, 它的大小有190+K。
—— 四、2
USB_Write_Protect.en_us.pdf中提出另一种方法: 写2个.reg文件来修改注册表。
但是reg文件使用后都会分别弹出一个对话框, 也有点不方便。
—— 这里将其写为批处理文件:
-------- ReadOnly.bat --------
REG ADD HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\StorageDevicePolicies\ /v WriteProtect /t REG_DWORD /d 1 /f
-------- ReadWrite.bat --------
REG ADD HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\StorageDevicePolicies\ /v WriteProtect /t REG_DWORD /d 0 /f
这样直接双击运行, 会有一个控制台窗口一闪而过, 就ok了。
这里有个小插曲: 最开始我模仿USB_Write_Protect.en_us.pdf的作法, 将批处理文件分别命名为:
——USB Write Protect On.bat
——USB Write Protect Off.bat
我觉得很清晰, 打开/关闭写保护嘛。
发给女友使用时, 却遭到疑问“到底哪个是只读啊?”
才发觉这样的命名, 对有背景的人员很清晰, 但对普通用户却不一定。
遂按其效果命名为: ReadOnly.bat和 ReadWrite.bat, 就清晰多了。
这是一个小例子, 说明合理命名是很重要的。
同时, 还提供一个查看当前状态的批处理:
-------- Query.bat --------
@echo off
REG QUERY HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\StorageDevicePolicies\ /v WriteProtect
pause
这样3个批处理与UsbWriteProtector相比,完成的功能是相同的。
哪种方案比较方便, 就见仁见智了。
相关链接:
——批处理打包下载
http://immature.googlecode.com/svn/trunk/iMmature/utility/USBWriteProtection/bin/USBWriteProtection.zipmd5:2D0F47EF59B47AD37608C59420BF910B
——批处理文件下载
http://immature.googlecode.com/svn/trunk/iMmature/utility/USBWriteProtection/bin/USBWriteProtection/——
USB_Write_Protect.en_us.pdf
http://www.cyberagentsinc.com/Forensic%20Accessories%20and%20Software/USB_Write_Protect.en_us.pdfmd5:029030B1BFDE87B6EAD58F119126EBA8
——UsbWriteProtector
http://download.pchome.net/utility/access/detail-139473.html
A7CB9977D7A4A09EE675BCA5F69138B1|usbwp.rar
B04C271A489D0CDA3D3D245526B1B30A|UsbWriteProtect.exe
http://www.greendown.cn/soft/11827.html
F48C3F57867BB3156DD4202B275D3B12|USBWriteProtector.rar
771F6332212DAA32CA11C6BC2C6D1A9E|UsbWriteProtect.exe
本
作品采用
知识共享署名-非商业性使用-相同方式共享 2.5 中国大陆许可协议进行许可。
转载请注明 :
文章作者 - OwnWaterloo
发表时间 - 2009年04月01日
原文链接 -
http://www.cppblog.com/ownwaterloo/archive/2009/04/01/write_protect_usb_devices_in_windows_xp_sp2.html
posted on 2009-04-01 18:28
OwnWaterloo 阅读(1025)
评论(0) 编辑 收藏 引用