VirtualBox

source: vbox/trunk/src/VBox/Devices/Storage/VBoxHDD-newInternal.h@ 2833

Last change on this file since 2833 was 2742, checked in by vboxsync, 18 years ago

Implement determining image flags on open. Also partial implementation
of comment support. Don't put anything non-ASCII in there. Comment
support is untested.

File size: 12.1 KB
Line 
1/** @file
2 * Internal header file for VBox HDD Container.
3 */
4
5/*
6 * Copyright (C) 2006 InnoTek Systemberatung 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 as published by the Free Software Foundation,
12 * in version 2 as it comes in the "COPYING" file of the VirtualBox OSE
13 * distribution. VirtualBox OSE is distributed in the hope that it will
14 * be useful, but WITHOUT ANY WARRANTY of any kind.
15 *
16 * If you received this file as part of a commercial VirtualBox
17 * distribution, then only the terms of your commercial VirtualBox
18 * license agreement apply instead of the previous paragraph.
19 */
20
21#ifndef __VBoxHDD_newInternal_h__
22
23
24#include <VBox/pdm.h>
25#include <VBox/VBoxHDD-new.h>
26
27
28/**
29 * Image format backend interface used by VBox HDD Container implementation.
30 */
31typedef struct VBOXHDDBACKEND
32{
33 /**
34 * Open a disk image.
35 *
36 * @returns VBox status code.
37 * @param pszFilename Name of the image file to open. Guaranteed to be available and
38 * unchanged during the lifetime of this image.
39 * @param uOpenFlags Image file open mode, see VD_OPEN_FLAGS_* constants.
40 * @param pfnError Callback for setting extended error information.
41 * @param pvErrorUser Opaque parameter for pfnError.
42 * @param ppvBackendData Opaque state data for this image.
43 */
44 DECLR3CALLBACKMEMBER(int, pfnOpen, (const char *pszFilename, unsigned uOpenFlags, PFNVDERROR pfnError, void *pvErrorUser, void **ppvBackendData));
45
46 /**
47 * Create a disk image.
48 *
49 * @returns VBox status code.
50 * @param pszFilename Name of the image file to create. Guaranteed to be available and
51 * unchanged during the lifetime of this image.
52 * @param enmType Image type. Both base and diff image types are valid.
53 * @param cbSize Image size in bytes.
54 * @param uImageFlags Flags specifying special image features.
55 * @param pszComment Pointer to image comment. NULL is ok.
56 * @param cCylinders Number of cylinders (must be <= 16383).
57 * @param cHeads Number of heads (must be <= 16).
58 * @param cSectors Number of sectors (must be <= 63).
59 * @param uOpenFlags Image file open mode, see VD_OPEN_FLAGS_* constants.
60 * @param pfnProgress Progress callback. Optional. NULL if not to be used.
61 * @param pvUser User argument for the progress callback.
62 * @param pfnError Callback for setting extended error information.
63 * @param pvErrorUser Opaque parameter for pfnError.
64 * @param ppvBackendData Opaque state data for this image.
65 */
66 DECLR3CALLBACKMEMBER(int, pfnCreate, (const char *pszFilename, VDIMAGETYPE enmType, uint64_t cbSize, unsigned uImageFlags, const char *pszComment, uint32_t cCylinders, uint32_t cHeads, uint32_t cSectors, unsigned uOpenFlags, PFNVMPROGRESS pfnProgress, void *pvUser, PFNVDERROR pfnError, void *pvErrorUser, void **ppvBackendData));
67
68 /**
69 * Close a disk image.
70 *
71 * @returns VBox status code.
72 * @param pvBackendData Opaque state data for this image.
73 * @param fDelete If true, delete the image from the host disk.
74 */
75 DECLR3CALLBACKMEMBER(int, pfnClose, (void *pvBackendData, bool fDelete));
76
77 /**
78 * Read data from a disk image. The area read never crosses a block
79 * boundary.
80 *
81 * @returns VBox status code.
82 * @returns VINF_VDI_BLOCK_FREE if this image contains no data for this block.
83 * @param pvBackendData Opaque state data for this image.
84 * @param off Offset to start reading from.
85 * @param pvBuf Where to store the read bits.
86 * @param cbRead Number of bytes to read.
87 * @param pcbActuallyRead Pointer to returned number of bytes read.
88 */
89 DECLR3CALLBACKMEMBER(int, pfnRead, (void *pvBackendData, uint64_t off, void *pvBuf, size_t cbRead, size_t *pcbActuallyRead));
90
91 /**
92 * Write data to a disk image. The area written never crosses a block
93 * boundary.
94 *
95 * @returns VBox status code.
96 * @returns VINF_VDI_BLOCK_FREE if this image contains no data for this block and
97 * this is not a full-block write. The write must be repeated with
98 * the correct amount of prefix/postfix data read from the images below
99 * in the image stack. This might not be the most convenient interface,
100 * but it works with arbitrary block sizes, especially when the image
101 * stack uses different block sizes.
102 * @param pvBackendData Opaque state data for this image.
103 * @param off Offset to start writing to.
104 * @param pvBuf Where to retrieve the written bits.
105 * @param cbWrite Number of bytes to write.
106 * @param pcbWriteProcess Pointer to returned number of bytes that could
107 * be processed. In case the function returned
108 * VINF_VDI_BLOCK_FREE this is the number of bytes
109 * that could be written in a full block write,
110 * when prefixed/postfixed by the appropriate
111 * amount of (previously read) padding data.
112 * @param pcbPreRead Pointer to the returned amount of data that must
113 * be prefixed to perform a full block write.
114 * @param pcbPostRead Pointer to the returned amount of data that must
115 * be postfixed to perform a full block write.
116 */
117 DECLR3CALLBACKMEMBER(int, pfnWrite, (void *pvBackendData, uint64_t off, const void *pvBuf, size_t cbWrite, size_t *pcbWriteProcess, size_t *pcbPreRead, size_t *pcbPostRead));
118
119 /**
120 * Flush data to disk.
121 *
122 * @returns VBox status code.
123 * @param pvBackendData Opaque state data for this image.
124 */
125 DECLR3CALLBACKMEMBER(int, pfnFlush, (void *pvBackendData));
126
127 /**
128 * Get the type information for a disk image.
129 *
130 * @returns VBox status code.
131 * @param pvBackendData Opaque state data for this image.
132 * @param penmType Image type of this image.
133 */
134 DECLR3CALLBACKMEMBER(int, pfnGetImageType, (void *pvBackendData, PVDIMAGETYPE penmType));
135
136 /**
137 * Get the size of a disk image.
138 *
139 * @returns size of disk image.
140 * @param pvBackendData Opaque state data for this image.
141 */
142 DECLR3CALLBACKMEMBER(uint64_t, pfnGetSize, (void *pvBackendData));
143
144 /**
145 * Get virtual disk geometry stored in a disk image.
146 *
147 * @returns VBox status code.
148 * @returns VERR_VDI_GEOMETRY_NOT_SET if no geometry present in the image.
149 * @param pvBackendData Opaque state data for this image.
150 * @param pcCylinders Where to store the number of cylinders. Never NULL.
151 * @param pcHeads Where to store the number of heads. Never NULL.
152 * @param pcSectors Where to store the number of sectors. Never NULL.
153 */
154 DECLR3CALLBACKMEMBER(int, pfnGetGeometry, (void *pvBackendData, unsigned *pcCylinders, unsigned *pcHeads, unsigned *pcSectors));
155
156 /**
157 * Set virtual disk geometry stored in a disk image.
158 * Only called if geometry is different than before.
159 *
160 * @returns VBox status code.
161 * @param pvBackendData Opaque state data for this image.
162 * @param cCylinders Number of cylinders.
163 * @param cHeads Number of heads.
164 * @param cSectors Number of sectors.
165 */
166 DECLR3CALLBACKMEMBER(int, pfnSetGeometry, (void *pvBackendData, unsigned cCylinders, unsigned cHeads, unsigned cSectors));
167
168 /**
169 * Get virtual disk translation mode stored in a disk image.
170 *
171 * @returns VBox status code.
172 * @returns VERR_VDI_GEOMETRY_NOT_SET if no geometry present in the image.
173 * @param pvBackendData Opaque state data for this image.
174 * @param penmTranslation Where to store the translation mode. Never NULL.
175 */
176 DECLR3CALLBACKMEMBER(int, pfnGetTranslation, (void *pvBackendData, PPDMBIOSTRANSLATION penmTranslation));
177
178 /**
179 * Set virtual disk translation mode stored in a disk image.
180 * Only called if translation mode is different than before.
181 *
182 * @returns VBox status code.
183 * @param pvBackendData Opaque state data for this image.
184 * @param enmTranslation New translation mode.
185 */
186 DECLR3CALLBACKMEMBER(int, pfnSetTranslation, (void *pvBackendData, PDMBIOSTRANSLATION enmTranslation));
187
188 /**
189 * Get the open flags of a disk image.
190 *
191 * @returns open flags of disk image.
192 * @param pvBackendData Opaque state data for this image.
193 */
194 DECLR3CALLBACKMEMBER(unsigned, pfnGetOpenFlags, (void *pvBackendData));
195
196 /**
197 * Set the open flags of a disk image. May cause the image to be locked
198 * in a different mode or be reopened (which can fail).
199 *
200 * @returns VBox status code.
201 * @param pvBackendData Opaque state data for this image.
202 * @param uOpenFlags New open flags for this image.
203 */
204 DECLR3CALLBACKMEMBER(int, pfnSetOpenFlags, (void *pvBackendData, unsigned uOpenFlags));
205
206 /**
207 * Get comment of a disk image.
208 *
209 * @returns VBox status code.
210 * @param pvBackendData Opaque state data for this image.
211 * @param pszComment Where to store the comment.
212 * @param cbComment Size of the comment buffer.
213 */
214 DECLR3CALLBACKMEMBER(int, pfnGetComment, (void *pvBackendData, char *pszComment, size_t cbComment));
215
216 /**
217 * Set comment of a disk image.
218 *
219 * @returns VBox status code.
220 * @param pvBackendData Opaque state data for this image.
221 * @param pszComment Where to get the comment from. NULL resets comment.
222 * The comment is silently truncated if the image format
223 * limit is exceeded.
224 */
225 DECLR3CALLBACKMEMBER(int, pfnSetComment, (void *pvBackendData, const char *pszComment));
226
227 /**
228 * Get UUID of a disk image.
229 *
230 * @returns VBox status code.
231 * @param pvBackendData Opaque state data for this image.
232 * @param pUuid Where to store the image UUID.
233 */
234 DECLR3CALLBACKMEMBER(int, pfnGetUuid, (void *pvBackendData, PRTUUID pUuid));
235
236 /**
237 * Set UUID of a disk image.
238 *
239 * @returns VBox status code.
240 * @param pvBackendData Opaque state data for this image.
241 * @param pUuid Where to get the image UUID from.
242 */
243 DECLR3CALLBACKMEMBER(int, pfnSetUuid, (void *pvBackendData, PCRTUUID pUuid));
244
245 /**
246 * Get last modification UUID of a disk image.
247 *
248 * @returns VBox status code.
249 * @param pvBackendData Opaque state data for this image.
250 * @param pUuid Where to store the image modification UUID.
251 */
252 DECLR3CALLBACKMEMBER(int, pfnGetModificationUuid, (void *pvBackendData, PRTUUID pUuid));
253
254 /**
255 * Set last modification UUID of a disk image.
256 *
257 * @returns VBox status code.
258 * @param pvBackendData Opaque state data for this image.
259 * @param pUuid Where to get the image modification UUID from.
260 */
261 DECLR3CALLBACKMEMBER(int, pfnSetModificationUuid, (void *pvBackendData, PCRTUUID pUuid));
262
263 /**
264 * Get parent UUID of a disk image.
265 *
266 * @returns VBox status code.
267 * @param pvBackendData Opaque state data for this image.
268 * @param pUuid Where to store the parent image UUID.
269 */
270 DECLR3CALLBACKMEMBER(int, pfnGetParentUuid, (void *pvBackendData, PRTUUID pUuid));
271
272 /**
273 * Set parent UUID of a disk image.
274 *
275 * @returns VBox status code.
276 * @param pvBackendData Opaque state data for this image.
277 * @param pUuid Where to get the parent image UUID from.
278 */
279 DECLR3CALLBACKMEMBER(int, pfnSetParentUuid, (void *pvBackendData, PCRTUUID pUuid));
280
281} VBOXHDDBACKEND, *PVBOXHDDBACKEND;
282
283
284#endif
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