MergeVirtualDisk 函数 (virtdisk.h)

将差异链中的子虚拟硬盘 (VHD) 与链中的一个或多个父虚拟磁盘合并。

语法

DWORD MergeVirtualDisk(
  [in]           HANDLE                         VirtualDiskHandle,
  [in]           MERGE_VIRTUAL_DISK_FLAG        Flags,
  [in]           PMERGE_VIRTUAL_DISK_PARAMETERS Parameters,
  [in, optional] LPOVERLAPPED                   Overlapped
);

参数

[in] VirtualDiskHandle

打开的虚拟磁盘的句柄,该句柄必须已使用 VIRTUAL_DISK_ACCESS_METAOPS 标志打开。 有关如何打开虚拟磁盘的信息,请参阅 OpenVirtualDisk 函数。

[in] Flags

必须是 MERGE_VIRTUAL_DISK_FLAG 枚举的 MERGE_VIRTUAL_DISK_FLAG_NONE 值。

[in] Parameters

指向包含合并参数数据的有效 MERGE_VIRTUAL_DISK_PARAMETERS 结构的指针。

[in, optional] Overlapped

如果需要异步操作,则为指向有效 OVERLAPPED 结构的可选指针。

返回值

请求的状态。

如果函数成功,则返回值 ERROR_SUCCESS

如果函数失败,则返回值为错误代码。 有关详细信息,请参阅 系统错误代码

注解

注意 本部分中出现的所有 术语磁盘 都指虚拟磁盘。 术语 后备存储 是指一个或多个 VHD 映像文件所在的物理磁盘存储。
 
MergeVirtualDisk 函数使用 VirtualDiskHandle 参数引用的子磁盘中的数据块更新一个或多个父磁盘中的所有数据块。 这实质上是复制操作。

合并磁盘需要在操作期间分离受影响的磁盘。

调用方必须具有 READ|对受影响磁盘的后备存储的写入访问权限。

磁盘的 RWDepth 必须大于 OPEN_VIRTUAL_DISK_PARAMETERS指定的合并深度。

合并会修改要合并到的父磁盘,因此依赖于该父磁盘的任何其他差异磁盘将不再有效。

要合并到 的父磁盘将更改为表示在执行合并的子差异磁盘中保留的相同数据。

将覆盖要合并到的父磁盘中的任何预先存在的数据。

如果合并操作中断,子磁盘仍可用。 可以重新运行 MergeVirtualDisk 函数以完成合并。

合并请求的深度是差异链中要合并的父 VHD 映像文件数。 例如,如果 MergeDepth 成员的值为 1,则指定差异磁盘中的数据块将移到其父磁盘中。 如果 MergeDepth 成员的值为 2,并且指定的差异磁盘的父磁盘也是差异磁盘 (这意味着链) 中存在第三个磁盘,则第一个和第二个磁盘中的数据块将移动到第三个磁盘 (,其中第一个磁盘的块优先于第二个磁盘) 的最后操作。

完成后,受影响的子磁盘将不再被视为有效,并且对其执行的任何未来操作都将产生不受支持的结果。 在前面的示例中,成功完成合并后,第三个磁盘有效,第一个和第二个磁盘无效。 MergeVirtualDisk 函数不会删除任何无效磁盘,也不会执行任何自动差异关系重新连接。 这必须由调用方显式完成。

如果在差异磁盘的非叶节点上执行合并操作,则调用方负责修复正在合并的磁盘子节点的父信息。

要求

   
最低受支持的客户端 Windows 7
最低受支持的服务器 Windows Server 2008 R2
目标平台 Windows
标头 virtdisk.h
Library VirtDisk.lib
DLL VirtDisk.dll

另请参阅

关于 VHD

VHD 参考