简短回答:

简短回答:

我想知道在 Windows 7 的 diskpart 中可以修改的“只读”磁盘和卷属性的确切含义。我正在尝试设置一个外部 USB 驱动器作为我自己的软件的安装介质,因此我想保护它免受用户随意或无意的更改,这样他们就不会搞砸他们将来可能需要的安装文件。

根据我对 diskpart 的实验,卷的只读属性实际上存储在物理磁盘的某个位置,因为我可以设置它,当我将驱动器带到另一台机器时,它会显示出来。这很好,因为我的用户无法(轻松)更改卷上的任何文件,也无法从 Windows 资源管理器对其进行格式化。

但是,磁盘只读属性似乎只是当前计算机访问驱动器的一个方面。当我设置它时,我无法再通过磁盘管理删除磁盘中的卷,但是当我将驱动器带到另一台计算机时,该属性不再设置,并且在磁盘管理中我可以删除磁盘上的卷。我想我并不担心我的用户这样做,但我很恼火,因为我不明白这些属性到底在做什么。

我不明白的另一件事是,“卷”只读属性实际上似乎是磁盘全局的 - 如果我在磁盘上有两个卷,并且在其中一个上设置了只读标志,那么它也会在另一个上设置。?!?

我感觉我没有搜索到正确的文档 - 我找到的只是 diskpart 文档,它给出了使用这些属性的语法,而不是它们真正的含义。任何指点都非常欢迎!

谢谢,

作为一个

答案1

简短回答:

Attributes DISK [set | clear] READONLY存储属性在 Windows 注册表中,而不是物理磁盘。这意味着它仅对当前正在运行的 Windows 安装有效,并且不会在其他操作系统上执行、设置和强制执行

Attributes VOLUME [set | clear] READONLY存储属性在物理磁盘上。 这意味着它将被携带、设置和执行到其他操作系统上,包括 Linux(我必须以 rw 模式手动重新安装磁盘,而且它没有触及存储的属性,所以我必须在 Windows 中手动将其删除)。

但要小心管理访问权限:
虽然该DISK属性可以防止整个磁盘上的所有写入(即卷文件系统和分区表),该VOLUME属性阻止写入仅适用于卷文件系统,使分区表仍然可写(即您仍然可以删除只读卷)。


长答案:

属性DISK[设置 | 清除] READONLY

该属性存储在名为 的值中"Attribute",位于注册表子项HKLM\SYSTEM\CurrentControlSet\Enum\*\Disk*\Device Parameters\Partmgr,其中*是磁盘的枚举和安装的设备节点(查看“磁盘管理”中的“设备属性”)。

它是一个位掩码值,属性readonly为位#1(位#0表示在线/离线磁盘状态),因此readonly在线磁盘上的设置会将值从 更改为02但在离线磁盘上设置会将值从 更改13

优点:
磁盘是完全只读:所有写入尝试都将保证失败包括其分区表(例如删除/创建卷、更改磁盘 ID 等),而且状态将在磁盘管理中清晰可见。

缺点:
它仅对当前正在运行的 Windows 安装有效,并且其枚举设备节点相同(不保证可移动驱动器)。如果磁盘连接到另一台计算机或其设备节点由于任何原因发生变化,例如连接到另一条总线、端口或集线器(尤其是 USB),或者在设备管理器中卸载并重新安装,则磁盘将再次处于读写模式。

属性VOLUME[设置 | 清除] READONLY

该属性是物理存储在磁盘上,但差异取决于底层分区方案(MBR 或 GPT)。

GPT磁盘上:
该属性存储在卷分区表条目的“属性”字段中,并且有效仅适用于该卷(如diskpart帮助说明中所述)。

MBR磁盘上:
该属性存储在偏移量 0x400h(或 512 字节逻辑格式化磁盘上的扇区 #2)作为 GPT 条目的“短版本”,其中仅使用Type GUIDAttributes字段,总共 0x18h 字节,并且有效适用于所有卷(如diskpart帮助说明中所述)。

下面是十六进制输出示例及其结构:

   Hex Offset    0  1  2  3  4  5  6  7  8  9  A  B  C  D  E  F
   0000000400   A2 A0 D0 EB E5 B9 33 44 87 C0 68 B6 B7 26 99 C7
   0000000410   00 00 00 00 00 00 00 10
  • 0x400:128 位 GUID Type GUID,带有值EBD0A0A2-B9E5-4433-87C0-68B6B72699C7(即 Microsoft基本数据分区类型GUID);

  • 0x410:64 位整数Attributes,有值0x1000000000000000(即位#60设置)。

以同样的方式,可以设置shadowcopy(bit #61)、hidden(bits #62) 和nodefaultdriveletter(bits #63) 属性。

优点:
当磁盘连接到其他系统(例如 Linux)时,该属性会被保留,即使卷以 rw 模式(重新)安装,也会保留该属性。

缺点:
该属性在“磁盘管理”中不可见,仅在内可见diskpart,此外:

GPT磁盘上:

  • 属性仅适用于选定的卷(但这是预期的行为);
  • 它不会阻止删除只读卷(但如果删除,则属性会被自动清除,因为其关联的 GPT 条目已完全清零)。

MBR磁盘上:

  • 属性适用于磁盘上的所有卷,因为没有其他方法可以在 MBR(以及随之而来的磁盘属性结构)上设置属性;

  • 卷仍然可以被删除(据我所知,原因不明);

  • 如果删除一个或多个或所有卷,则不会清除该属性(安全清除它的唯一方法是在提示符attributes VOLUME CLEAR readonly下执行diskpart);

  • 仍然可以创建新卷,但无法格式化(因为它是写入操作)。


这是我的简单观点,但将卷属性应用于 MBR 磁盘上的所有卷的原因可能是:

  1. MBR 扇区中没有更多可用位置,因为“启动指示器”标志拒绝除 0x80 或 0x00 之外的任何值(否则启动顺序将出错)并且位于偏移量 0x1BC(444)处的“可选”字节被声明为“保留”(尽管该 16 位字段的某些位可以使用);

  2. Windows 对分区中的所有文件系统共享相同的类型 GUID,因此设置该类型 GUID 意味着“针对所有数据卷”(其他类型 GUID(例如恢复分区)将不会接收 Diskpart“卷”条目,只会接收“分区”条目)。

感谢上帝,他真的帮助我把所有的谜题碎片拼凑在一起(包括这个更好的完全重写)。

答案2

我目前正在研究卷属性,因为如果未使用官方安装程序,Vista 安装在使用 imagex 和 bcdboot 部署映像的情况下会失败。

我不知道 diskpart 将有关属性的信息保存在哪里,很可能是在磁盘上,因为(nodefaultdriveletter)在重新启动后也会应用;在启动到离线系统时也会应用。

是的,diskpart 始终将卷属性应用于所有卷在选定的磁盘上。的行为attributes volume不符合预期,并且没有记录. 发生在所有版本上,包括 Win8 的 build 9200。

只读属性只是一个提示,它不会阻止人们在磁盘上写入。

要隐藏 Windows 中的卷,请使用remove,但该信息将保存到HKLM\SYSTEM\MountedDevices(因此仅适用于当前正在运行的系统),或者您需要使用set id=,NTFS 默认 ID 为 07,请尝试 17 或 27。有一个PC 分区标识符列表,来决定你喜欢什么。FAT32 标识符是否 Windows 喜欢也识别为 NTFS,而不自动安装它们。

答案3

在 MBR 磁盘上,将任何卷设置为 RO 都会影响所有卷。Diskpart 不允许您在可移动磁盘(如可移动闪存驱动器)上设置 RO 属性,因此可移动 USB 闪存驱动器在移动到另一个系统时无法被写保护。

答案4

我一直在尝试这个,但意识到当我用属性磁盘设置只读命令设置闪存驱动器时,闪存驱动器仅在我进行该设置的那台电脑上变为只读。在其他电脑上,我仍然可以写入该特定闪存驱动器。我发现可以编辑闪存驱动器的所有权。我将每个人的条目编辑为只读,并将我的用户添加为完全控制。所以这现在对我来说有效,除非有人知道如何编辑所有权,否则这比 diskpart 属性设置更有效。

相关内容