posts - 16,  comments - 34,  trackbacks - 0

一、 需求

有时,我们希望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.zip
md5: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.pdf
md5: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



Creative Commons License
作品采用知识共享署名-非商业性使用-相同方式共享 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 阅读(950) 评论(0)  编辑 收藏 引用

只有注册用户登录后才能发表评论。
【推荐】超50万行VC++源码: 大型组态工控、电力仿真CAD与GIS源码库
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理


<2022年8月>
31123456
78910111213
14151617181920
21222324252627
28293031123
45678910

常用链接

留言簿(8)

随笔档案(16)

链接

搜索

  •  

积分与排名

  • 积分 - 190560
  • 排名 - 130

最新随笔

最新评论

阅读排行榜

评论排行榜