我使用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
答案 0 :(得分:0)
我不知道这是否是最好的方法,但您可以使用GetVirtualDiskPhysicalPath
以“\\.\PhysicalDriveX
”格式获取已安装的VHD的路径。使用该路径,您可以查询获取磁盘包含的卷的磁盘对象(不要忘记,VHD可以有多个分区和卷,就像物理硬盘一样),然后获取分配的挂载点列表(不一定是驱动器号 - VHD可以安装在NTFS安装点)。
我不熟悉您提供的示例中使用的语言。那是德尔福吗?