在Windows上获取分区列表[英] Obtain a list of partitions on Windows

本文是小编为大家收集整理的关于在Windows上获取分区列表的处理方法,想解了在Windows上获取分区列表的问题怎么解决?在Windows上获取分区列表问题的解决办法?那么可以参考本文帮助大家快速定位并解决问题。

问题描述

目标

我正在将文件系统移植到Windows,并且正在为Mounterable编写更类似Windows的接口.此过程的一部分是让用户找到分区并选择驱动器字母.最终,分区的选择必须导致我可以使用CreateFile(),open(),fopen()或类似的东西打开的东西.

线索

Windows似乎围绕着卷的概念旋转,这些概念似乎与磁盘不太相似,并且仅适用于已经安装的文件系统.

有希望的线索我包括:

然而,所有这些都以卷或偏移结尾,而不是我追随的/dev/sda1分区特定风格的手柄.

这个问题是一个非常相似的事情,我考虑了一个赏金,直到我直到我观察到的OP是在物理磁盘名称之后,而不是分区. 这个答案 包含一种违反力量分区名称的方法喜欢避免这种情况(或查看包含可能路径的界限的文档).

问题

我想要:

  • 正确的Windows中未安装分区的术语和文档.
  • 一种有效且有记录的方法可靠地检索所有可用的分区.
  • Linux中可用的最接近分区文件抽象的拟合,其中所有IO都绑定到打开的分区的磁盘的适当区域.

Update0

主要目标仍在打开原始分区,但该解决方案似乎涉及首先获取每个磁盘驱动器的手柄,然后使用该手柄来获取每个分区.如何枚举所有磁盘驱动器(甚至已经没有安装量的驱动器).

推荐答案

如您所述,您可以使用 ioctl_disk_get_drive_layout_ex 获取分区列表.

有一个相关概念的很好的概述在这里.我想知道您是否缺少链接

检测磁盘的类型

没有特定功能 编程检测 磁盘特定文件或目录是 位于.有间接 方法.

首先,呼叫GetVolumePathName.然后, 致电CreateFile打开卷 使用路径.接下来,使用 IOCTL_VOLUME_GET_VOLUME_DISK_EXTENTS 用音量手柄获得 磁盘编号并使用磁盘编号为 构建磁盘路径,例如 " \?\ yearthyDrivex".最后,使用 IOCTL_DISK_GET_DRIVE_LAYOUT_EX 获取分区列表,并检查 每个条目的分区类型 分区列表.

diss管理控制代码可能有更多有用的东西.老实说,我不确定Unix分区名称如何映射到Windows上,也许不是直接.

其他推荐答案

如果您可以想象从用户空间的避风港和 windows api (( Win32)要使用NTTDK编码设备驱动程序,您可以尝试 ioreadpartitiontableExex 或其他低水平磁盘低disk disk disk 函数.

其他推荐答案

要直言不讳,可靠地安装/未数的磁盘分区的最佳方法是自己解析MBR/GPT.

首先要清除一些内容:磁盘包含分区和分区组合以创建卷.因此,您可以拥有一个由两个不同磁盘的两个分区组成的卷.

IOCTL_DISK_GET_DRIVE_LAYOUT_EX是您将在不手动执行的情况下获得的最接近的解决方案.问题在于,它依赖于窗户,而窗户可能会错误地解析MBR,因为上帝知道什么原因.我当前的工作理论是,如果Windows是通过EFI安装的,但是正在通过MBR启动,您会看到此类问题. Windows设法逃脱了,因为大多数分区经理将重要的分区信息复制到GPT并列的MBR.但这意味着您将不会获取重要信息,例如分区UUID(仅存储在GPT中).

所有其他解决方案都涉及获取与分区信息完全不同的卷信息.

侧面注意:卷ID将通常为\\.\Volume{PARTITION_UUID}.如果驱动器与MBR分区而不是GPT分区(MBR没有分区UUID,则Windows构成一个),如果您有RAID驱动器,或者您的卷由来自分区组成,则Windows组成一个)多个磁盘(与RAID相同).这些只是我想到的情况,不要把我抱在他们身上.

本文地址:https://www.itbaoku.cn/post/359027.html