V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
YamatoRyou
V2EX  ›  分享发现

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

  •  
  •   YamatoRyou · 2019-08-04 22:17:10 +08:00 · 4643 次点击
    这是一个创建于 1971 天前的主题,其中的信息可能已经有所发展或是发生改变。
    本文所述方法适用于 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 盘只读属性的研究尚未开始.
    3 条回复    2019-08-06 13:22:04 +08:00
    elfive
        1
    elfive  
       2019-08-04 22:33:21 +08:00 via iPhone
    是个不错的思路。值得鼓励。

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

    想了一下好像移动硬盘适合这个操作,不知道日常的 USB WinPE 等工具类 U 盘能不能这么玩😄
    YamatoRyou
        2
    YamatoRyou  
    OP
       2019-08-04 22:37:55 +08:00
    @elfive
    移动硬盘可以直接使用 diskpart >> attribute volume set readonly.
    对于工具用途的 U 盘, 理论上只要是能在资源管理器或分区工具肉眼可见的分区均可.
    loginv2
        3
    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 是在硬盘的第三扇区写入了一些磁盘的扩展属性,同时会把原有第三扇区的内容清零。





    利用这个我还专门开发了一个小工具 但是因会造成莫名其妙的设备无法弹出 只能重启系统 让我很郁闷
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5430 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 32ms · UTC 08:00 · PVG 16:00 · LAX 00:00 · JFK 03:00
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.