由 DiskGenius 在创建分区时发现 "只读" 属性为线索, 引出一个为 U 盘 (或读卡器 + SD 卡) 主动设置写保护的方法.

2019-08-04 22:17:10 +08:00
 YamatoRyou
本文所述方法适用于 U 盘, 因为 Windows 内置的 diskpart 工具只能对本地存储 (也有可能是被系统识别为 "本地磁盘的介质", 如硬盘, 移动硬盘) 进行该操作.
由于 U 盘通常只有 1 个分区, 且 Windows 下只能对该介质第 1 个分区分配驱动器号. 本文不考虑第 1 个之后的分区.

该介质必须是 GPT (GUID 分区表) 形式才能继续.
此操作可能会导致数据丢失, 请勿对存有重要数据的介质进行操作.
如果你不了解本文的意义, 或对本文所述的操作没有十足的把握请勿手贱.

0. 请先完成所有数据传输任务, 包括读取; 写入; 格式化; 磁盘检查.
1. 使用 WinHex 打开该物理介质, 按 F9.
2. 确保光标指向 0x0 偏移处, 然后执行 "查看" ---> "模板管理器".
3. 选择 GUID Partition Table, 单击 "应用".
4. 找到 GUID Partition Table Entry #1, 这是第 1 个分区的信息.
5. 再找到 430 Attribute Bits, 右侧的 "00 00 00 00 00 00 00 00" 修改为 "00 00 00 00 00 00 00 10".
6. 关闭该窗口, 保存修改.
7. 按 Ctrl + S 再次保存修改.
8. 打开 DiskGenius, 在左侧选择该存储介质, 此时会弹出 "GUID 主分区表数据 CRC 错误", 单击 "更正".
9. 在窗口左上角找到并单击 "保存更改", 单击 "是".
10. 退出 DiskGenius, 拔下 U 盘并重新插入.

以上操作在本机可能不会立即生效, 但插入另一 PC 却可以生效. 附解决方法:
1. 在资源管理器中打开 U 盘第 1 个分区, 向分区内复制或新建一个大小大于 0 的任意文件.
2. 再次运行 WinHex, 按下 F9 找到并打开该介质的第 1 个分区.
3. 按下 F10, 在弹出的窗口左上角找到并选择 "更新快照", 单击 "确定".
4. 找到新建的文件, 鼠标右键单击该项目, 选择 "安全擦除".
5. 单击 "确定", 此时会提示 "无法写入移动存储介质", 单击 "中止".
6. 再次在资源管理器中打开 U 盘第 1 个分区, 右键菜单中的 "新建" 将会消失, 表示对该分区的只读设置已生效.

效果:
该分区内的文件:
只能读取;
不能修改;
不能删除分区内的现有文件;
不能修改文件的属性及安全信息 (NTFS).

该分区:
不能格式化;
不能向分区内添加文件.

该介质:
可正常读写;
删除分区;
擦除介质数据 (包括分区表信息及存储的数据)

原理:
绕过 diskpart 对移动存储介质设置只读属性的限制, 同时手工重现 diskpart 对分区设置只读属性的逻辑.

在不同系统 (Windows) 下的测试结果:
Windows 7: 不稳定, 写保护有时会失效. 但没有足够多的测试机器证实. 目前已知在一台式机和 VMware 下出现. 可能是该系统对 GPT 存储介质的支持不完善.
Windows 10: 尚未发现写保护失效的情况.
Windows XP / Vista / 8 / 8.1: 未测试.

MBR 分区表形式 U 盘只读属性的研究尚未开始.
4418 次点击
所在节点    分享发现
3 条回复
elfive
2019-08-04 22:33:21 +08:00
是个不错的思路。值得鼓励。

不过目前我主力 Nas,实现同样的目标只需要设置权限就好了。

想了一下好像移动硬盘适合这个操作,不知道日常的 USB WinPE 等工具类 U 盘能不能这么玩😄
YamatoRyou
2019-08-04 22:37:55 +08:00
@elfive
移动硬盘可以直接使用 diskpart >> attribute volume set readonly.
对于工具用途的 U 盘, 理论上只要是能在资源管理器或分区工具肉眼可见的分区均可.
loginv2
2019-08-06 13:22:04 +08:00
现在很多人也想设置移动硬盘写保护以防止病毒,其实 diskpart 命令提供了这个功能,插上移动硬盘,在 diskpart 命令行下

list vol

察看磁盘列表,假设要设写保护的磁盘的第一个分区是 5,用命令选中磁盘

select vol 5

然后设置写保护

att vol set readonly

好了,这样这个移动硬盘就写保护了,插到其他电脑上依旧写保护。另外这样操作也可以设置内置硬盘为写保护。
如果想去掉写保护,在 diskpart 下

select vol 5
att vol clear readonly

注意几点:
1、只有 2003 sp2 以上版本的 diskpart 支持这样操作(vista/win7 的 diskpart 完全支持),xp 的 diskpart 不支持。但设完后,在 xp 下写保护也是有效的。
2、如果是 GPT 分区表的磁盘,支持每个分区单独设置写保护。

3、要设置 u 盘,要用 list disk,察看磁盘,然后 select disk N 选中 u 盘,最后

att disk set readonly

设置全盘写保护,不过 u 盘插到其他机子上写保护就失效了,所以 U 盘写保护的意义就不大了


注意:diskpart 是在硬盘的第三扇区写入了一些磁盘的扩展属性,同时会把原有第三扇区的内容清零。





利用这个我还专门开发了一个小工具 但是因会造成莫名其妙的设备无法弹出 只能重启系统 让我很郁闷

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/589019

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX