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。
如果函数失败,则返回值为错误代码。 有关详细信息,请参阅 系统错误代码。
注解
合并磁盘需要在操作期间分离受影响的磁盘。
调用方必须具有 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 |