VBoxHDD.h revision 616637905fa2f00febb1acd553136d7e56316f7c
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync/** @file
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * VBox HDD Container, Virtual Disk Image (VDI) API.
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync/*
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * Copyright (C) 2006-2007 innotek GmbH
1c94c0a63ba68be1a7b2c640e70d7a06464e4fcavboxsync *
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * This file is part of VirtualBox Open Source Edition (OSE), as
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * available from http://www.virtualbox.org. This file is free software;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * you can redistribute it and/or modify it under the terms of the GNU
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * General Public License as published by the Free Software Foundation,
a16eb14ad7a4b5ef91ddc22d3e8e92d930f736fcvboxsync * in version 2 as it comes in the "COPYING" file of the VirtualBox OSE
a16eb14ad7a4b5ef91ddc22d3e8e92d930f736fcvboxsync * distribution. VirtualBox OSE is distributed in the hope that it will
a16eb14ad7a4b5ef91ddc22d3e8e92d930f736fcvboxsync * be useful, but WITHOUT ANY WARRANTY of any kind.
a16eb14ad7a4b5ef91ddc22d3e8e92d930f736fcvboxsync *
1c94c0a63ba68be1a7b2c640e70d7a06464e4fcavboxsync * If you received this file as part of a commercial VirtualBox
1c94c0a63ba68be1a7b2c640e70d7a06464e4fcavboxsync * distribution, then only the terms of your commercial VirtualBox
1c94c0a63ba68be1a7b2c640e70d7a06464e4fcavboxsync * license agreement apply instead of the previous paragraph.
1c94c0a63ba68be1a7b2c640e70d7a06464e4fcavboxsync */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync#ifndef ___VBox_VBoxHDD_h
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync#define ___VBox_VBoxHDD_h
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync#include <VBox/cdefs.h>
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync#include <VBox/types.h>
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync#include <VBox/param.h>
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync#include <VBox/pdm.h>
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync#include <VBox/vmapi.h>
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync__BEGIN_DECLS
7e960d3a0a8a3a84d7aba2cca45d72b1c31cc97bvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync#ifdef IN_RING0
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync# error "There are no VDI APIs available in Ring-0 Host Context!"
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync#endif
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync/** @defgroup grp_vbox_hdd VBox HDD Container
61fa69e2bc9fc9e7490feed1c020273f3ddb238dvboxsync * @{
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync/** Image info, not handled anyhow.
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * Must be less than 64 bytes in length, including the trailing 0.
b74ca013e5f201a2dd371e6c438433ceac12af30vboxsync */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync#define VDI_IMAGE_FILE_INFO "<<< innotek VirtualBox Disk Image >>>\n"
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync/** Current image major version. */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync#define VDI_IMAGE_VERSION_MAJOR (0x0001)
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync/** Current image minor version. */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync#define VDI_IMAGE_VERSION_MINOR (0x0001)
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync/** Current image version. */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync#define VDI_IMAGE_VERSION ((VDI_IMAGE_VERSION_MAJOR << 16) | VDI_IMAGE_VERSION_MINOR)
223cf005b18af2c21352a70693ebaf0582f68ebcvboxsync
223cf005b18af2c21352a70693ebaf0582f68ebcvboxsync/** Get major version from combined version. */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync#define VDI_GET_VERSION_MAJOR(uVer) ((uVer) >> 16)
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync/** Get minor version from combined version. */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync#define VDI_GET_VERSION_MINOR(uVer) ((uVer) & 0xffff)
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync/** @name VDI image types
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * @{ */
afed5ab737f4aacfae3fe73776f40e989190a7cavboxsynctypedef enum VDIIMAGETYPE
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync{
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /** Normal dynamically growing base image file. */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync VDI_IMAGE_TYPE_NORMAL = 1,
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /** Preallocated base image file of a fixed size. */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync VDI_IMAGE_TYPE_FIXED,
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /** Dynamically growing image file for undo/commit changes support. */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync VDI_IMAGE_TYPE_UNDO,
0174432b2b1a760b89840ba696f7ba51def65dddvboxsync /** Dynamically growing image file for differencing support. */
2daaccf68be3773aee600c5c3e48bcf5401418a6vboxsync VDI_IMAGE_TYPE_DIFF,
0174432b2b1a760b89840ba696f7ba51def65dddvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /** First valid image type value. */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync VDI_IMAGE_TYPE_FIRST = VDI_IMAGE_TYPE_NORMAL,
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /** Last valid image type value. */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync VDI_IMAGE_TYPE_LAST = VDI_IMAGE_TYPE_DIFF
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync} VDIIMAGETYPE;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync/** Pointer to VDI image type. */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsynctypedef VDIIMAGETYPE *PVDIIMAGETYPE;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync/** @} */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync/** @name VDI image flags
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * @{ */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync/** No flags. */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync#define VDI_IMAGE_FLAGS_NONE (0x00)
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync/** Fill new blocks with zeroes while expanding image file. */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync#define VDI_IMAGE_FLAGS_ZERO_EXPAND (0x01)
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync/** Mask of valid image flags. */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync#define VDI_IMAGE_FLAGS_MASK (VDI_IMAGE_FLAGS_NONE | VDI_IMAGE_FLAGS_ZERO_EXPAND)
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync/** Default image flags. */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync#define VDI_IMAGE_FLAGS_DEFAULT (VDI_IMAGE_FLAGS_NONE)
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync/** @} */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
7e960d3a0a8a3a84d7aba2cca45d72b1c31cc97bvboxsync/** @name VDI image open mode flags
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * @{
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync/** Try to open image in read/write exclusive access mode if possible, or in read-only elsewhere. */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync#define VDI_OPEN_FLAGS_NORMAL (0)
726fc44ad0bd65a178ad4c3ab46ebd6cd3208e99vboxsync/** Open image in read-only mode with sharing access with others. */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync#define VDI_OPEN_FLAGS_READONLY (1)
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync/** Mask of valid flags. */
726fc44ad0bd65a178ad4c3ab46ebd6cd3208e99vboxsync#define VDI_OPEN_FLAGS_MASK (VDI_OPEN_FLAGS_NORMAL | VDI_OPEN_FLAGS_READONLY)
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync/** @}*/
726fc44ad0bd65a178ad4c3ab46ebd6cd3208e99vboxsync
726fc44ad0bd65a178ad4c3ab46ebd6cd3208e99vboxsync/**
726fc44ad0bd65a178ad4c3ab46ebd6cd3208e99vboxsync * VBox VDI disk Container main structure.
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync */
726fc44ad0bd65a178ad4c3ab46ebd6cd3208e99vboxsync/* Forward declaration, VDIDISK structure is visible only inside VDI module. */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsyncstruct VDIDISK;
7e960d3a0a8a3a84d7aba2cca45d72b1c31cc97bvboxsynctypedef struct VDIDISK VDIDISK;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsynctypedef VDIDISK *PVDIDISK;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
3080f6c0871099df43a4e91b31894d9c2b1369a8vboxsync/**
3080f6c0871099df43a4e91b31894d9c2b1369a8vboxsync * Creates a new base image file.
3080f6c0871099df43a4e91b31894d9c2b1369a8vboxsync *
3080f6c0871099df43a4e91b31894d9c2b1369a8vboxsync * @returns VBox status code.
3080f6c0871099df43a4e91b31894d9c2b1369a8vboxsync * @param pszFilename Name of the image file to create.
3080f6c0871099df43a4e91b31894d9c2b1369a8vboxsync * @param enmType Image type, only base image types are acceptable.
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * @param cbSize Image size in bytes.
726fc44ad0bd65a178ad4c3ab46ebd6cd3208e99vboxsync * @param pszComment Pointer to image comment. NULL is ok.
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * @param pfnProgress Progress callback. Optional. NULL if not to be used.
fdea543f71872a3ec3909536a4fce37ab7aa3a8bvboxsync * @param pvUser User argument for the progress callback.
726fc44ad0bd65a178ad4c3ab46ebd6cd3208e99vboxsync */
fdea543f71872a3ec3909536a4fce37ab7aa3a8bvboxsyncVBOXDDU_DECL(int) VDICreateBaseImage(const char *pszFilename, VDIIMAGETYPE enmType, uint64_t cbSize, const char *pszComment,
726fc44ad0bd65a178ad4c3ab46ebd6cd3208e99vboxsync PFNVMPROGRESS pfnProgress, void *pvUser);
fdea543f71872a3ec3909536a4fce37ab7aa3a8bvboxsync
726fc44ad0bd65a178ad4c3ab46ebd6cd3208e99vboxsync/**
fdea543f71872a3ec3909536a4fce37ab7aa3a8bvboxsync * Creates a differencing dynamically growing image file for specified parent image.
726fc44ad0bd65a178ad4c3ab46ebd6cd3208e99vboxsync *
8f7bc6ad2b7bbcb4b3b96248cd2478e45f2e3b88vboxsync * @returns VBox status code.
726fc44ad0bd65a178ad4c3ab46ebd6cd3208e99vboxsync * @param pszFilename Name of the differencing image file to create.
3080f6c0871099df43a4e91b31894d9c2b1369a8vboxsync * @param pszParent Name of the parent image file. May be base or diff image type.
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * @param pszComment Pointer to image comment. NULL is ok.
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * @param pfnProgress Progress callback. Optional. NULL if not to be used.
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * @param pvUser User argument for the progress callback.
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync */
50df3da42ff6589b0ecc4f50f2288811bc370186vboxsyncVBOXDDU_DECL(int) VDICreateDifferenceImage(const char *pszFilename, const char *pszParent, const char *pszComment,
50df3da42ff6589b0ecc4f50f2288811bc370186vboxsync PFNVMPROGRESS pfnProgress, void *pvUser);
50df3da42ff6589b0ecc4f50f2288811bc370186vboxsync
50df3da42ff6589b0ecc4f50f2288811bc370186vboxsync/**
50df3da42ff6589b0ecc4f50f2288811bc370186vboxsync * Checks if image is available and not broken, returns some useful image parameters if requested.
3080f6c0871099df43a4e91b31894d9c2b1369a8vboxsync *
3080f6c0871099df43a4e91b31894d9c2b1369a8vboxsync * @returns VBox status code.
3080f6c0871099df43a4e91b31894d9c2b1369a8vboxsync * @param pszFilename Name of the image file to check.
3080f6c0871099df43a4e91b31894d9c2b1369a8vboxsync * @param puVersion Where to store the version of image. NULL is ok.
3080f6c0871099df43a4e91b31894d9c2b1369a8vboxsync * @param penmType Where to store the type of image. NULL is ok.
3080f6c0871099df43a4e91b31894d9c2b1369a8vboxsync * @param pcbSize Where to store the size of image in bytes. NULL is ok.
3080f6c0871099df43a4e91b31894d9c2b1369a8vboxsync * @param pUuid Where to store the uuid of image creation. NULL is ok.
3080f6c0871099df43a4e91b31894d9c2b1369a8vboxsync * @param pParentUuid Where to store the uuid of the parent image (if any). NULL is ok.
3080f6c0871099df43a4e91b31894d9c2b1369a8vboxsync * @param pszComment Where to store the comment string of image. NULL is ok.
3080f6c0871099df43a4e91b31894d9c2b1369a8vboxsync * @param cbComment The size of pszComment buffer. 0 is ok.
3080f6c0871099df43a4e91b31894d9c2b1369a8vboxsync */
50df3da42ff6589b0ecc4f50f2288811bc370186vboxsyncVBOXDDU_DECL(int) VDICheckImage(const char *pszFilename,
726fc44ad0bd65a178ad4c3ab46ebd6cd3208e99vboxsync unsigned *puVersion,
50df3da42ff6589b0ecc4f50f2288811bc370186vboxsync PVDIIMAGETYPE penmType,
50df3da42ff6589b0ecc4f50f2288811bc370186vboxsync uint64_t *pcbSize,
726fc44ad0bd65a178ad4c3ab46ebd6cd3208e99vboxsync PRTUUID pUuid,
50df3da42ff6589b0ecc4f50f2288811bc370186vboxsync PRTUUID pParentUuid,
50df3da42ff6589b0ecc4f50f2288811bc370186vboxsync char *pszComment,
726fc44ad0bd65a178ad4c3ab46ebd6cd3208e99vboxsync unsigned cbComment);
50df3da42ff6589b0ecc4f50f2288811bc370186vboxsync
50df3da42ff6589b0ecc4f50f2288811bc370186vboxsync/**
726fc44ad0bd65a178ad4c3ab46ebd6cd3208e99vboxsync * Changes an image's comment string.
50df3da42ff6589b0ecc4f50f2288811bc370186vboxsync *
50df3da42ff6589b0ecc4f50f2288811bc370186vboxsync * @returns VBox status code.
726fc44ad0bd65a178ad4c3ab46ebd6cd3208e99vboxsync * @param pszFilename Name of the image file to operate on.
50df3da42ff6589b0ecc4f50f2288811bc370186vboxsync * @param pszComment New comment string (UTF-8). NULL is allowed to reset the comment.
50df3da42ff6589b0ecc4f50f2288811bc370186vboxsync */
726fc44ad0bd65a178ad4c3ab46ebd6cd3208e99vboxsyncVBOXDDU_DECL(int) VDISetImageComment(const char *pszFilename, const char *pszComment);
50df3da42ff6589b0ecc4f50f2288811bc370186vboxsync
26824086a3f6b36cd911058f1d9b4c0b944706fbvboxsync/**
26824086a3f6b36cd911058f1d9b4c0b944706fbvboxsync * Deletes a valid image file. Fails if specified file is not an image.
26824086a3f6b36cd911058f1d9b4c0b944706fbvboxsync *
68ef804c4ec232c58e2c03c8fc6afe3765c5c0d1vboxsync * @returns VBox status code.
68ef804c4ec232c58e2c03c8fc6afe3765c5c0d1vboxsync * @param pszFilename Name of the image file to check.
68ef804c4ec232c58e2c03c8fc6afe3765c5c0d1vboxsync */
3080f6c0871099df43a4e91b31894d9c2b1369a8vboxsyncVBOXDDU_DECL(int) VDIDeleteImage(const char *pszFilename);
50df3da42ff6589b0ecc4f50f2288811bc370186vboxsync
50df3da42ff6589b0ecc4f50f2288811bc370186vboxsync/**
50df3da42ff6589b0ecc4f50f2288811bc370186vboxsync * Makes a copy of image file with a new (other) creation uuid.
50df3da42ff6589b0ecc4f50f2288811bc370186vboxsync *
26824086a3f6b36cd911058f1d9b4c0b944706fbvboxsync * @returns VBox status code.
26824086a3f6b36cd911058f1d9b4c0b944706fbvboxsync * @param pszDstFilename Name of the image file to create.
50df3da42ff6589b0ecc4f50f2288811bc370186vboxsync * @param pszSrcFilename Name of the image file to copy from.
b8aaccdbdd143967110d499670605dd7ff6ecc72vboxsync * @param pszComment Pointer to image comment. If NULL, the comment
50df3da42ff6589b0ecc4f50f2288811bc370186vboxsync * will be copied from the source image.
50df3da42ff6589b0ecc4f50f2288811bc370186vboxsync * @param pfnProgress Progress callback. Optional. NULL if not to be used.
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * @param pvUser User argument for the progress callback.
7e960d3a0a8a3a84d7aba2cca45d72b1c31cc97bvboxsync */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsyncVBOXDDU_DECL(int) VDICopyImage(const char *pszDstFilename, const char *pszSrcFilename, const char *pszComment,
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync PFNVMPROGRESS pfnProgress, void *pvUser);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync/**
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * Converts image file from older VDI formats to current one.
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync *
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * @returns VBox status code.
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * @param pszFilename Name of the image file to convert.
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * @param pfnProgress Progress callback. Optional. NULL if not to be used.
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * @param pvUser User argument for the progress callback.
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsyncVBOXDDU_DECL(int) VDIConvertImage(const char *pszFilename, PFNVMPROGRESS pfnProgress, void *pvUser);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync/**
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * Shrinks growing image file by removing zeroed data blocks.
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync *
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * @returns VBox status code.
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * @param pszFilename Name of the image file to shrink.
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * @param pfnProgress Progress callback. Optional. NULL if not to be used.
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * @param pvUser User argument for the progress callback.
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsyncVBOXDDU_DECL(int) VDIShrinkImage(const char *pszFilename, PFNVMPROGRESS pfnProgress, void *pvUser);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync/**
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * Queries the image's UUID and parent UUIDs.
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync *
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * @returns VBox status code.
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * @param pszFilename Name of the image file to operate on.
b1c3cdef473df2fbc621d5da81acc82dbfb8a11avboxsync * @param pUuid Where to store image UUID (can be NULL).
a11c569636fa6838bd423f4631a9660a5a84204bvboxsync * @param pModificationUuid Where to store modification UUID (can be NULL).
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * @param pParentUuuid Where to store parent UUID (can be NULL).
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * @param pParentModificationUuid Where to store parent modification UUID (can be NULL).
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsyncVBOXDDU_DECL(int) VDIGetImageUUIDs(const char *pszFilename,
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync PRTUUID pUuid, PRTUUID pModificationUuid,
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync PRTUUID pParentUuid, PRTUUID pParentModificationUuid);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync/**
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * Changes the image's UUID and parent UUIDs.
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync *
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * @returns VBox status code.
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * @param pszFilename Name of the image file to operate on.
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * @param pUuid Optional parameter, new UUID of the image.
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * @param pModificationUuid Optional parameter, new modification UUID of the image.
3ecf9412133496b2aeb090cfd33a286404ec59fbvboxsync * @param pParentUuuid Optional parameter, new parent UUID of the image.
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * @param pParentModificationUuid Optional parameter, new parent modification UUID of the image.
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsyncVBOXDDU_DECL(int) VDISetImageUUIDs(const char *pszFilename,
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync PCRTUUID pUuid, PCRTUUID pModificationUuid,
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync PCRTUUID pParentUuid, PCRTUUID pParentModificationUuid);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync/**
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * Merges two images having a parent/child relationship (both directions).
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync *
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * @returns VBox status code.
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * @param pszFilenameFrom Name of the image file to merge from.
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * @param pszFilenameTo Name of the image file to merge into.
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * @param pfnProgress Progress callback. Optional. NULL if not to be used.
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * @param pvUser User argument for the progress callback.
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsyncVBOXDDU_DECL(int) VDIMergeImage(const char *pszFilenameFrom, const char *pszFilenameTo,
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync PFNVMPROGRESS pfnProgress, void *pvUser);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync/**
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * Allocates and initializes an empty VDI HDD container.
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * No image files are opened.
aaeb2e2f6ed5b164f1dec9a16a7adeb84f64cf31vboxsync *
223cf005b18af2c21352a70693ebaf0582f68ebcvboxsync * @returns Pointer to newly created empty HDD container.
b74ca013e5f201a2dd371e6c438433ceac12af30vboxsync * @returns NULL on failure, typically out of memory.
b74ca013e5f201a2dd371e6c438433ceac12af30vboxsync */
b74ca013e5f201a2dd371e6c438433ceac12af30vboxsyncVBOXDDU_DECL(PVDIDISK) VDIDiskCreate(void);
b74ca013e5f201a2dd371e6c438433ceac12af30vboxsync
b74ca013e5f201a2dd371e6c438433ceac12af30vboxsync/**
b74ca013e5f201a2dd371e6c438433ceac12af30vboxsync * Destroys the VDI HDD container. If container has opened image files they will be closed.
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync *
b74ca013e5f201a2dd371e6c438433ceac12af30vboxsync * @param pDisk Pointer to VDI HDD container.
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync */
7e960d3a0a8a3a84d7aba2cca45d72b1c31cc97bvboxsyncVBOXDDU_DECL(void) VDIDiskDestroy(PVDIDISK pDisk);
b74ca013e5f201a2dd371e6c438433ceac12af30vboxsync
b74ca013e5f201a2dd371e6c438433ceac12af30vboxsync/**
b74ca013e5f201a2dd371e6c438433ceac12af30vboxsync * Opens an image file.
b74ca013e5f201a2dd371e6c438433ceac12af30vboxsync *
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * The first opened image file in a HDD container must have a base image type,
b74ca013e5f201a2dd371e6c438433ceac12af30vboxsync * others (next opened images) must be a differencing or undo images.
b74ca013e5f201a2dd371e6c438433ceac12af30vboxsync * Linkage is checked for differencing image to be in consistence with the previously opened image.
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * When a next differencing image is opened and the last image was opened in read/write access
b74ca013e5f201a2dd371e6c438433ceac12af30vboxsync * mode, then the last image is reopened in read-only with deny write sharing mode. This allows
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * other processes to use images in read-only mode too.
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync *
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * Note that the image can be opened in read-only mode if a read/write open is not possible.
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * Use VDIDiskIsReadOnly to check open mode.
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync *
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * @returns VBox status code.
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * @param pDisk Pointer to VDI HDD container.
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * @param pszFilename Name of the image file to open.
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * @param fOpen Image file open mode, see VDI_OPEN_FLAGS_* constants.
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsyncVBOXDDU_DECL(int) VDIDiskOpenImage(PVDIDISK pDisk, const char *pszFilename, unsigned fOpen);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync/**
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * Creates and opens a new differencing image file in HDD container.
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * See comments for VDIDiskOpenImage function about differencing images.
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync *
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * @returns VBox status code.
e3058907e95856baada756f4bc59dafc1ce6c6b4vboxsync * @param pDisk Pointer to VDI HDD container.
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * @param pszFilename Name of the image file to create and open.
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * @param pszComment Pointer to image comment. NULL is ok.
e08de24d4792d31b7f2aac29db5cb8840d940009vboxsync * @param pfnProgress Progress callback. Optional. NULL if not to be used.
9782b553bdb12385214a3ac596aff1476bcb7cbdvboxsync * @param pvUser User argument for the progress callback.
8a132edc1577cbe2a19cd778c1b2bea6ae5e8515vboxsync */
b1c3cdef473df2fbc621d5da81acc82dbfb8a11avboxsyncVBOXDDU_DECL(int) VDIDiskCreateOpenDifferenceImage(PVDIDISK pDisk, const char *pszFilename, const char *pszComment,
8a132edc1577cbe2a19cd778c1b2bea6ae5e8515vboxsync PFNVMPROGRESS pfnProgress, void *pvUser);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync/**
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * Closes the last opened image file in the HDD container. Leaves all changes inside it.
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * If previous image file was opened in read-only mode (that is normal) and closing image
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * was opened in read-write mode (the whole disk was in read-write mode) - the previous image
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * will be reopened in read/write mode.
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync *
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * @param pDisk Pointer to VDI HDD container.
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync */
f9147fe1eaa4e35287f8f39282c7f92f0d7de0b7vboxsyncVBOXDDU_DECL(void) VDIDiskCloseImage(PVDIDISK pDisk);
585f64d6f624f9e683321dabeb21b0eb2e6aa473vboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync/**
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * Closes all opened image files in HDD container.
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync *
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * @param pDisk Pointer to VDI HDD container.
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsyncVBOXDDU_DECL(void) VDIDiskCloseAllImages(PVDIDISK pDisk);
da936e0446fb2b56b813d5d938f1dfc6e4bf8b13vboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync/**
247b55faa8d054157f2481e68caca36f4dc9542cvboxsync * Commits last opened differencing/undo image file of the HDD container to previous image.
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * If the previous image file was opened in read-only mode (that must be always so) it is reopened
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * as read/write to do commit operation.
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * After successfull commit the previous image file again reopened in read-only mode, last opened
b74ca013e5f201a2dd371e6c438433ceac12af30vboxsync * image file is cleared of data and remains open and active in HDD container.
b74ca013e5f201a2dd371e6c438433ceac12af30vboxsync * If you want to delete image after commit you must do it manually by VDIDiskCloseImage and
b74ca013e5f201a2dd371e6c438433ceac12af30vboxsync * VDIDeleteImage calls.
b74ca013e5f201a2dd371e6c438433ceac12af30vboxsync *
b74ca013e5f201a2dd371e6c438433ceac12af30vboxsync * Note that in case of unrecoverable error all images of HDD container will be closed.
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync *
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * @returns VBox status code.
b74ca013e5f201a2dd371e6c438433ceac12af30vboxsync * @param pDisk Pointer to VDI HDD container.
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * @param pfnProgress Progress callback. Optional.
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * @param pvUser User argument for the progress callback.
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsyncVBOXDDU_DECL(int) VDIDiskCommitLastDiff(PVDIDISK pDisk, PFNVMPROGRESS pfnProgress, void *pvUser);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync/**
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * Get read/write mode of VDI HDD.
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync *
533ffcb943c4af2c5fe6385d816d0ba3eda9383bvboxsync * @returns Disk ReadOnly status.
da936e0446fb2b56b813d5d938f1dfc6e4bf8b13vboxsync * @returns true if no one VDI image is opened in HDD container.
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsyncVBOXDDU_DECL(bool) VDIDiskIsReadOnly(PVDIDISK pDisk);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
247b55faa8d054157f2481e68caca36f4dc9542cvboxsync/**
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * Get total disk size of the VDI HDD container.
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync *
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * @returns Virtual disk size in bytes.
b74ca013e5f201a2dd371e6c438433ceac12af30vboxsync * @returns 0 if no one VDI image is opened in HDD container.
b74ca013e5f201a2dd371e6c438433ceac12af30vboxsync */
b74ca013e5f201a2dd371e6c438433ceac12af30vboxsyncVBOXDDU_DECL(uint64_t) VDIDiskGetSize(PVDIDISK pDisk);
b74ca013e5f201a2dd371e6c438433ceac12af30vboxsync
b74ca013e5f201a2dd371e6c438433ceac12af30vboxsync/**
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * Get block size of the VDI HDD container.
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync *
b74ca013e5f201a2dd371e6c438433ceac12af30vboxsync * @returns VDI image block size in bytes.
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * @returns 0 if no one VDI image is opened in HDD container.
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsyncVBOXDDU_DECL(unsigned) VDIDiskGetBlockSize(PVDIDISK pDisk);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync/**
533ffcb943c4af2c5fe6385d816d0ba3eda9383bvboxsync * Get working buffer size of the VDI HDD container.
533ffcb943c4af2c5fe6385d816d0ba3eda9383bvboxsync *
533ffcb943c4af2c5fe6385d816d0ba3eda9383bvboxsync * @returns Working buffer size in bytes.
00599f6d39cc25ca39845c2433cd75de7b9f6971vboxsync */
00599f6d39cc25ca39845c2433cd75de7b9f6971vboxsyncVBOXDDU_DECL(unsigned) VDIDiskGetBufferSize(PVDIDISK pDisk);
00599f6d39cc25ca39845c2433cd75de7b9f6971vboxsync
00599f6d39cc25ca39845c2433cd75de7b9f6971vboxsync/**
533ffcb943c4af2c5fe6385d816d0ba3eda9383bvboxsync * Get virtual disk geometry stored in image file.
533ffcb943c4af2c5fe6385d816d0ba3eda9383bvboxsync *
533ffcb943c4af2c5fe6385d816d0ba3eda9383bvboxsync * @returns VBox status code.
533ffcb943c4af2c5fe6385d816d0ba3eda9383bvboxsync * @returns VERR_VDI_NOT_OPENED if no one VDI image is opened in HDD container.
533ffcb943c4af2c5fe6385d816d0ba3eda9383bvboxsync * @returns VERR_VDI_GEOMETRY_NOT_SET if no geometry present in the HDD container.
00599f6d39cc25ca39845c2433cd75de7b9f6971vboxsync * @param pDisk Pointer to VDI HDD container.
a482c5e397b4affc3198e2febb41754ccbe4ea29vboxsync * @param pcCylinders Where to store the number of cylinders. NULL is ok.
00599f6d39cc25ca39845c2433cd75de7b9f6971vboxsync * @param pcHeads Where to store the number of heads. NULL is ok.
533ffcb943c4af2c5fe6385d816d0ba3eda9383bvboxsync * @param pcSectors Where to store the number of sectors. NULL is ok.
1843553dbdf4e46417158b4c6348c503adf10740vboxsync */
533ffcb943c4af2c5fe6385d816d0ba3eda9383bvboxsyncVBOXDDU_DECL(int) VDIDiskGetGeometry(PVDIDISK pDisk, unsigned *pcCylinders, unsigned *pcHeads, unsigned *pcSectors);
13ba5527caaa9b8c4fee29f22e374fa67c4c6f72vboxsync
1843553dbdf4e46417158b4c6348c503adf10740vboxsync/**
1843553dbdf4e46417158b4c6348c503adf10740vboxsync * Store virtual disk geometry into base image file of HDD container.
1843553dbdf4e46417158b4c6348c503adf10740vboxsync *
1843553dbdf4e46417158b4c6348c503adf10740vboxsync * Note that in case of unrecoverable error all images of HDD container will be closed.
1843553dbdf4e46417158b4c6348c503adf10740vboxsync *
806d0b554daa555364af5f87bc96eccbe760db7avboxsync * @returns VBox status code.
1843553dbdf4e46417158b4c6348c503adf10740vboxsync * @returns VERR_VDI_NOT_OPENED if no one VDI image is opened in HDD container.
1843553dbdf4e46417158b4c6348c503adf10740vboxsync * @param pDisk Pointer to VDI HDD container.
13ba5527caaa9b8c4fee29f22e374fa67c4c6f72vboxsync * @param cCylinders Number of cylinders.
1843553dbdf4e46417158b4c6348c503adf10740vboxsync * @param cHeads Number of heads.
1843553dbdf4e46417158b4c6348c503adf10740vboxsync * @param cSectors Number of sectors.
1843553dbdf4e46417158b4c6348c503adf10740vboxsync */
1843553dbdf4e46417158b4c6348c503adf10740vboxsyncVBOXDDU_DECL(int) VDIDiskSetGeometry(PVDIDISK pDisk, unsigned cCylinders, unsigned cHeads, unsigned cSectors);
1843553dbdf4e46417158b4c6348c503adf10740vboxsync
1843553dbdf4e46417158b4c6348c503adf10740vboxsync/**
1843553dbdf4e46417158b4c6348c503adf10740vboxsync * Get virtual disk translation mode stored in image file.
1843553dbdf4e46417158b4c6348c503adf10740vboxsync *
1843553dbdf4e46417158b4c6348c503adf10740vboxsync * @returns VBox status code.
ebbb1f6c7e8bae363a4efda4b35b58c8467d24bcvboxsync * @returns VERR_VDI_NOT_OPENED if no one VDI image is opened in HDD container.
1843553dbdf4e46417158b4c6348c503adf10740vboxsync * @param pDisk Pointer to VDI HDD container.
1843553dbdf4e46417158b4c6348c503adf10740vboxsync * @param penmTranslation Where to store the translation mode (see pdm.h).
1843553dbdf4e46417158b4c6348c503adf10740vboxsync */
1843553dbdf4e46417158b4c6348c503adf10740vboxsyncVBOXDDU_DECL(int) VDIDiskGetTranslation(PVDIDISK pDisk, PPDMBIOSTRANSLATION penmTranslation);
533ffcb943c4af2c5fe6385d816d0ba3eda9383bvboxsync
1843553dbdf4e46417158b4c6348c503adf10740vboxsync/**
1843553dbdf4e46417158b4c6348c503adf10740vboxsync * Store virtual disk translation mode into base image file of HDD container.
ebbb1f6c7e8bae363a4efda4b35b58c8467d24bcvboxsync *
13ba5527caaa9b8c4fee29f22e374fa67c4c6f72vboxsync * Note that in case of unrecoverable error all images of HDD container will be closed.
1843553dbdf4e46417158b4c6348c503adf10740vboxsync *
1843553dbdf4e46417158b4c6348c503adf10740vboxsync * @returns VBox status code.
1843553dbdf4e46417158b4c6348c503adf10740vboxsync * @returns VERR_VDI_NOT_OPENED if no one VDI image is opened in HDD container.
1843553dbdf4e46417158b4c6348c503adf10740vboxsync * @param pDisk Pointer to VDI HDD container.
1843553dbdf4e46417158b4c6348c503adf10740vboxsync * @param enmTranslation Translation mode (see pdm.h).
806d0b554daa555364af5f87bc96eccbe760db7avboxsync */
1843553dbdf4e46417158b4c6348c503adf10740vboxsyncVBOXDDU_DECL(int) VDIDiskSetTranslation(PVDIDISK pDisk, PDMBIOSTRANSLATION enmTranslation);
1843553dbdf4e46417158b4c6348c503adf10740vboxsync
13ba5527caaa9b8c4fee29f22e374fa67c4c6f72vboxsync/**
1843553dbdf4e46417158b4c6348c503adf10740vboxsync * Get number of opened images in HDD container.
1843553dbdf4e46417158b4c6348c503adf10740vboxsync *
1843553dbdf4e46417158b4c6348c503adf10740vboxsync * @returns Number of opened images for HDD container. 0 if no images has been opened.
1843553dbdf4e46417158b4c6348c503adf10740vboxsync * @param pDisk Pointer to VDI HDD container.
1843553dbdf4e46417158b4c6348c503adf10740vboxsync */
1843553dbdf4e46417158b4c6348c503adf10740vboxsyncVBOXDDU_DECL(int) VDIDiskGetImagesCount(PVDIDISK pDisk);
1843553dbdf4e46417158b4c6348c503adf10740vboxsync
1843553dbdf4e46417158b4c6348c503adf10740vboxsync/**
1843553dbdf4e46417158b4c6348c503adf10740vboxsync * Get version of opened image of HDD container.
ebbb1f6c7e8bae363a4efda4b35b58c8467d24bcvboxsync *
533ffcb943c4af2c5fe6385d816d0ba3eda9383bvboxsync * @returns VBox status code.
533ffcb943c4af2c5fe6385d816d0ba3eda9383bvboxsync * @returns VERR_VDI_IMAGE_NOT_FOUND if image with specified number was not opened.
533ffcb943c4af2c5fe6385d816d0ba3eda9383bvboxsync * @param pDisk Pointer to VDI HDD container.
533ffcb943c4af2c5fe6385d816d0ba3eda9383bvboxsync * @param nImage Image number, counts from 0. 0 is always base image of container.
533ffcb943c4af2c5fe6385d816d0ba3eda9383bvboxsync * @param puVersion Where to store the image version.
533ffcb943c4af2c5fe6385d816d0ba3eda9383bvboxsync */
533ffcb943c4af2c5fe6385d816d0ba3eda9383bvboxsyncVBOXDDU_DECL(int) VDIDiskGetImageVersion(PVDIDISK pDisk, int nImage, unsigned *puVersion);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync/**
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * Get type of opened image of HDD container.
da936e0446fb2b56b813d5d938f1dfc6e4bf8b13vboxsync *
e52f819639386db020b2a635b47a415248c7fbf9vboxsync * @returns VBox status code.
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * @returns VERR_VDI_IMAGE_NOT_FOUND if image with specified number was not opened.
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * @param pDisk Pointer to VDI HDD container.
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * @param nImage Image number, counts from 0. 0 is always base image of container.
b74ca013e5f201a2dd371e6c438433ceac12af30vboxsync * @param penmType Where to store the image type.
b74ca013e5f201a2dd371e6c438433ceac12af30vboxsync */
b74ca013e5f201a2dd371e6c438433ceac12af30vboxsyncVBOXDDU_DECL(int) VDIDiskGetImageType(PVDIDISK pDisk, int nImage, PVDIIMAGETYPE penmType);
b74ca013e5f201a2dd371e6c438433ceac12af30vboxsync
b74ca013e5f201a2dd371e6c438433ceac12af30vboxsync/**
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * Get flags of opened image of HDD container.
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync *
b74ca013e5f201a2dd371e6c438433ceac12af30vboxsync * @returns VBox status code.
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * @returns VERR_VDI_IMAGE_NOT_FOUND if image with specified number was not opened.
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * @param pDisk Pointer to VDI HDD container.
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * @param nImage Image number, counts from 0. 0 is always base image of container.
0e77737b0ba913683e614db11463b31ca67aacbevboxsync * @param pfFlags Where to store the image flags.
0e77737b0ba913683e614db11463b31ca67aacbevboxsync */
0e77737b0ba913683e614db11463b31ca67aacbevboxsyncVBOXDDU_DECL(int) VDIDiskGetImageFlags(PVDIDISK pDisk, int nImage, unsigned *pfFlags);
0e77737b0ba913683e614db11463b31ca67aacbevboxsync
e08de24d4792d31b7f2aac29db5cb8840d940009vboxsync/**
0e77737b0ba913683e614db11463b31ca67aacbevboxsync * Get filename of opened image of HDD container.
e08de24d4792d31b7f2aac29db5cb8840d940009vboxsync *
e4ea543752422f1139923e3e506c625b0a1827c5vboxsync * @returns VBox status code.
e9a217d585085a6a6d129d27ca0d96a1b8e6d0eevboxsync * @returns VERR_VDI_IMAGE_NOT_FOUND if image with specified number was not opened.
2d53f6e472561965d363674e17f48d3bdffc24d3vboxsync * @returns VERR_BUFFER_OVERFLOW if pszFilename buffer too small to hold filename.
2d53f6e472561965d363674e17f48d3bdffc24d3vboxsync * @param pDisk Pointer to VDI HDD container.
e9a217d585085a6a6d129d27ca0d96a1b8e6d0eevboxsync * @param nImage Image number, counts from 0. 0 is always base image of container.
b74ca013e5f201a2dd371e6c438433ceac12af30vboxsync * @param pszFilename Where to store the image file name.
b74ca013e5f201a2dd371e6c438433ceac12af30vboxsync * @param cbFilename Size of buffer pszFilename points to.
b74ca013e5f201a2dd371e6c438433ceac12af30vboxsync */
b74ca013e5f201a2dd371e6c438433ceac12af30vboxsyncVBOXDDU_DECL(int) VDIDiskGetImageFilename(PVDIDISK pDisk, int nImage, char *pszFilename, unsigned cbFilename);
b74ca013e5f201a2dd371e6c438433ceac12af30vboxsync
b74ca013e5f201a2dd371e6c438433ceac12af30vboxsync/**
b74ca013e5f201a2dd371e6c438433ceac12af30vboxsync * Get the comment line of opened image of HDD container.
b74ca013e5f201a2dd371e6c438433ceac12af30vboxsync *
2d53f6e472561965d363674e17f48d3bdffc24d3vboxsync * @returns VBox status code.
b74ca013e5f201a2dd371e6c438433ceac12af30vboxsync * @returns VERR_VDI_IMAGE_NOT_FOUND if image with specified number was not opened.
b74ca013e5f201a2dd371e6c438433ceac12af30vboxsync * @returns VERR_BUFFER_OVERFLOW if pszComment buffer too small to hold comment text.
e9a217d585085a6a6d129d27ca0d96a1b8e6d0eevboxsync * @param pDisk Pointer to VDI HDD container.
2d53f6e472561965d363674e17f48d3bdffc24d3vboxsync * @param nImage Image number, counts from 0. 0 is always base image of container.
2d53f6e472561965d363674e17f48d3bdffc24d3vboxsync * @param pszComment Where to store the comment string of image. NULL is ok.
0e77737b0ba913683e614db11463b31ca67aacbevboxsync * @param cbComment The size of pszComment buffer. 0 is ok.
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsyncVBOXDDU_DECL(int) VDIDiskGetImageComment(PVDIDISK pDisk, int nImage, char *pszComment, unsigned cbComment);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
3080f6c0871099df43a4e91b31894d9c2b1369a8vboxsync/**
3080f6c0871099df43a4e91b31894d9c2b1369a8vboxsync * Get Uuid of opened image of HDD container.
3080f6c0871099df43a4e91b31894d9c2b1369a8vboxsync *
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * @returns VBox status code.
3080f6c0871099df43a4e91b31894d9c2b1369a8vboxsync * @returns VERR_VDI_IMAGE_NOT_FOUND if image with specified number was not opened.
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * @param pDisk Pointer to VDI HDD container.
da936e0446fb2b56b813d5d938f1dfc6e4bf8b13vboxsync * @param nImage Image number, counts from 0. 0 is always base image of container.
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * @param pUuid Where to store the image creation uuid.
8e972b677df5ee27b99211fc7e456a5aa50f3e68vboxsync */
8e972b677df5ee27b99211fc7e456a5aa50f3e68vboxsyncVBOXDDU_DECL(int) VDIDiskGetImageUuid(PVDIDISK pDisk, int nImage, PRTUUID pUuid);
8e972b677df5ee27b99211fc7e456a5aa50f3e68vboxsync
8e972b677df5ee27b99211fc7e456a5aa50f3e68vboxsync/**
13ba5527caaa9b8c4fee29f22e374fa67c4c6f72vboxsync * Get last modification Uuid of opened image of HDD container.
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync *
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * @returns VBox status code.
6b022885f2cb6a55167609edecd89570cd80001dvboxsync * @returns VERR_VDI_IMAGE_NOT_FOUND if image with specified number was not opened.
6b022885f2cb6a55167609edecd89570cd80001dvboxsync * @param pDisk Pointer to VDI HDD container.
86b687e7808a36be33c43ae58adc8ab22d378feavboxsync * @param nImage Image number, counts from 0. 0 is always base image of container.
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * @param pUuid Where to store the image modification uuid.
806d0b554daa555364af5f87bc96eccbe760db7avboxsync */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsyncVBOXDDU_DECL(int) VDIDiskGetImageModificationUuid(PVDIDISK pDisk, int nImage, PRTUUID pUuid);
13ba5527caaa9b8c4fee29f22e374fa67c4c6f72vboxsync
806d0b554daa555364af5f87bc96eccbe760db7avboxsync/**
13ba5527caaa9b8c4fee29f22e374fa67c4c6f72vboxsync * Get Uuid of opened image's parent image.
806d0b554daa555364af5f87bc96eccbe760db7avboxsync *
13ba5527caaa9b8c4fee29f22e374fa67c4c6f72vboxsync * @returns VBox status code.
806d0b554daa555364af5f87bc96eccbe760db7avboxsync * @returns VERR_VDI_IMAGE_NOT_FOUND if image with specified number was not opened.
806d0b554daa555364af5f87bc96eccbe760db7avboxsync * @param pDisk Pointer to VDI HDD container.
806d0b554daa555364af5f87bc96eccbe760db7avboxsync * @param nImage Image number, counts from 0. 0 is always base image of the container.
806d0b554daa555364af5f87bc96eccbe760db7avboxsync * @param pUuid Where to store the image creation uuid.
806d0b554daa555364af5f87bc96eccbe760db7avboxsync */
806d0b554daa555364af5f87bc96eccbe760db7avboxsyncVBOXDDU_DECL(int) VDIDiskGetParentImageUuid(PVDIDISK pDisk, int nImage, PRTUUID pUuid);
806d0b554daa555364af5f87bc96eccbe760db7avboxsync
806d0b554daa555364af5f87bc96eccbe760db7avboxsync/**
806d0b554daa555364af5f87bc96eccbe760db7avboxsync * Read data from virtual HDD.
806d0b554daa555364af5f87bc96eccbe760db7avboxsync *
806d0b554daa555364af5f87bc96eccbe760db7avboxsync * @returns VBox status code.
806d0b554daa555364af5f87bc96eccbe760db7avboxsync * @param pDisk Pointer to VDI HDD container.
d98e61ba075ed7d0b567a5d884bc85d643fe3de7vboxsync * @param offStart Offset of first reading byte from start of disk.
806d0b554daa555364af5f87bc96eccbe760db7avboxsync * @param pvBuf Pointer to buffer for reading data.
806d0b554daa555364af5f87bc96eccbe760db7avboxsync * @param cbToRead Number of bytes to read.
806d0b554daa555364af5f87bc96eccbe760db7avboxsync */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsyncVBOXDDU_DECL(int) VDIDiskRead(PVDIDISK pDisk, uint64_t offStart, void *pvBuf, unsigned cbToRead);
e08de24d4792d31b7f2aac29db5cb8840d940009vboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync/**
806d0b554daa555364af5f87bc96eccbe760db7avboxsync * Write data to virtual HDD.
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync *
13ba5527caaa9b8c4fee29f22e374fa67c4c6f72vboxsync * @returns VBox status code.
806d0b554daa555364af5f87bc96eccbe760db7avboxsync * @param pDisk Pointer to VDI HDD container.
806d0b554daa555364af5f87bc96eccbe760db7avboxsync * @param offStart Offset of first writing byte from start of HDD.
806d0b554daa555364af5f87bc96eccbe760db7avboxsync * @param pvBuf Pointer to buffer of writing data.
806d0b554daa555364af5f87bc96eccbe760db7avboxsync * @param cbToWrite Number of bytes to write.
806d0b554daa555364af5f87bc96eccbe760db7avboxsync */
806d0b554daa555364af5f87bc96eccbe760db7avboxsyncVBOXDDU_DECL(int) VDIDiskWrite(PVDIDISK pDisk, uint64_t offStart, const void *pvBuf, unsigned cbToWrite);
806d0b554daa555364af5f87bc96eccbe760db7avboxsync
13ba5527caaa9b8c4fee29f22e374fa67c4c6f72vboxsync
806d0b554daa555364af5f87bc96eccbe760db7avboxsync
13ba5527caaa9b8c4fee29f22e374fa67c4c6f72vboxsync/**
806d0b554daa555364af5f87bc96eccbe760db7avboxsync * Debug helper - dumps all opened images of HDD container into the log file.
13ba5527caaa9b8c4fee29f22e374fa67c4c6f72vboxsync *
806d0b554daa555364af5f87bc96eccbe760db7avboxsync * @param pDisk Pointer to VDI HDD container.
806d0b554daa555364af5f87bc96eccbe760db7avboxsync */
806d0b554daa555364af5f87bc96eccbe760db7avboxsyncVBOXDDU_DECL(void) VDIDiskDumpImages(PVDIDISK pDisk);
806d0b554daa555364af5f87bc96eccbe760db7avboxsync
806d0b554daa555364af5f87bc96eccbe760db7avboxsync__END_DECLS
806d0b554daa555364af5f87bc96eccbe760db7avboxsync
806d0b554daa555364af5f87bc96eccbe760db7avboxsync/** @} */
806d0b554daa555364af5f87bc96eccbe760db7avboxsync
806d0b554daa555364af5f87bc96eccbe760db7avboxsync#endif
806d0b554daa555364af5f87bc96eccbe760db7avboxsync