VirtualBox

source: vbox/trunk/include/VBox/vd-image-backend.h@ 80024

Last change on this file since 80024 was 79965, checked in by vboxsync, 5 years ago

Storage: Added a desired format parameter to VDGetFormat() so Main can pass along the device type. Bumped the RAW backend down after the CUE and VISO to prevent (impossible) mixups of tiny files. Extended rawProbe() to look for a valid ISO-9660/UDF descriptor sequence on the image if the caller doesn't say it should be a floppy or hdd, only if that fail go by the extension. Note! the pfnProbe callback should probably get a score return parameter to indicate how confient the backend is about the probe result, as this would prevent the RAW backend from accidentally grabbing images which belongs to a plug-in. bugref:9151

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

© 2024 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette