def reconnect_parent_vhd(self, child_path, parent_path): open_params = vdisk_struct.OPEN_VIRTUAL_DISK_PARAMETERS() open_params.Version = w_const.OPEN_VIRTUAL_DISK_VERSION_2 open_params.Version2.GetInfoOnly = False handle = self._open( child_path, open_flag=w_const.OPEN_VIRTUAL_DISK_FLAG_NO_PARENTS, open_access_mask=0, open_params=ctypes.byref(open_params)) params = vdisk_struct.SET_VIRTUAL_DISK_INFO() params.Version = w_const.SET_VIRTUAL_DISK_INFO_PARENT_PATH params.ParentFilePath = parent_path self._run_and_check_output(virtdisk.SetVirtualDiskInformation, handle, ctypes.byref(params), cleanup_handle=handle)
def merge_vhd(self, vhd_path, delete_merged_image=True): """Merges a VHD/x image into the immediate next parent image.""" open_params = vdisk_struct.OPEN_VIRTUAL_DISK_PARAMETERS() open_params.Version = w_const.OPEN_VIRTUAL_DISK_VERSION_1 open_params.Version1.RWDepth = 2 handle = self._open(vhd_path, open_params=ctypes.byref(open_params)) params = vdisk_struct.MERGE_VIRTUAL_DISK_PARAMETERS() params.Version = w_const.MERGE_VIRTUAL_DISK_VERSION_1 params.Version1.MergeDepth = 1 self._run_and_check_output(virtdisk.MergeVirtualDisk, handle, 0, ctypes.byref(params), None, cleanup_handle=handle) if delete_merged_image: os.remove(vhd_path)