Windows Tools

来自osdev
跳到导航 跳到搜索

Windows为使用Loopback devices和操作文件的操作系统开发人员提供了一些应该都知道的有用实用程序; 可惜大多数时候,他们并不知道这一点,因此去下载工具为他们提供他们已经拥有的功能。 本文试图描述Windows实用程序以及如何使用它们。

注: 只要在示例中看到驱动器号后跟分号,请记住,你也可以改为指定GUID。

copy

除了其明显的用途外,“复制” 实用程序对于连接文件也很有用; 例如,在生成磁盘映像时,这可能会派上用场。 为了说明这一点,假设我们想从文件“foo”和“bar”生成一个名为“foobar”的文件; 我们将使用以下命令:

copy /b foo+bar foobar

/b 开关表示我们处理的是二进制文件而不是ASCII。 我们需要指定它,因为这是组合文件时的默认行为。

diskcomp

diskcomp工具可用于比较两张软盘的所有磁道。示例:

diskcomp A: B:
  • 如果仅指定一个驱动器,则将其与当前驱动器进行比较。
  • 如果未指定驱动器,两个软盘将使用相同的驱动器(系统将提示你更换它们)。
errorlevel值 含义
0 这两个磁盘的内容完全相同。
1 两张盘的内容不一致。
3 发生错误。
4 内存不足,无法执行比较。

diskcopy

DOS用户会记住复制卷的diskcopy。 它仅适用于可移动介质,例如存储卡和软盘。 介质类型必须相同,操作才能正常进行。 例如,如果我们有两个软盘驱动器A:和B:,我们可以将A:的映像复制到B:,如下所示:

diskcopy A: B:
  • 如果未指定目标驱动器,则将使用当前驱动器。 此外,/v参数可用于验证(请记住,软盘并不完全可靠)。
  • 如果两个驱动器都被省略,在读取第一个介质后,系统将提示你更换介质。

diskpart

扩展文章: Windows Loopback Alternative

diskpart实用程序对于管理分区和虚拟硬盘非常有用,可以将其用作环回设备。 如果你想要其他类型的环回设备,你可能需要考虑将虚拟软盘驱动器(VFD-Virtual Floppy Drive)用于软驱,将Daemon Tools用于光盘。

该工具使用的文件格式称为VHD (Virtual Hard Disk),可以与几个模拟器/虚拟机一起使用,包括 VirtualBoxMicrosoft Virtual PCXenVMware

这不是通用的命令行实用程序: 你可以从命令提示符运行它,然后查询命令。

为了创建大小为10 MiB的VHD映像,可以使用以下命令:

create vdisk file="C:\foo.vhd" maximum=10 type=expandable

有几件事值得注意:

  • 该实用程序希望你指定完整路径。
  • 如果省略maximum参数,则默认大小设置为24GiB。 当存在时,需要有效的硬盘大小。
  • 如果未指定类型,则默认设置为“fixed”。 可扩展映像的大小会根据需要增加,而固定的映像则不会。
  • 可以使用 source="bar.vhd" 参数来初始化“bar.vhd”新图像的内容。

大多数操作都需要事先将焦点转移到虚拟磁盘上。 创建VHD会自动将焦点转移到该VHD上,但在处理多个映像时,select命令非常有用:

select vdisk file="C:\foo.vhd"

尽管可扩展映像的尺寸不断增大,但它们也不会自动减小尺寸。 要手动减小所选虚拟磁盘的大小,请执行以下操作:

compact vdisk

以下是如何将所选VHD的最大大小更改为20 MiB的示例:

expand vdisk maximum=20

以下附加选定的VHD (类似于插入HDD):

attach vdisk
  • 可以使用readonly参数;其目的就是使映像只读。

连接虚拟磁盘后,你需要为其创建一个分区,然后挂载它(即,为其分配一个盘符):

create partition primary
assign letter=E

最后,以下步骤将卸载并分离选定的VHD:

remove letter=E
detach vdisk

fsutil

fsutil实用程序可用于执行各种NTFSFAT操作,包括文件操作。 其中,以下内容对操作系统开发人员很有用:

子命令 参数 描述
8dot3name query 这可用于确定卷(很可能是环回设备)是否配置为使用8.3文件命名方案。例子:
fsutil 8dot3name query C:

如果未指定卷,则显示所有卷的信息。

set 此选项可以将一个或所有卷设置为(不)使用8.3文件名方案。 在按卷使用之前,必须将注册表项“HKLM\System\CurrentControlSet\Control\FileSystem\NtfsDisable8dot3NameCreationNtfsDisable8dot3NameCreationNtfsDisable8dot3NameCreation”设置为值2(如果尚未设置为真值)。 这可以通过使用以下命令来完成:
fsutil 8dot3name set 2

接下来,我们可以自由地使用各个卷:

fsutil 8dot3name set C: 0

最后一个参数的值可以是0(启用)或1(禁用)。 这有点奇怪;背后的原因可能是Microsoft为了避免混淆,决定保留这些值,它们也在类似的命令中使用。

file createnew 创建一个指定大小的空文件 (均为零),以字节为单位。示例:
fsutil createnew foobar 42
setshortname 设置文件的8.3名称(同时保留其长名称)。例子:
fsutil setshortname foobarbaz fooba~1
setvaliddata 设置文件的VDL。示例:
fsutil setvaliddata foobar 4096
setzerodata 将文件中的一个或多个字节设置为零。示例:
fsutil setzerodata foobar offset=42 length=42 foobar