VirtualBox

source: vbox/trunk/include/VBox/VBoxHDD.h@ 8006

Last change on this file since 8006 was 6291, checked in by vboxsync, 16 years ago

Big virtual disk changeset containing several modifications

  • remove the always buggy translation setting and replace it with two sets of geometries, physical and logical
  • complete vmdk creation (fixed/dynamic variants, both split in 2G chunks and single file)
  • implemented VBoxHDD-new generic snapshot support, i.e. diff image creation and image merging (completely untested, I'm pretty sure there are bugs)
  • assorted changes which generalize the VBoxHDD-new interfaces (both externally and internally)
  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 22.1 KB
Line 
1/** @file
2 * VBox HDD Container, Virtual Disk Image (VDI) API.
3 */
4
5/*
6 * Copyright (C) 2006-2007 innotek GmbH
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_VBoxHDD_h
27#define ___VBox_VBoxHDD_h
28
29#include <VBox/cdefs.h>
30#include <VBox/types.h>
31#include <VBox/param.h>
32#include <VBox/pdm.h>
33#include <VBox/vmapi.h>
34
35__BEGIN_DECLS
36
37#ifdef IN_RING0
38# error "There are no VDI APIs available in Ring-0 Host Context!"
39#endif
40
41/** @defgroup grp_vbox_hdd VBox HDD Container
42 * @{
43 */
44
45/** Image info, not handled anyhow.
46 * Must be less than 64 bytes in length, including the trailing 0.
47 */
48#define VDI_IMAGE_FILE_INFO "<<< innotek VirtualBox Disk Image >>>\n"
49
50/** Current image major version. */
51#define VDI_IMAGE_VERSION_MAJOR (0x0001)
52/** Current image minor version. */
53#define VDI_IMAGE_VERSION_MINOR (0x0001)
54/** Current image version. */
55#define VDI_IMAGE_VERSION ((VDI_IMAGE_VERSION_MAJOR << 16) | VDI_IMAGE_VERSION_MINOR)
56
57/** Get major version from combined version. */
58#define VDI_GET_VERSION_MAJOR(uVer) ((uVer) >> 16)
59/** Get minor version from combined version. */
60#define VDI_GET_VERSION_MINOR(uVer) ((uVer) & 0xffff)
61
62/** @name VDI image types
63 * @{ */
64typedef enum VDIIMAGETYPE
65{
66 /** Normal dynamically growing base image file. */
67 VDI_IMAGE_TYPE_NORMAL = 1,
68 /** Preallocated base image file of a fixed size. */
69 VDI_IMAGE_TYPE_FIXED,
70 /** Dynamically growing image file for undo/commit changes support. */
71 VDI_IMAGE_TYPE_UNDO,
72 /** Dynamically growing image file for differencing support. */
73 VDI_IMAGE_TYPE_DIFF,
74
75 /** First valid image type value. */
76 VDI_IMAGE_TYPE_FIRST = VDI_IMAGE_TYPE_NORMAL,
77 /** Last valid image type value. */
78 VDI_IMAGE_TYPE_LAST = VDI_IMAGE_TYPE_DIFF
79} VDIIMAGETYPE;
80/** Pointer to VDI image type. */
81typedef VDIIMAGETYPE *PVDIIMAGETYPE;
82/** @} */
83
84/** @name VDI image flags
85 * @{ */
86/** No flags. */
87#define VDI_IMAGE_FLAGS_NONE (0x00)
88/** Fill new blocks with zeroes while expanding image file. */
89#define VDI_IMAGE_FLAGS_ZERO_EXPAND (0x01)
90
91/** Mask of valid image flags. */
92#define VDI_IMAGE_FLAGS_MASK (VDI_IMAGE_FLAGS_NONE | VDI_IMAGE_FLAGS_ZERO_EXPAND)
93
94/** Default image flags. */
95#define VDI_IMAGE_FLAGS_DEFAULT (VDI_IMAGE_FLAGS_NONE)
96/** @} */
97
98/** @name VDI image open mode flags
99 * @{
100 */
101/** Try to open image in read/write exclusive access mode if possible, or in read-only elsewhere. */
102#define VDI_OPEN_FLAGS_NORMAL (0)
103/** Open image in read-only mode with sharing access with others. */
104#define VDI_OPEN_FLAGS_READONLY (1)
105/** Mask of valid flags. */
106#define VDI_OPEN_FLAGS_MASK (VDI_OPEN_FLAGS_NORMAL | VDI_OPEN_FLAGS_READONLY)
107/** @}*/
108
109/**
110 * VBox VDI disk Container main structure.
111 */
112/* Forward declaration, VDIDISK structure is visible only inside VDI module. */
113struct VDIDISK;
114typedef struct VDIDISK VDIDISK;
115typedef VDIDISK *PVDIDISK;
116
117/**
118 * Creates a new base image file.
119 *
120 * @returns VBox status code.
121 * @param pszFilename Name of the image file to create.
122 * @param enmType Image type, only base image types are acceptable.
123 * @param cbSize Image size in bytes.
124 * @param pszComment Pointer to image comment. NULL is ok.
125 * @param pfnProgress Progress callback. Optional. NULL if not to be used.
126 * @param pvUser User argument for the progress callback.
127 */
128VBOXDDU_DECL(int) VDICreateBaseImage(const char *pszFilename, VDIIMAGETYPE enmType, uint64_t cbSize, const char *pszComment,
129 PFNVMPROGRESS pfnProgress, void *pvUser);
130
131/**
132 * Creates a differencing dynamically growing image file for specified parent image.
133 *
134 * @returns VBox status code.
135 * @param pszFilename Name of the differencing image file to create.
136 * @param pszParent Name of the parent image file. May be base or diff image type.
137 * @param pszComment Pointer to image comment. NULL is ok.
138 * @param pfnProgress Progress callback. Optional. NULL if not to be used.
139 * @param pvUser User argument for the progress callback.
140 */
141VBOXDDU_DECL(int) VDICreateDifferenceImage(const char *pszFilename, const char *pszParent, const char *pszComment,
142 PFNVMPROGRESS pfnProgress, void *pvUser);
143
144/**
145 * Checks if image is available and not broken, returns some useful image parameters if requested.
146 *
147 * @returns VBox status code.
148 * @param pszFilename Name of the image file to check.
149 * @param puVersion Where to store the version of image. NULL is ok.
150 * @param penmType Where to store the type of image. NULL is ok.
151 * @param pcbSize Where to store the size of image in bytes. NULL is ok.
152 * @param pUuid Where to store the uuid of image creation. NULL is ok.
153 * @param pParentUuid Where to store the uuid of the parent image (if any). NULL is ok.
154 * @param pszComment Where to store the comment string of image. NULL is ok.
155 * @param cbComment The size of pszComment buffer. 0 is ok.
156 */
157VBOXDDU_DECL(int) VDICheckImage(const char *pszFilename,
158 unsigned *puVersion,
159 PVDIIMAGETYPE penmType,
160 uint64_t *pcbSize,
161 PRTUUID pUuid,
162 PRTUUID pParentUuid,
163 char *pszComment,
164 unsigned cbComment);
165
166/**
167 * Changes an image's comment string.
168 *
169 * @returns VBox status code.
170 * @param pszFilename Name of the image file to operate on.
171 * @param pszComment New comment string (UTF-8). NULL is allowed to reset the comment.
172 */
173VBOXDDU_DECL(int) VDISetImageComment(const char *pszFilename, const char *pszComment);
174
175/**
176 * Deletes a valid image file. Fails if specified file is not an image.
177 *
178 * @returns VBox status code.
179 * @param pszFilename Name of the image file to check.
180 */
181VBOXDDU_DECL(int) VDIDeleteImage(const char *pszFilename);
182
183/**
184 * Makes a copy of image file with a new (other) creation uuid.
185 *
186 * @returns VBox status code.
187 * @param pszDstFilename Name of the image file to create.
188 * @param pszSrcFilename Name of the image file to copy from.
189 * @param pszComment Pointer to image comment. If NULL, the comment
190 * will be copied from the source image.
191 * @param pfnProgress Progress callback. Optional. NULL if not to be used.
192 * @param pvUser User argument for the progress callback.
193 */
194VBOXDDU_DECL(int) VDICopyImage(const char *pszDstFilename, const char *pszSrcFilename, const char *pszComment,
195 PFNVMPROGRESS pfnProgress, void *pvUser);
196
197/**
198 * Converts image file from older VDI formats to current one.
199 *
200 * @returns VBox status code.
201 * @param pszFilename Name of the image file to convert.
202 * @param pfnProgress Progress callback. Optional. NULL if not to be used.
203 * @param pvUser User argument for the progress callback.
204 */
205VBOXDDU_DECL(int) VDIConvertImage(const char *pszFilename, PFNVMPROGRESS pfnProgress, void *pvUser);
206
207/**
208 * Shrinks growing image file by removing zeroed data blocks.
209 *
210 * @returns VBox status code.
211 * @param pszFilename Name of the image file to shrink.
212 * @param pfnProgress Progress callback. Optional. NULL if not to be used.
213 * @param pvUser User argument for the progress callback.
214 */
215VBOXDDU_DECL(int) VDIShrinkImage(const char *pszFilename, PFNVMPROGRESS pfnProgress, void *pvUser);
216
217/**
218 * Queries the image's UUID and parent UUIDs.
219 *
220 * @returns VBox status code.
221 * @param pszFilename Name of the image file to operate on.
222 * @param pUuid Where to store image UUID (can be NULL).
223 * @param pModificationUuid Where to store modification UUID (can be NULL).
224 * @param pParentUuuid Where to store parent UUID (can be NULL).
225 * @param pParentModificationUuid Where to store parent modification UUID (can be NULL).
226 */
227VBOXDDU_DECL(int) VDIGetImageUUIDs(const char *pszFilename,
228 PRTUUID pUuid, PRTUUID pModificationUuid,
229 PRTUUID pParentUuid, PRTUUID pParentModificationUuid);
230
231
232/**
233 * Changes the image's UUID and parent UUIDs.
234 *
235 * @returns VBox status code.
236 * @param pszFilename Name of the image file to operate on.
237 * @param pUuid Optional parameter, new UUID of the image.
238 * @param pModificationUuid Optional parameter, new modification UUID of the image.
239 * @param pParentUuuid Optional parameter, new parent UUID of the image.
240 * @param pParentModificationUuid Optional parameter, new parent modification UUID of the image.
241 */
242VBOXDDU_DECL(int) VDISetImageUUIDs(const char *pszFilename,
243 PCRTUUID pUuid, PCRTUUID pModificationUuid,
244 PCRTUUID pParentUuid, PCRTUUID pParentModificationUuid);
245
246/**
247 * Merges two images having a parent/child relationship (both directions).
248 *
249 * @returns VBox status code.
250 * @param pszFilenameFrom Name of the image file to merge from.
251 * @param pszFilenameTo Name of the image file to merge into.
252 * @param pfnProgress Progress callback. Optional. NULL if not to be used.
253 * @param pvUser User argument for the progress callback.
254 */
255VBOXDDU_DECL(int) VDIMergeImage(const char *pszFilenameFrom, const char *pszFilenameTo,
256 PFNVMPROGRESS pfnProgress, void *pvUser);
257
258
259/**
260 * Allocates and initializes an empty VDI HDD container.
261 * No image files are opened.
262 *
263 * @returns Pointer to newly created empty HDD container.
264 * @returns NULL on failure, typically out of memory.
265 */
266VBOXDDU_DECL(PVDIDISK) VDIDiskCreate(void);
267
268/**
269 * Destroys the VDI HDD container. If container has opened image files they will be closed.
270 *
271 * @param pDisk Pointer to VDI HDD container.
272 */
273VBOXDDU_DECL(void) VDIDiskDestroy(PVDIDISK pDisk);
274
275/**
276 * Opens an image file.
277 *
278 * The first opened image file in a HDD container must have a base image type,
279 * others (next opened images) must be a differencing or undo images.
280 * Linkage is checked for differencing image to be in consistence with the previously opened image.
281 * When a next differencing image is opened and the last image was opened in read/write access
282 * mode, then the last image is reopened in read-only with deny write sharing mode. This allows
283 * other processes to use images in read-only mode too.
284 *
285 * Note that the image can be opened in read-only mode if a read/write open is not possible.
286 * Use VDIDiskIsReadOnly to check open mode.
287 *
288 * @returns VBox status code.
289 * @param pDisk Pointer to VDI HDD container.
290 * @param pszFilename Name of the image file to open.
291 * @param fOpen Image file open mode, see VDI_OPEN_FLAGS_* constants.
292 */
293VBOXDDU_DECL(int) VDIDiskOpenImage(PVDIDISK pDisk, const char *pszFilename, unsigned fOpen);
294
295/**
296 * Creates and opens a new differencing image file in HDD container.
297 * See comments for VDIDiskOpenImage function about differencing images.
298 *
299 * @returns VBox status code.
300 * @param pDisk Pointer to VDI HDD container.
301 * @param pszFilename Name of the image file to create and open.
302 * @param pszComment Pointer to image comment. NULL is ok.
303 * @param pfnProgress Progress callback. Optional. NULL if not to be used.
304 * @param pvUser User argument for the progress callback.
305 */
306VBOXDDU_DECL(int) VDIDiskCreateOpenDifferenceImage(PVDIDISK pDisk, const char *pszFilename, const char *pszComment,
307 PFNVMPROGRESS pfnProgress, void *pvUser);
308
309/**
310 * Closes the last opened image file in the HDD container. Leaves all changes inside it.
311 * If previous image file was opened in read-only mode (that is normal) and closing image
312 * was opened in read-write mode (the whole disk was in read-write mode) - the previous image
313 * will be reopened in read/write mode.
314 *
315 * @param pDisk Pointer to VDI HDD container.
316 */
317VBOXDDU_DECL(void) VDIDiskCloseImage(PVDIDISK pDisk);
318
319/**
320 * Closes all opened image files in HDD container.
321 *
322 * @param pDisk Pointer to VDI HDD container.
323 */
324VBOXDDU_DECL(void) VDIDiskCloseAllImages(PVDIDISK pDisk);
325
326/**
327 * Commits last opened differencing/undo image file of the HDD container to previous image.
328 * If the previous image file was opened in read-only mode (that must be always so) it is reopened
329 * as read/write to do commit operation.
330 * After successfull commit the previous image file again reopened in read-only mode, last opened
331 * image file is cleared of data and remains open and active in HDD container.
332 * If you want to delete image after commit you must do it manually by VDIDiskCloseImage and
333 * VDIDeleteImage calls.
334 *
335 * Note that in case of unrecoverable error all images of HDD container will be closed.
336 *
337 * @returns VBox status code.
338 * @param pDisk Pointer to VDI HDD container.
339 * @param pfnProgress Progress callback. Optional.
340 * @param pvUser User argument for the progress callback.
341 */
342VBOXDDU_DECL(int) VDIDiskCommitLastDiff(PVDIDISK pDisk, PFNVMPROGRESS pfnProgress, void *pvUser);
343
344/**
345 * Get read/write mode of VDI HDD.
346 *
347 * @returns Disk ReadOnly status.
348 * @returns true if no one VDI image is opened in HDD container.
349 */
350VBOXDDU_DECL(bool) VDIDiskIsReadOnly(PVDIDISK pDisk);
351
352/**
353 * Get total disk size of the VDI HDD container.
354 *
355 * @returns Virtual disk size in bytes.
356 * @returns 0 if no one VDI image is opened in HDD container.
357 */
358VBOXDDU_DECL(uint64_t) VDIDiskGetSize(PVDIDISK pDisk);
359
360/**
361 * Get block size of the VDI HDD container.
362 *
363 * @returns VDI image block size in bytes.
364 * @returns 0 if no one VDI image is opened in HDD container.
365 */
366VBOXDDU_DECL(unsigned) VDIDiskGetBlockSize(PVDIDISK pDisk);
367
368/**
369 * Get working buffer size of the VDI HDD container.
370 *
371 * @returns Working buffer size in bytes.
372 */
373VBOXDDU_DECL(unsigned) VDIDiskGetBufferSize(PVDIDISK pDisk);
374
375/**
376 * Get virtual disk PCHS geometry stored in image file.
377 *
378 * @returns VBox status code.
379 * @returns VERR_VDI_NOT_OPENED if no one VDI image is opened in HDD container.
380 * @returns VERR_VDI_GEOMETRY_NOT_SET if no geometry present in the HDD container.
381 * @param pDisk Pointer to VDI HDD container.
382 * @param pPCHSGeometry Where to store PCHS geometry. Not NULL.
383 */
384VBOXDDU_DECL(int) VDIDiskGetPCHSGeometry(PVDIDISK pDisk, PPDMMEDIAGEOMETRY pPCHSGeometry);
385
386/**
387 * Store virtual disk PCHS geometry into base image file of HDD container.
388 *
389 * Note that in case of unrecoverable error all images of HDD container will be closed.
390 *
391 * @returns VBox status code.
392 * @returns VERR_VDI_NOT_OPENED if no one VDI image is opened in HDD container.
393 * @param pDisk Pointer to VDI HDD container.
394 * @param pPCHSGeometry Where to store LCHS geometry. Not NULL.
395 */
396VBOXDDU_DECL(int) VDIDiskSetPCHSGeometry(PVDIDISK pDisk, PCPDMMEDIAGEOMETRY pPCHSGeometry);
397
398/**
399 * Get virtual disk LCHS geometry stored in image file.
400 *
401 * @returns VBox status code.
402 * @returns VERR_VDI_NOT_OPENED if no one VDI image is opened in HDD container.
403 * @returns VERR_VDI_GEOMETRY_NOT_SET if no geometry present in the HDD container.
404 * @param pDisk Pointer to VDI HDD container.
405 * @param pLCHSGeometry Where to store LCHS geometry. Not NULL.
406 */
407VBOXDDU_DECL(int) VDIDiskGetLCHSGeometry(PVDIDISK pDisk, PPDMMEDIAGEOMETRY pLCHSGeometry);
408
409/**
410 * Store virtual disk LCHS geometry into base image file of HDD container.
411 *
412 * Note that in case of unrecoverable error all images of HDD container will be closed.
413 *
414 * @returns VBox status code.
415 * @returns VERR_VDI_NOT_OPENED if no one VDI image is opened in HDD container.
416 * @param pDisk Pointer to VDI HDD container.
417 * @param pLCHSGeometry Where to store LCHS geometry. Not NULL.
418 */
419VBOXDDU_DECL(int) VDIDiskSetLCHSGeometry(PVDIDISK pDisk, PCPDMMEDIAGEOMETRY pLCHSGeometry);
420
421/**
422 * Get number of opened images in HDD container.
423 *
424 * @returns Number of opened images for HDD container. 0 if no images has been opened.
425 * @param pDisk Pointer to VDI HDD container.
426 */
427VBOXDDU_DECL(int) VDIDiskGetImagesCount(PVDIDISK pDisk);
428
429/**
430 * Get version of opened image of HDD container.
431 *
432 * @returns VBox status code.
433 * @returns VERR_VDI_IMAGE_NOT_FOUND if image with specified number was not opened.
434 * @param pDisk Pointer to VDI HDD container.
435 * @param nImage Image number, counts from 0. 0 is always base image of container.
436 * @param puVersion Where to store the image version.
437 */
438VBOXDDU_DECL(int) VDIDiskGetImageVersion(PVDIDISK pDisk, int nImage, unsigned *puVersion);
439
440/**
441 * Get type of opened image of HDD container.
442 *
443 * @returns VBox status code.
444 * @returns VERR_VDI_IMAGE_NOT_FOUND if image with specified number was not opened.
445 * @param pDisk Pointer to VDI HDD container.
446 * @param nImage Image number, counts from 0. 0 is always base image of container.
447 * @param penmType Where to store the image type.
448 */
449VBOXDDU_DECL(int) VDIDiskGetImageType(PVDIDISK pDisk, int nImage, PVDIIMAGETYPE penmType);
450
451/**
452 * Get flags of opened image of HDD container.
453 *
454 * @returns VBox status code.
455 * @returns VERR_VDI_IMAGE_NOT_FOUND if image with specified number was not opened.
456 * @param pDisk Pointer to VDI HDD container.
457 * @param nImage Image number, counts from 0. 0 is always base image of container.
458 * @param pfFlags Where to store the image flags.
459 */
460VBOXDDU_DECL(int) VDIDiskGetImageFlags(PVDIDISK pDisk, int nImage, unsigned *pfFlags);
461
462/**
463 * Get filename of opened image of HDD container.
464 *
465 * @returns VBox status code.
466 * @returns VERR_VDI_IMAGE_NOT_FOUND if image with specified number was not opened.
467 * @returns VERR_BUFFER_OVERFLOW if pszFilename buffer too small to hold filename.
468 * @param pDisk Pointer to VDI HDD container.
469 * @param nImage Image number, counts from 0. 0 is always base image of container.
470 * @param pszFilename Where to store the image file name.
471 * @param cbFilename Size of buffer pszFilename points to.
472 */
473VBOXDDU_DECL(int) VDIDiskGetImageFilename(PVDIDISK pDisk, int nImage, char *pszFilename, unsigned cbFilename);
474
475/**
476 * Get the comment line of opened image of HDD container.
477 *
478 * @returns VBox status code.
479 * @returns VERR_VDI_IMAGE_NOT_FOUND if image with specified number was not opened.
480 * @returns VERR_BUFFER_OVERFLOW if pszComment buffer too small to hold comment text.
481 * @param pDisk Pointer to VDI HDD container.
482 * @param nImage Image number, counts from 0. 0 is always base image of container.
483 * @param pszComment Where to store the comment string of image. NULL is ok.
484 * @param cbComment The size of pszComment buffer. 0 is ok.
485 */
486VBOXDDU_DECL(int) VDIDiskGetImageComment(PVDIDISK pDisk, int nImage, char *pszComment, unsigned cbComment);
487
488/**
489 * Get Uuid of opened image of HDD container.
490 *
491 * @returns VBox status code.
492 * @returns VERR_VDI_IMAGE_NOT_FOUND if image with specified number was not opened.
493 * @param pDisk Pointer to VDI HDD container.
494 * @param nImage Image number, counts from 0. 0 is always base image of container.
495 * @param pUuid Where to store the image creation uuid.
496 */
497VBOXDDU_DECL(int) VDIDiskGetImageUuid(PVDIDISK pDisk, int nImage, PRTUUID pUuid);
498
499/**
500 * Get last modification Uuid of opened image of HDD container.
501 *
502 * @returns VBox status code.
503 * @returns VERR_VDI_IMAGE_NOT_FOUND if image with specified number was not opened.
504 * @param pDisk Pointer to VDI HDD container.
505 * @param nImage Image number, counts from 0. 0 is always base image of container.
506 * @param pUuid Where to store the image modification uuid.
507 */
508VBOXDDU_DECL(int) VDIDiskGetImageModificationUuid(PVDIDISK pDisk, int nImage, PRTUUID pUuid);
509
510/**
511 * Get Uuid of opened image's parent image.
512 *
513 * @returns VBox status code.
514 * @returns VERR_VDI_IMAGE_NOT_FOUND if image with specified number was not opened.
515 * @param pDisk Pointer to VDI HDD container.
516 * @param nImage Image number, counts from 0. 0 is always base image of the container.
517 * @param pUuid Where to store the image creation uuid.
518 */
519VBOXDDU_DECL(int) VDIDiskGetParentImageUuid(PVDIDISK pDisk, int nImage, PRTUUID pUuid);
520
521/**
522 * Read data from virtual HDD.
523 *
524 * @returns VBox status code.
525 * @param pDisk Pointer to VDI HDD container.
526 * @param offStart Offset of first reading byte from start of disk.
527 * @param pvBuf Pointer to buffer for reading data.
528 * @param cbToRead Number of bytes to read.
529 */
530VBOXDDU_DECL(int) VDIDiskRead(PVDIDISK pDisk, uint64_t offStart, void *pvBuf, size_t cbToRead);
531
532/**
533 * Write data to virtual HDD.
534 *
535 * @returns VBox status code.
536 * @param pDisk Pointer to VDI HDD container.
537 * @param offStart Offset of first writing byte from start of HDD.
538 * @param pvBuf Pointer to buffer of writing data.
539 * @param cbToWrite Number of bytes to write.
540 */
541VBOXDDU_DECL(int) VDIDiskWrite(PVDIDISK pDisk, uint64_t offStart, const void *pvBuf, size_t cbToWrite);
542
543
544
545/**
546 * Debug helper - dumps all opened images of HDD container into the log file.
547 *
548 * @param pDisk Pointer to VDI HDD container.
549 */
550VBOXDDU_DECL(void) VDIDiskDumpImages(PVDIDISK pDisk);
551
552__END_DECLS
553
554/** @} */
555
556#endif
Note: See TracBrowser for help on using the repository browser.

© 2023 Oracle
ContactPrivacy policyTerms of Use