1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616
|
/** @file
* VD: Image backend interface.
*/
/*
* Copyright (C) 2006-2024 Oracle and/or its affiliates.
*
* This file is part of VirtualBox base platform packages, as
* available from https://www.virtualbox.org.
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation, in version 3 of the
* License.
*
* This program is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, see <https://www.gnu.org/licenses>.
*
* The contents of this file may alternatively be used under the terms
* of the Common Development and Distribution License Version 1.0
* (CDDL), a copy of it is provided in the "COPYING.CDDL" file included
* in the VirtualBox distribution, in which case the provisions of the
* CDDL are applicable instead of those of the GPL.
*
* You may elect to license modified versions of this file under the
* terms and conditions of either the GPL or the CDDL or both.
*
* SPDX-License-Identifier: GPL-3.0-only OR CDDL-1.0
*/
#ifndef VBOX_INCLUDED_vd_image_backend_h
#define VBOX_INCLUDED_vd_image_backend_h
#ifndef RT_WITHOUT_PRAGMA_ONCE
# pragma once
#endif
#include <VBox/vd.h>
#include <VBox/vd-common.h>
#include <VBox/vd-ifs-internal.h>
/** @name VBox HDD backend write flags
* @{
*/
/** Do not allocate a new block on this write. This is just an advisory
* flag. The backend may still decide in some circumstances that it wants
* to ignore this flag (which may cause extra dynamic image expansion). */
#define VD_WRITE_NO_ALLOC RT_BIT(1)
/** @}*/
/** @name VBox HDD backend discard flags
* @{
*/
/** Don't discard block but mark the given range as unused
* (usually by writing 0's to it).
* This doesn't require the range to be aligned on a block boundary but
* the image size might not be decreased. */
#define VD_DISCARD_MARK_UNUSED RT_BIT(0)
/** @}*/
/** @name VBox HDD backend metadata traverse flags
* @{
*/
/** Include per block metadata while traversing the metadata.
* This might take much longer instead of traversing just global metadata. */
#define VD_TRAVERSE_METADATA_INCLUDE_PER_BLOCK_METADATA RT_BIT(0)
/** @}*/
/**
* Image format backend interface used by VBox HDD Container implementation.
*/
typedef struct VDIMAGEBACKEND
{
/** Structure version. VD_IMGBACKEND_VERSION defines the current version. */
uint32_t u32Version;
/** The name of the backend (constant string). */
const char *pszBackendName;
/** The capabilities of the backend. */
uint64_t uBackendCaps;
/**
* Pointer to a NULL-terminated array, containing the supported
* file extensions. Note that some backends do not work on files, so this
* pointer may just contain NULL.
*/
PCVDFILEEXTENSION paFileExtensions;
/**
* Pointer to an array of structs describing each supported config key.
* Terminated by a NULL config key. Note that some backends do not support
* the configuration interface, so this pointer may just contain NULL.
* Mandatory if the backend sets VD_CAP_CONFIG.
*/
PCVDCONFIGINFO paConfigInfo;
/**
* Check whether the file is supported by the backend.
*
* @returns VBox status code.
* @param pszFilename Name of the image file.
* @param pVDIfsDisk Pointer to the per-disk VD interface list.
* @param pVDIfsImage Pointer to the per-image VD interface list.
* @param enmDesiredType The desired image type, VDTYPE_INVALID if anything goes.
* @param penmType Returns the supported device type on success.
*/
DECLR3CALLBACKMEMBER(int, pfnProbe, (const char *pszFilename, PVDINTERFACE pVDIfsDisk,
PVDINTERFACE pVDIfsImage, VDTYPE enmDesiredType, VDTYPE *penmType));
/**
* Open a disk image.
*
* @returns VBox status code.
* @param pszFilename Name of the image file to open. Guaranteed to be available and
* unchanged during the lifetime of this image.
* @param uOpenFlags Image file open mode, see VD_OPEN_FLAGS_* constants.
* @param pVDIfsDisk Pointer to the per-disk VD interface list.
* @param pVDIfsImage Pointer to the per-image VD interface list.
* @param enmType Requested type of the image.
* @param ppBackendData Opaque state data for this image.
*/
DECLR3CALLBACKMEMBER(int, pfnOpen, (const char *pszFilename, unsigned uOpenFlags,
PVDINTERFACE pVDIfsDisk, PVDINTERFACE pVDIfsImage,
VDTYPE enmType, void **ppBackendData));
/**
* Create a disk image.
*
* @returns VBox status code.
* @param pszFilename Name of the image file to create. Guaranteed to be available and
* unchanged during the lifetime of this image.
* @param cbSize Image size in bytes.
* @param uImageFlags Flags specifying special image features.
* @param pszComment Pointer to image comment. NULL is ok.
* @param pPCHSGeometry Physical drive geometry CHS <= (16383,16,255).
* @param pLCHSGeometry Logical drive geometry CHS <= (1024,255,63).
* @param pUuid New UUID of the image. Not NULL.
* @param uOpenFlags Image file open mode, see VD_OPEN_FLAGS_* constants.
* @param uPercentStart Starting value for progress percentage.
* @param uPercentSpan Span for varying progress percentage.
* @param pVDIfsDisk Pointer to the per-disk VD interface list.
* @param pVDIfsImage Pointer to the per-image VD interface list.
* @param pVDIfsOperation Pointer to the per-operation VD interface list.
* @param enmType Requested type of the image.
* @param ppBackendData Opaque state data for this image.
*/
DECLR3CALLBACKMEMBER(int, pfnCreate, (const char *pszFilename, uint64_t cbSize,
unsigned uImageFlags, const char *pszComment,
PCVDGEOMETRY pPCHSGeometry,
PCVDGEOMETRY pLCHSGeometry,
PCRTUUID pUuid, unsigned uOpenFlags,
unsigned uPercentStart, unsigned uPercentSpan,
PVDINTERFACE pVDIfsDisk,
PVDINTERFACE pVDIfsImage,
PVDINTERFACE pVDIfsOperation,
VDTYPE enmType,
void **ppBackendData));
/**
* Rename a disk image. Only needs to work as long as the operating
* system's rename file functionality is usable. If an attempt is made to
* rename an image to a location on another disk/filesystem, this function
* may just fail with an appropriate error code (not changing the opened
* image data at all). Also works only on images which actually refer to
* regular files. May be NULL.
*
* @returns VBox status code.
* @param pBackendData Opaque state data for this image.
* @param pszFilename New name of the image file. Guaranteed to be available and
* unchanged during the lifetime of this image.
*/
DECLR3CALLBACKMEMBER(int, pfnRename, (void *pBackendData, const char *pszFilename));
/**
* Close a disk image.
*
* @returns VBox status code.
* @param pBackendData Opaque state data for this image.
* @param fDelete If true, delete the image from the host disk.
*/
DECLR3CALLBACKMEMBER(int, pfnClose, (void *pBackendData, bool fDelete));
/**
* Start a read request.
*
* @returns VBox status code.
* @param pBackendData Opaque state data for this image.
* @param uOffset The offset of the virtual disk to read from.
* @param cbToRead How many bytes to read.
* @param pIoCtx I/O context associated with this request.
* @param pcbActuallyRead Pointer to returned number of bytes read.
*/
DECLR3CALLBACKMEMBER(int, pfnRead, (void *pBackendData, uint64_t uOffset, size_t cbToRead,
PVDIOCTX pIoCtx, size_t *pcbActuallyRead));
/**
* Start a write request.
*
* @returns VBox status code.
* @param pBackendData Opaque state data for this image.
* @param uOffset The offset of the virtual disk to write to.
* @param cbToWrite How many bytes to write.
* @param pIoCtx I/O context associated with this request.
* @param pcbWriteProcess Pointer to returned number of bytes that could
* be processed. In case the function returned
* VERR_VD_BLOCK_FREE this is the number of bytes
* that could be written in a full block write,
* when prefixed/postfixed by the appropriate
* amount of (previously read) padding data.
* @param pcbPreRead Pointer to the returned amount of data that must
* be prefixed to perform a full block write.
* @param pcbPostRead Pointer to the returned amount of data that must
* be postfixed to perform a full block write.
* @param fWrite Flags which affect write behavior. Combination
* of the VD_WRITE_* flags.
*/
DECLR3CALLBACKMEMBER(int, pfnWrite, (void *pBackendData, uint64_t uOffset, size_t cbToWrite,
PVDIOCTX pIoCtx,
size_t *pcbWriteProcess, size_t *pcbPreRead,
size_t *pcbPostRead, unsigned fWrite));
/**
* Flush data to disk.
*
* @returns VBox status code.
* @param pBackendData Opaque state data for this image.
* @param pIoCtx I/O context associated with this request.
*/
DECLR3CALLBACKMEMBER(int, pfnFlush, (void *pBackendData, PVDIOCTX pIoCtx));
/**
* Discards the given amount of bytes decreasing the size of the image if possible
*
* @returns VBox status code.
* @retval VERR_VD_DISCARD_ALIGNMENT_NOT_MET if the range doesn't meet the required alignment
* for the discard.
* @param pBackendData Opaque state data for this image.
* @param pIoCtx I/O context associated with this request.
* @param uOffset The offset of the first byte to discard.
* @param cbDiscard How many bytes to discard.
* @param pcbPreAllocated Pointer to the returned amount of bytes that must
* be discarded before the range to perform a full
* block discard.
* @param pcbPostAllocated Pointer to the returned amount of bytes that must
* be discarded after the range to perform a full
* block discard.
* @param pcbActuallyDiscarded Pointer to the returned amount of bytes which
* could be actually discarded.
* @param ppbmAllocationBitmap Where to store the pointer to the allocation bitmap
* if VERR_VD_DISCARD_ALIGNMENT_NOT_MET is returned or NULL
* if the allocation bitmap should be returned.
* @param fDiscard Flags which affect discard behavior. Combination
* of the VD_DISCARD_* flags.
*/
DECLR3CALLBACKMEMBER(int, pfnDiscard, (void *pBackendData, PVDIOCTX pIoCtx,
uint64_t uOffset, size_t cbDiscard,
size_t *pcbPreAllocated,
size_t *pcbPostAllocated,
size_t *pcbActuallyDiscarded,
void **ppbmAllocationBitmap,
unsigned fDiscard));
/**
* Get the version of a disk image.
*
* @returns version of disk image.
* @param pBackendData Opaque state data for this image.
*/
DECLR3CALLBACKMEMBER(unsigned, pfnGetVersion, (void *pBackendData));
/**
* Get the file size of a disk image.
*
* @returns size of disk image in bytes.
* @param pBackendData Opaque state data for this image.
*/
DECLR3CALLBACKMEMBER(uint64_t, pfnGetFileSize, (void *pBackendData));
/**
* Get virtual disk PCHS geometry stored in a disk image.
*
* @returns VBox status code.
* @returns VERR_VD_GEOMETRY_NOT_SET if no geometry present in the image.
* @param pBackendData Opaque state data for this image.
* @param pPCHSGeometry Where to store the geometry. Not NULL.
*/
DECLR3CALLBACKMEMBER(int, pfnGetPCHSGeometry, (void *pBackendData, PVDGEOMETRY pPCHSGeometry));
/**
* Set virtual disk PCHS geometry stored in a disk image.
* Only called if geometry is different than before.
*
* @returns VBox status code.
* @param pBackendData Opaque state data for this image.
* @param pPCHSGeometry Where to load the geometry from. Not NULL.
*/
DECLR3CALLBACKMEMBER(int, pfnSetPCHSGeometry, (void *pBackendData, PCVDGEOMETRY pPCHSGeometry));
/**
* Get virtual disk LCHS geometry stored in a disk image.
*
* @returns VBox status code.
* @returns VERR_VD_GEOMETRY_NOT_SET if no geometry present in the image.
* @param pBackendData Opaque state data for this image.
* @param pLCHSGeometry Where to store the geometry. Not NULL.
*/
DECLR3CALLBACKMEMBER(int, pfnGetLCHSGeometry, (void *pBackendData, PVDGEOMETRY pLCHSGeometry));
/**
* Set virtual disk LCHS geometry stored in a disk image.
* Only called if geometry is different than before.
*
* @returns VBox status code.
* @param pBackendData Opaque state data for this image.
* @param pLCHSGeometry Where to load the geometry from. Not NULL.
*/
DECLR3CALLBACKMEMBER(int, pfnSetLCHSGeometry, (void *pBackendData, PCVDGEOMETRY pLCHSGeometry));
/**
* Returns a region list for the disk image if supported, optional.
*
* @returns VBox status code.
* @retval VERR_NOT_SUPPORTED if region lists are not supported for this kind of image.
* @param pBackendData Opaque state data for this image.
* @param ppRegionList Where to store the pointer to the region list on success.
*/
DECLR3CALLBACKMEMBER(int, pfnQueryRegions, (void *pBackendData, PCVDREGIONLIST *ppRegionList));
/**
* Releases the region list acquired with VDIMAGEBACKEND::pfnQueryRegions() before.
*
* @param pBackendData Opaque state data for this image.
* @param pRegionList The region list to release.
*/
DECLR3CALLBACKMEMBER(void, pfnRegionListRelease, (void *pBackendData, PCVDREGIONLIST pRegionList));
/**
* Get the image flags of a disk image.
*
* @returns image flags of disk image (VD_IMAGE_FLAGS_XXX).
* @param pBackendData Opaque state data for this image.
*/
DECLR3CALLBACKMEMBER(unsigned, pfnGetImageFlags, (void *pBackendData));
/**
* Get the open flags of a disk image.
*
* @returns open flags of disk image (VD_OPEN_FLAGS_XXX).
* @param pBackendData Opaque state data for this image.
*/
DECLR3CALLBACKMEMBER(unsigned, pfnGetOpenFlags, (void *pBackendData));
/**
* Set the open flags of a disk image.
*
* May cause the image to be locked in a different mode or be reopened (which
* can fail).
*
* @returns VBox status code.
* @param pBackendData Opaque state data for this image.
* @param uOpenFlags New open flags for this image (VD_OPEN_FLAGS_XXX).
*/
DECLR3CALLBACKMEMBER(int, pfnSetOpenFlags, (void *pBackendData, unsigned uOpenFlags));
/**
* Get comment of a disk image.
*
* @returns VBox status code.
* @param pBackendData Opaque state data for this image.
* @param pszComment Where to store the comment.
* @param cbComment Size of the comment buffer.
*/
DECLR3CALLBACKMEMBER(int, pfnGetComment, (void *pBackendData, char *pszComment, size_t cbComment));
/**
* Set comment of a disk image.
*
* @returns VBox status code.
* @param pBackendData Opaque state data for this image.
* @param pszComment Where to get the comment from. NULL resets comment.
* The comment is silently truncated if the image format
* limit is exceeded.
*/
DECLR3CALLBACKMEMBER(int, pfnSetComment, (void *pBackendData, const char *pszComment));
/**
* Get UUID of a disk image.
*
* @returns VBox status code.
* @param pBackendData Opaque state data for this image.
* @param pUuid Where to store the image UUID.
*/
DECLR3CALLBACKMEMBER(int, pfnGetUuid, (void *pBackendData, PRTUUID pUuid));
/**
* Set UUID of a disk image.
*
* @returns VBox status code.
* @param pBackendData Opaque state data for this image.
* @param pUuid Where to get the image UUID from.
*/
DECLR3CALLBACKMEMBER(int, pfnSetUuid, (void *pBackendData, PCRTUUID pUuid));
/**
* Get last modification UUID of a disk image.
*
* @returns VBox status code.
* @param pBackendData Opaque state data for this image.
* @param pUuid Where to store the image modification UUID.
*/
DECLR3CALLBACKMEMBER(int, pfnGetModificationUuid, (void *pBackendData, PRTUUID pUuid));
/**
* Set last modification UUID of a disk image.
*
* @returns VBox status code.
* @param pBackendData Opaque state data for this image.
* @param pUuid Where to get the image modification UUID from.
*/
DECLR3CALLBACKMEMBER(int, pfnSetModificationUuid, (void *pBackendData, PCRTUUID pUuid));
/**
* Get parent UUID of a disk image.
*
* @returns VBox status code.
* @param pBackendData Opaque state data for this image.
* @param pUuid Where to store the parent image UUID.
*/
DECLR3CALLBACKMEMBER(int, pfnGetParentUuid, (void *pBackendData, PRTUUID pUuid));
/**
* Set parent UUID of a disk image.
*
* @returns VBox status code.
* @param pBackendData Opaque state data for this image.
* @param pUuid Where to get the parent image UUID from.
*/
DECLR3CALLBACKMEMBER(int, pfnSetParentUuid, (void *pBackendData, PCRTUUID pUuid));
/**
* Get parent modification UUID of a disk image.
*
* @returns VBox status code.
* @param pBackendData Opaque state data for this image.
* @param pUuid Where to store the parent image modification UUID.
*/
DECLR3CALLBACKMEMBER(int, pfnGetParentModificationUuid, (void *pBackendData, PRTUUID pUuid));
/**
* Set parent modification UUID of a disk image.
*
* @returns VBox status code.
* @param pBackendData Opaque state data for this image.
* @param pUuid Where to get the parent image modification UUID from.
*/
DECLR3CALLBACKMEMBER(int, pfnSetParentModificationUuid, (void *pBackendData, PCRTUUID pUuid));
/**
* Dump information about a disk image.
*
* @param pBackendData Opaque state data for this image.
*/
DECLR3CALLBACKMEMBER(void, pfnDump, (void *pBackendData));
/**
* Get a time stamp of a disk image. May be NULL.
*
* @returns VBox status code.
* @param pBackendData Opaque state data for this image.
* @param pTimestamp Where to store the time stamp.
*/
DECLR3CALLBACKMEMBER(int, pfnGetTimestamp, (void *pBackendData, PRTTIMESPEC pTimestamp));
/**
* Get the parent time stamp of a disk image. May be NULL.
*
* @returns VBox status code.
* @param pBackendData Opaque state data for this image.
* @param pTimestamp Where to store the time stamp.
*/
DECLR3CALLBACKMEMBER(int, pfnGetParentTimestamp, (void *pBackendData, PRTTIMESPEC pTimestamp));
/**
* Set the parent time stamp of a disk image. May be NULL.
*
* @returns VBox status code.
* @param pBackendData Opaque state data for this image.
* @param pTimestamp Where to get the time stamp from.
*/
DECLR3CALLBACKMEMBER(int, pfnSetParentTimestamp, (void *pBackendData, PCRTTIMESPEC pTimestamp));
/**
* Get the relative path to parent image. May be NULL.
*
* @returns VBox status code.
* @param pBackendData Opaque state data for this image.
* @param ppszParentFilename Where to store the path.
*/
DECLR3CALLBACKMEMBER(int, pfnGetParentFilename, (void *pBackendData, char **ppszParentFilename));
/**
* Set the relative path to parent image. May be NULL.
*
* @returns VBox status code.
* @param pBackendData Opaque state data for this image.
* @param pszParentFilename Where to get the path from.
*/
DECLR3CALLBACKMEMBER(int, pfnSetParentFilename, (void *pBackendData, const char *pszParentFilename));
/** Returns a human readable hard disk location string given a
* set of hard disk configuration keys. The returned string is an
* equivalent of the full file path for image-based hard disks.
* Mandatory for backends with no VD_CAP_FILE and NULL otherwise. */
DECLR3CALLBACKMEMBER(int, pfnComposeLocation, (PVDINTERFACE pConfig, char **pszLocation));
/** Returns a human readable hard disk name string given a
* set of hard disk configuration keys. The returned string is an
* equivalent of the file name part in the full file path for
* image-based hard disks. Mandatory for backends with no
* VD_CAP_FILE and NULL otherwise. */
DECLR3CALLBACKMEMBER(int, pfnComposeName, (PVDINTERFACE pConfig, char **pszName));
/**
* Compact the image. The pointer may be NULL, indicating that this
* isn't supported yet (for file-based images) or not necessary.
*
* @returns VBox status code.
* @returns VERR_NOT_SUPPORTED if this image cannot be compacted yet.
* @param pBackendData Opaque state data for this image.
* @param uPercentStart Starting value for progress percentage.
* @param uPercentSpan Span for varying progress percentage.
* @param pVDIfsDisk Pointer to the per-disk VD interface list.
* @param pVDIfsImage Pointer to the per-image VD interface list.
* @param pVDIfsOperation Pointer to the per-operation VD interface list.
*/
DECLR3CALLBACKMEMBER(int, pfnCompact, (void *pBackendData,
unsigned uPercentStart, unsigned uPercentSpan,
PVDINTERFACE pVDIfsDisk,
PVDINTERFACE pVDIfsImage,
PVDINTERFACE pVDIfsOperation));
/**
* Resize the image. The pointer may be NULL, indicating that this
* isn't supported yet (for file-based images) or not necessary.
*
* @returns VBox status code.
* @returns VERR_NOT_SUPPORTED if this image cannot be resized yet.
* @param pBackendData Opaque state data for this image.
* @param cbSize New size of the image.
* @param pPCHSGeometry Pointer to the new physical disk geometry <= (16383,16,63). Not NULL.
* @param pLCHSGeometry Pointer to the new logical disk geometry <= (x,255,63). Not NULL.
* @param uPercentStart Starting value for progress percentage.
* @param uPercentSpan Span for varying progress percentage.
* @param pVDIfsDisk Pointer to the per-disk VD interface list.
* @param pVDIfsImage Pointer to the per-image VD interface list.
* @param pVDIfsOperation Pointer to the per-operation VD interface list.
*/
DECLR3CALLBACKMEMBER(int, pfnResize, (void *pBackendData,
uint64_t cbSize,
PCVDGEOMETRY pPCHSGeometry,
PCVDGEOMETRY pLCHSGeometry,
unsigned uPercentStart, unsigned uPercentSpan,
PVDINTERFACE pVDIfsDisk,
PVDINTERFACE pVDIfsImage,
PVDINTERFACE pVDIfsOperation));
/**
* Try to repair the given image.
*
* @returns VBox status code.
* @param pszFilename Name of the image file.
* @param pVDIfsDisk Pointer to the per-disk VD interface list.
* @param pVDIfsImage Pointer to the per-image VD interface list.
* @param fFlags Combination of the VD_REPAIR_* flags.
*/
DECLR3CALLBACKMEMBER(int, pfnRepair, (const char *pszFilename, PVDINTERFACE pVDIfsDisk,
PVDINTERFACE pVDIfsImage, uint32_t fFlags));
/**
* Traverse all metadata of the opened image.
*
* @returns VBox status code.
* @param pBackendData Opaque state data for this image.
* @param fFlags Traverse flags, combination of VD_TRAVERSE_METDATA_* defines.
* @param pVDIfsDisk Pointer to the per-disk VD interface list.
* @param pVDIfsImage Pointer to the per-image VD interface list.
* @param pVDIfsOperation Pointer to the per-operation VD interface list.
*/
DECLR3CALLBACKMEMBER(int, pfnTraverseMetadata, (void *pBackendData, uint32_t fFlags,
PVDINTERFACE pVDIfsDisk,
PVDINTERFACE pVDIfsImage,
PVDINTERFACE pVDIfsOperation));
/** Initialization safty marker. */
uint32_t u32VersionEnd;
} VDIMAGEBACKEND;
/** Pointer to VD backend. */
typedef VDIMAGEBACKEND *PVDIMAGEBACKEND;
/** Constant pointer to VD backend. */
typedef const VDIMAGEBACKEND *PCVDIMAGEBACKEND;
/** The current version of the VDIMAGEBACKEND structure. */
#define VD_IMGBACKEND_VERSION VD_VERSION_MAKE(0xff01, 3, 0)
/** @copydoc VDIMAGEBACKEND::pfnComposeLocation */
DECLCALLBACK(int) genericFileComposeLocation(PVDINTERFACE pConfig, char **pszLocation);
/** @copydoc VDIMAGEBACKEND::pfnComposeName */
DECLCALLBACK(int) genericFileComposeName(PVDINTERFACE pConfig, char **pszName);
#endif /* !VBOX_INCLUDED_vd_image_backend_h */
|