You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Windows下从挂载盘符获取虚拟磁盘镜像文件路径的技术咨询

获取已挂载卷对应的镜像文件路径(ISO/VHD等)

你已经通过StorageAdapterProperty判断出当前卷属于文件备份虚拟总线类型,接下来可以通过以下步骤获取镜像文件路径:

步骤1:从卷句柄获取关联的物理磁盘信息

使用IOCTL_VOLUME_GET_VOLUME_DISK_EXTENTS控制码,获取卷所在的物理磁盘编号,从而构造磁盘设备路径:

VOLUME_DISK_EXTENTS diskExtents = {0};
DWORD bytesReturned = 0;
if (DeviceIoControl(hVolume, IOCTL_VOLUME_GET_VOLUME_DISK_EXTENTS,
    nullptr, 0, &diskExtents, sizeof(diskExtents), &bytesReturned, nullptr))
{
    // 构造磁盘设备路径,比如 \\.\PhysicalDrive0
    wchar_t diskPath[64];
    swprintf_s(diskPath, L"\\\\.\\PhysicalDrive%u", diskExtents.Extents[0].DiskNumber);

    // 打开磁盘句柄
    HANDLE hDisk = CreateFileW(diskPath, 0, FILE_SHARE_READ | FILE_SHARE_WRITE,
        nullptr, OPEN_EXISTING, FILE_FLAG_BACKUP_SEMANTICS, nullptr);
    if (hDisk != INVALID_HANDLE_VALUE)
    {
        // 步骤2:查询镜像文件信息
        DISK_IMAGE_INFO imageInfo = {0};
        bytesReturned = 0;
        if (DeviceIoControl(hDisk, IOCTL_DISK_GET_IMAGE_INFO,
            nullptr, 0, &imageInfo, sizeof(imageInfo), &bytesReturned, nullptr))
        {
            // imageInfo.ImagePath 就是镜像文件的路径
            wprintf(L"镜像文件路径:%s\n", imageInfo.ImagePath);
        }
        else
        {
            // 处理错误,可调用 GetLastError() 获取错误码
        }
        CloseHandle(hDisk);
    }
}
else
{
    // 处理错误,可调用 GetLastError() 获取错误码
}

关键说明

  • IOCTL_VOLUME_GET_VOLUME_DISK_EXTENTS:用于将卷映射到对应的物理磁盘,拿到磁盘编号后就能打开磁盘设备。
  • IOCTL_DISK_GET_IMAGE_INFO:专门针对虚拟磁盘镜像的控制码,返回的DISK_IMAGE_INFO结构体中的ImagePath字段直接给出镜像文件的完整路径。
  • PowerShell的Get-DiskImage命令底层也是通过调用这些Windows内核API实现的:先关联卷与磁盘,再查询磁盘的镜像属性。

注意:需要确保代码运行时有足够权限(比如管理员权限),否则可能无法打开磁盘句柄或执行设备控制命令。

内容的提问来源于stack exchange,提问作者Leo.Zhou

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.20 12:54:53