【问题标题】:Find volume information after attaching a virtual hard disk附加虚拟硬盘后查找卷信息
【发布时间】:2013-11-16 22:33:15
【问题描述】:

我使用 Windows 磁盘管理插件来创建、初始化和格式化一些虚拟硬盘 (VHD)。我可以轻松地手动附加和访问这些 VHD,但我无法通过 API 管理它们。

我找不到一种简单的方法来确定附加虚拟磁盘卷的驱动器号。我找到了以下approach,但它看起来很复杂。有没有更好的办法?

这是我到目前为止所拥有的……数量不多。

var
  StorageType: TVirtualStorageType;
  Path: UnicodeString;
  Handle: THandle;
begin
  StorageType.DeviceId := VIRTUAL_STORAGE_TYPE_DEVICE_VHD;
  StorageType.VendorId := VIRTUAL_STORAGE_TYPE_VENDOR_MICROSOFT;

  Path := 'C:\tmp\small-usb.vhd';

  OpenVirtualDisk(@StorageType, PWideChar(Path), VIRTUAL_DISK_ACCESS_ALL,  OPEN_VIRTUAL_DISK_FLAG_NONE, nil, @Handle);
  AttachVirtualDisk(Handle, nil, ATTACH_VIRTUAL_DISK_FLAG_NONE, 0, nil, nil);
  // volume is visible in windows explorer at this point but   
  // I don't know the drive letter
end

【问题讨论】:

    标签: windows winapi vhd


    【解决方案1】:

    我不知道这是否是最好的方法,但您可以使用GetVirtualDiskPhysicalPath 以“\\.\PhysicalDriveX”格式获取挂载的 VHD 的路径。使用该路径,您可以查询获取磁盘包含的卷的磁盘对象(不要忘记,VHD 可以有多个分区和卷,就像物理硬盘一样),然后获取分配的安装点列表(不一定是驱动器盘符 - VHD 可以安装在 NTFS 安装点)。

    我不熟悉您在提供的示例中使用的语言。是德尔福吗?

    【讨论】:

    • 是的,这就是德尔福。你知道我用来从物理路径获取卷的函数的名称吗?
    • 对Delphi不太熟悉,但确实遇到过这个函数function GetHDDDevicesWithDOSPath。检查此SO Question 看看是否有帮助
    猜你喜欢
    • 2013-07-15
    • 1970-01-01
    • 2013-12-19
    • 2021-10-09
    • 2012-10-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-01
    相关资源
    最近更新 更多