Windows 连接虚拟硬盘后查找卷信息

Windows 连接虚拟硬盘后查找卷信息,windows,winapi,vhd,Windows,Winapi,Vhd,我使用Windows磁盘管理管理单元创建、初始化和格式化一些虚拟硬盘(VHD)。我可以轻松地手动连接和访问这些VHD,但通过API管理它们时遇到了问题 我找不到一种简单的方法来确定虚拟磁盘连接后卷的驱动器号。我发现了以下内容,但它似乎很复杂。有更好的办法吗 这是我到目前为止所拥有的。。。不多 var StorageType: TVirtualStorageType; Path: UnicodeString; Handle: THandle; begin StorageType.D

我使用Windows磁盘管理管理单元创建、初始化和格式化一些虚拟硬盘(VHD)。我可以轻松地手动连接和访问这些VHD,但通过API管理它们时遇到了问题

我找不到一种简单的方法来确定虚拟磁盘连接后卷的驱动器号。我发现了以下内容,但它似乎很复杂。有更好的办法吗

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

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

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


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

是的,那是德尔福。您知道从物理路径获取卷所使用的函数的名称吗?我对Delphi不太熟悉,但确实遇到过这个函数GetHDDDevicesWithDOSPath。检查这个,看看这是否有帮助