VirtualBox

source: vbox/trunk/include/iprt/formats/iso9660.h@ 66728

Last change on this file since 66728 was 66728, checked in by vboxsync, 8 years ago

iprt/formats/iso9660.h: Basic structures ISO 9660 structures.

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 22.9 KB
Line 
1/* $Id: iso9660.h 66728 2017-04-29 01:04:56Z vboxsync $ */
2/** @file
3 * IPRT, ISO 9660 File System
4 */
5
6/*
7 * Copyright (C) 2017 Oracle Corporation
8 *
9 * This file is part of VirtualBox Open Source Edition (OSE), as
10 * available from http://www.virtualbox.org. This file is free software;
11 * you can redistribute it and/or modify it under the terms of the GNU
12 * General Public License (GPL) as published by the Free Software
13 * Foundation, in version 2 as it comes in the "COPYING" file of the
14 * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
15 * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
16 *
17 * The contents of this file may alternatively be used under the terms
18 * of the Common Development and Distribution License Version 1.0
19 * (CDDL) only, as it comes in the "COPYING.CDDL" file of the
20 * VirtualBox OSE distribution, in which case the provisions of the
21 * CDDL are applicable instead of those of the GPL.
22 *
23 * You may elect to license modified versions of this file under the
24 * terms and conditions of either the GPL or the CDDL or both.
25 */
26
27#ifndef ___iprt_formats_iso9660_h
28#define ___iprt_formats_iso9660_h
29
30#include <iprt/types.h>
31#include <iprt/assert.h>
32
33
34/** @defgroup grp_rt_formats_iso9660 ISO 9660 structures and definitions
35 * @ingroup grp_rt_formats
36 * @{
37 */
38
39
40/** The (default) logical sectors size of ISO 9660. */
41#define ISO9660_SECTOR_SIZE 2048
42
43
44/**
45 * ISO 9660 16-bit unsigned integer type.
46 */
47typedef struct ISO9660U16
48{
49 /** Little endian. */
50 uint16_t le;
51 /** Big endian. */
52 uint16_t be;
53} ISO9660U16;
54/** Pointer to an ISO 9660 16-bit unsigned integer type. */
55typedef ISO9660U16 *PISO9660U16;
56/** Pointer to a const ISO 9660 16-bit unsigned integer type. */
57typedef ISO9660U16 const *PCISO9660U16;
58
59/** ISO 9660 big endian 16-bit unsigned integer. */
60typedef uint16_t ISO9660U16BE;
61
62
63/**
64 * ISO 9660 32-bit unsigned integer type.
65 */
66typedef struct ISO9660U32
67{
68 /** Little endian. */
69 uint32_t le;
70 /** Big endian. */
71 uint32_t be;
72} ISO9660U32;
73/** Pointer to an ISO 9660 32-bit unsigned integer type. */
74typedef ISO9660U32 *PISO9660U32;
75/** Pointer to a const ISO 9660 32-bit unsigned integer type. */
76typedef ISO9660U32 const *PCISO9660U32;
77
78/** ISO 9660 little endian 32-bit unsigned integer. */
79typedef uint32_t ISO9660U32LE;
80/** ISO 9660 big endian 32-bit unsigned integer. */
81typedef uint32_t ISO9660U32BE;
82
83/**
84 * ISO 9660 timestamp (date & time).
85 */
86typedef struct ISO9660TIMESTAMP
87{
88 /** 0x00: For digit year (0001-9999). */
89 char achYear[4];
90 /** 0x04: Month of the year (01-12). */
91 char achMonth[2];
92 /** 0x06: Day of month (01-31). */
93 char achDay[2];
94 /** 0x08: Hour of day (00-23). */
95 char achHour[2];
96 /** 0x0a: Minute of hour (00-59). */
97 char achMinute[2];
98 /** 0x0c: Second of minute (00-59). */
99 char achSecond[2];
100 /** 0x0e: Hundreth of second (00-99). */
101 char achCentisecond[2];
102 /** 0x10: The UCT (GMT) offset in 15 min units. */
103 int8_t offUct;
104} ISO9660TIMESTAMP;
105AssertCompileSize(ISO9660TIMESTAMP, 17);
106/** Pointer to an ISO 9660 timestamp. */
107typedef ISO9660TIMESTAMP *PISO9660TIMESTAMP;
108/** Pointer to a const ISO 9660 timestamp. */
109typedef ISO9660TIMESTAMP const *PCISO9660TIMESTAMP;
110
111/**
112 * ISO 9660 record timestamp (date & time).
113 */
114typedef struct ISO9660RECTIMESTAMP
115{
116 /** 0: Years since 1900. */
117 uint8_t uYear;
118 /** 1: Month of year (1-12). */
119 uint8_t uMonth;
120 /** 2: Day of month (1-31). */
121 uint8_t uDay;
122 /** 3: Hour of day (0-23). */
123 uint8_t uHour;
124 /** 4: Minute of hour (0-59). */
125 uint8_t uMinute;
126 /** 5: Second of minute (0-59). */
127 uint8_t uSecond;
128 /** 6: The UCT (GMT) offset in 15 min units. */
129 int8_t offUct;
130} ISO9660RECTIMESTAMP;
131AssertCompileSize(ISO9660RECTIMESTAMP, 7);
132/** Pointer to an ISO 9660 record timestamp. */
133typedef ISO9660RECTIMESTAMP *PISO9660RECTIMESTAMP;
134/** Pointer to a const ISO 9660 record timestamp. */
135typedef ISO9660RECTIMESTAMP const *PCISO9660RECTIMESTAMP;
136
137
138/**
139 * ISO 9660 directory record.
140 */
141#pragma pack(1)
142typedef struct ISO9660DIRREC
143{
144 /** 0x00: Length of this record in bytes. */
145 uint8_t cbDirRec;
146 /** 0x01: Extended attribute record length in bytes? */
147 uint8_t cbExtAttr;
148 /** 0x02: Location of extent (logical block number).
149 * @note Misaligned. */
150 ISO9660U32 offExtent;
151 /** 0x0a: Size of the data (file section). Does not include EAs.
152 * @note Misaligned. */
153 ISO9660U32 cbData;
154 /** 0x12: Recording time and date. */
155 ISO9660RECTIMESTAMP RecTime;
156 /** 0x19: File flags (ISO9660_FILE_FLAGS_XXX). */
157 uint8_t fFileFlags;
158 /** 0x1a: File unit size for interlaved mode. */
159 uint8_t bFileUnitSize;
160 /** 0x1b: Interlave gap size. */
161 uint8_t bInterleaveGapSize;
162 /** 0x1c: Volume sequence number where the extent resides. */
163 ISO9660U16 VolumeSeqNo;
164 /** 0x20: Length of file identifier field. */
165 uint8_t bFileIdLength;
166 /** 0x21: File identifier (d-characters or d1-characters). */
167 char achFileId[1];
168 /* There are more fields following:
169 * - one byte optional padding so the following field is at an even boundrary.
170 * - system use field until cbDirRec is reached.
171 */
172} ISO9660DIRREC;
173#pragma pack()
174AssertCompileMemberOffset(ISO9660DIRREC, offExtent, 0x02);
175AssertCompileMemberOffset(ISO9660DIRREC, cbData, 0x0a);
176AssertCompileMemberOffset(ISO9660DIRREC, RecTime, 0x12);
177AssertCompileMemberOffset(ISO9660DIRREC, fFileFlags, 0x19);
178AssertCompileMemberOffset(ISO9660DIRREC, bFileIdLength, 0x20);
179AssertCompileMemberOffset(ISO9660DIRREC, achFileId, 0x21);
180
181/** @name ISO9660_FILE_FLAGS_XXX
182 * @{ */
183/** Existence - Hide the file from the user. */
184#define ISO9660_FILE_FLAGS_HIDDEN UINT8_C(0x01)
185/** Directory - Indicates a directory as apposed to a regular file (0). */
186#define ISO9660_FILE_FLAGS_DIRECTORY UINT8_C(0x02)
187/** Assocated File - Indicates that the file is an associated file. */
188#define ISO9660_FILE_FLAGS_ASSOCIATED_FILE UINT8_C(0x04)
189/** Record - Indicates specified file content record format (see EAs). */
190#define ISO9660_FILE_FLAGS_RECORD UINT8_C(0x08)
191/** Protection - Indicates owner/group or permission protection in EAs. */
192#define ISO9660_FILE_FLAGS_PROTECTION UINT8_C(0x10)
193/** Reserved bit, MBZ. */
194#define ISO9660_FILE_FLAGS_RESERVED_5 UINT8_C(0x20)
195/** Reserved bit, MBZ. */
196#define ISO9660_FILE_FLAGS_RESERVED_6 UINT8_C(0x40)
197/** Multi-extend - Indicates that this isn't the final record for the file.
198 * @remarks Use for working around 4 GiB file size limitation. */
199#define ISO9660_FILE_FLAGS_MULTI_EXTENT UINT8_C(0x80)
200/** @} */
201
202
203/**
204 * ISO 9660 path table record.
205 */
206#pragma pack(1)
207typedef struct ISO9660PATHREC
208{
209 /** 0x00: Length of this record in bytes. */
210 uint8_t cbDirId;
211 /** 0x01: Extended attribute record length in bytes? */
212 uint8_t cbExtAttr;
213 /** 0x02: Location of extent (logical block number).
214 * @note Endianess depends on table.
215 * @note Misaligned. */
216 uint32_t offExtent;
217 /** 0x06: Parent directory number.
218 * @note Endianess depends on table. */
219 uint16_t idParentRec;
220 /** 0x08: Directory identifier (d-characters or d1-characters). */
221 char achDirId[RT_FLEXIBLE_ARRAY];
222 /* There will be a zero padding byte following if the directory identifier length is odd. */
223} ISO9660PATHREC;
224#pragma pack()
225AssertCompileMemberOffset(ISO9660PATHREC, cbExtAttr, 0x01);
226AssertCompileMemberOffset(ISO9660PATHREC, offExtent, 0x02);
227AssertCompileMemberOffset(ISO9660PATHREC, idParentRec, 0x06);
228AssertCompileMemberOffset(ISO9660PATHREC, achDirId, 0x08);
229
230
231/**
232 * ISO 9660 extended attribute record.
233 */
234typedef struct ISO9660EXATTRREC
235{
236 /** 0x000: The owener ID. */
237 ISO9660U16 idOwner;
238 /** 0x004: The owener ID. */
239 ISO9660U16 idGroup;
240 /** 0x008: File permissions (ISO9660_PERM_XXX). */
241 ISO9660U16BE fPermissions;
242 /** 0x00a: File creation timestamp. */
243 ISO9660TIMESTAMP BirthTimestamp;
244 /** 0x01b: File modification timestamp. */
245 ISO9660TIMESTAMP ModifyTimestamp;
246 /** 0x02c: File expiration timestamp. */
247 ISO9660TIMESTAMP ExpireTimestamp;
248 /** 0x03d: File effective timestamp. */
249 ISO9660TIMESTAMP EffectiveTimestamp;
250 /** 0x04e: Record format. */
251 uint8_t bRecordFormat;
252 /** 0x04f: Record attributes. */
253 uint8_t fRecordAttrib;
254 /** 0x050: Record length. */
255 ISO9660U16 RecordLength;
256 /** 0x054: System identifier (a-characters or a1-characters). */
257 char achSystemId[0x20];
258 /** 0x074: System specific bytes. */
259 uint8_t abSystemUse[64];
260 /** 0x0b4: Extended attribute record version (ISO9660EXATTRREC_VERSION). */
261 uint8_t bExtRecVersion;
262 /** 0x0b5: Length of escape sequences. */
263 uint8_t cbEscapeSequences;
264 /** 0x0b6: Reserved for the future, MBZ. */
265 uint8_t abReserved183[64];
266 /** 0x0f6: Length of the application use field. */
267 ISO9660U16 cbAppUse;
268 /** 0x0fa: Variable sized application use field. */
269 uint8_t abAppUse[RT_FLEXIBLE_ARRAY];
270 /* This is followed by escape sequences with length given by cbEscapeSequnces. */
271} ISO9660EXATTRREC;
272AssertCompileMemberOffset(ISO9660EXATTRREC, EffectiveTimestamp, 0x03d);
273AssertCompileMemberOffset(ISO9660EXATTRREC, cbAppUse, 0x0f6);
274
275/** The ISO9660EXATTRREC::bExtRecVersion value. */
276#define ISO9660EXATTRREC_VERSION UINT8_C(0x01)
277
278/** @name ISO9660_PERM_XXX - ISO9660EXATTRREC::fPermissions
279 * @{ */
280/** @todo figure out this wird permsission stuff... */
281/** @} */
282
283
284/**
285 * ISO 9660 volume descriptor header.
286 */
287typedef struct ISO9660VOLDESCHDR
288{
289 /** Descriptor type ISO9660VOLDESC_TYPE_XXX. */
290 uint8_t bDescType;
291 /** Standard identifier 'CD001' */
292 uint8_t achStdId[5];
293 /** The descriptor version. */
294 uint8_t bDescVersion;
295 /* (This is followed by the descriptor specific data). */
296} ISO9660VOLDESCHDR;
297AssertCompileSize(ISO9660VOLDESCHDR, 7);
298/** Pointer to a volume descriptor header. */
299typedef ISO9660VOLDESCHDR *PISO9660VOLDESCHDR;
300/** Pointer to a const volume descriptor header. */
301typedef ISO9660VOLDESCHDR const *PCISO9660VOLDESCHDR;
302
303/** @name ISO9660VOLDESC_TYPE_XXX - volume descriptor types
304 * @{ */
305/** See ISO9660BOOTRECORD. */
306#define ISO9660VOLDESC_TYPE_BOOT_RECORD UINT8_C(0x00)
307#define ISO9660VOLDESC_TYPE_PRIMARY UINT8_C(0x01)
308#define ISO9660VOLDESC_TYPE_SUPPLEMENTARY UINT8_C(0x02)
309#define ISO9660VOLDESC_TYPE_PARTITION UINT8_C(0x03)
310/** Terminates the volume descriptor set. Has no data (zeros). */
311#define ISO9660VOLDESC_TYPE_TERMINATOR UINT8_C(0xff)
312/** @} */
313
314/** The value of ISO9660VOLDESCHDR::achStdId */
315#define ISO9660VOLDESC_STD_ID "CD001"
316#define ISO9660VOLDESC_STD_ID_0 'C'
317#define ISO9660VOLDESC_STD_ID_1 'D'
318#define ISO9660VOLDESC_STD_ID_2 '0'
319#define ISO9660VOLDESC_STD_ID_3 '0'
320#define ISO9660VOLDESC_STD_ID_4 '1'
321
322
323
324/**
325 * ISO 9660 boot record (volume descriptor).
326 */
327typedef struct ISO9660BOOTRECORD
328{
329 /** The volume descriptor header.
330 * Type is ISO9660VOLDESC_TYPE_BOOT_RECORD and version
331 * ISO9660BOOTRECORD_VERSION. */
332 ISO9660VOLDESCHDR Hdr;
333 /** Boot system identifier string (a-characters). */
334 char achBootSystemId[32];
335 /** Boot identifier (a-characters). */
336 char achBootId[32];
337 /** Boot system specific content. */
338 uint8_t abBootSystemSpecific[1977];
339} ISO9660BOOTRECORD;
340AssertCompileSize(ISO9660BOOTRECORD, ISO9660_SECTOR_SIZE);
341/** Pointer to a ISO 9660 boot record. */
342typedef ISO9660BOOTRECORD *PISO9660BOOTRECORD;
343/** Pointer to a const ISO 9660 boot record. */
344typedef ISO9660BOOTRECORD const *PCISO9660BOOTRECORD;
345
346/** The value of ISO9660BOOTRECORD::Hdr.uDescVersion. */
347#define ISO9660BOOTRECORD_VERSION UINT8_C(1)
348
349
350
351/**
352 * ISO 9660 primary volume descriptor.
353 */
354typedef struct ISO9660PRIMARYVOLDESC
355{
356 /** 0x000: The volume descriptor header.
357 * Type is ISO9660VOLDESC_TYPE_PRIMARY and version
358 * ISO9660PRIMARYVOLDESC_VERSION. */
359 ISO9660VOLDESCHDR Hdr;
360 /** 0x007: Explicit alignment zero padding. */
361 uint8_t bPadding8;
362 /** 0x008: System identifier (a-characters). */
363 char achSystemId[32];
364 /** 0x028: Volume identifier (d-characters). */
365 char achVolumeId[32];
366 /** 0x048: Unused field, zero filled. */
367 ISO9660U32 Unused73;
368 /** 0x050: Volume space size in logical blocks (cbLogicalBlock). */
369 ISO9660U32 VolumeSpaceSize;
370 /** 0x058: Unused field(s), zero filled. */
371 uint8_t abUnused89[32];
372 /** 0x078: The volume set size ??in bytes?? */
373 ISO9660U16 cbVolumeSet;
374 /** 0x07c: Volume sequence number. */
375 ISO9660U16 VolumeSeqNo;
376 /** 0x080: Logical block size in bytes. */
377 ISO9660U16 cbLogicalBlock;
378 /** 0x084: Path table size. */
379 ISO9660U32 cbPathTable;
380 /** 0x08c: Type L path table location (block offset). */
381 ISO9660U32LE offTypeLPathTable;
382 /** 0x090: Optional type L path table location (block offset). */
383 ISO9660U32LE offOptionalTypeLPathTable;
384 /** 0x094: Type M path table location (block offset). */
385 ISO9660U32BE offTypeMPathTable;
386 /** 0x098: Optional type M path table location (block offset). */
387 ISO9660U32BE offOptionalTypeMPathTable;
388 /** 0x09c: Directory entry for the root directory (union). */
389 union
390 {
391 uint8_t ab[34];
392 ISO9660DIRREC DirRec;
393 } RootDir;
394 /** 0x0be: Volume set identifier (d-characters). */
395 char achVolumeSetId[128];
396 /** 0x13e: Publisher identifier (a-characters). Alternatively, it may refere to
397 * a file in the root dir if it starts with 0x5f and restricts itself to 8
398 * d-characters. */
399 char achPublisherId[128];
400 /** 0x1be: Data preparer identifier (a-characters).
401 * Same file reference alternative as previous field. */
402 char achDataPreparerId[128];
403 /** 0x23e: Application identifier (a-characters).
404 * Same file reference alternative as previous field. */
405 char achApplicationId[128];
406 /** 0x2be: Copyright (root) file identifier (d-characters).
407 * All spaces if none. */
408 char achCopyrightFileId[37];
409 /** 0x2e3: Abstract (root) file identifier (d-characters).
410 * All spaces if none. */
411 char achAbstractFileId[37];
412 /** 0x308: Bibliographic file identifier (d-characters).
413 * All spaces if none. */
414 char achBibliographicFileId[37];
415 /** 0x32d: Volume creation date and time. */
416 ISO9660TIMESTAMP BirthTime;
417 /** 0x33e: Volume modification date and time. */
418 ISO9660TIMESTAMP ModifyTime;
419 /** 0x34f: Volume (data) expiration date and time.
420 * If not specified, don't regard data as obsolete. */
421 ISO9660TIMESTAMP ExpireTime;
422 /** 0x360: Volume (data) effective date and time.
423 * If not specified, info can be used immediately. */
424 ISO9660TIMESTAMP EffectiveTime;
425 /** 0x371: File structure version (ISO9660_FILE_STRUCTURE_VERSION). */
426 uint8_t uFileStructureVersion;
427 /** 0x372: Reserve for future, MBZ. */
428 uint8_t bReserved883;
429 /** 0x373: Reserve for future, MBZ. */
430 uint8_t abAppUse[512];
431 /** 0x573: Reserved for future standardization, MBZ. */
432 uint8_t abReserved1396[653];
433} ISO9660PRIMARYVOLDESC;
434AssertCompileSize(ISO9660PRIMARYVOLDESC, ISO9660_SECTOR_SIZE);
435/** Pointer to a ISO 9660 primary volume descriptor. */
436typedef ISO9660PRIMARYVOLDESC *PISO9660PRIMARYVOLDESC;
437/** Pointer to a const ISO 9660 primary volume descriptor. */
438typedef ISO9660PRIMARYVOLDESC const *PCISO9660PRIMARYVOLDESC;
439
440/** The value of ISO9660PRIMARYVOLDESC::Hdr.uDescVersion. */
441#define ISO9660PRIMARYVOLDESC_VERSION UINT8_C(1)
442/** The value of ISO9660PRIMARYVOLDESC::uFileStructureVersion and
443 * ISO9660SUPVOLDESC::uFileStructureVersion. */
444#define ISO9660_FILE_STRUCTURE_VERSION UINT8_C(1)
445
446
447
448/**
449 * ISO 9660 supplementary volume descriptor.
450 *
451 * This is in the large parts identicial to the primary descriptor, except it
452 * have a few more fields where the primary one has reserved spaces.
453 */
454typedef struct ISO9660SUPVOLDESC
455{
456 /** 0x000: The volume descriptor header.
457 * Type is ISO9660VOLDESC_TYPE_SUPPLEMENTARY and version
458 * ISO9660SUPVOLDESC_VERSION. */
459 ISO9660VOLDESCHDR Hdr;
460 /** 0x007: Volume flags (ISO9660SUPVOLDESC_VOL_F_XXX).
461 * @note This is reserved in the primary volume descriptor. */
462 uint8_t fVolumeFlags;
463 /** 0x008: System identifier (a1-characters) of system that can act upon
464 * sectors 0 thru 15.
465 * @note Purpose differs from primary description. */
466 char achSystemId[32];
467 /** 0x028: Volume identifier (d1-characters).
468 * @note Character set differs from primary description. */
469 char achVolumeId[32];
470 /** 0x048: Unused field, zero filled. */
471 ISO9660U32 Unused73;
472 /** 0x050: Volume space size in logical blocks (cbLogicalBlock). */
473 ISO9660U32 VolumeSpaceSize;
474 /** 0x058: Escape sequences.
475 * Complicated stuff, see ISO 2022 and ECMA-35.
476 * @note This is reserved in the primary volume descriptor. */
477 uint8_t achEscapeSequences[32];
478 /** 0x078: The volume set size ??in bytes?? */
479 ISO9660U16 cbVolumeSet;
480 /** 0x07c: Volume sequence number. */
481 ISO9660U16 VolumeSeqNo;
482 /** 0x080: Logical block size in bytes. */
483 ISO9660U16 cbLogicalBlock;
484 /** 0x084: Path table size. */
485 ISO9660U32 cbPathTable;
486 /** 0x08c: Type L path table location (block offset). */
487 ISO9660U32LE offTypeLPathTable;
488 /** 0x090: Optional type L path table location (block offset). */
489 ISO9660U32LE offOptionalTypeLPathTable;
490 /** 0x094: Type M path table location (block offset). */
491 ISO9660U32BE offTypeMPathTable;
492 /** 0x098: Optional type M path table location (block offset). */
493 ISO9660U32BE offOptionalTypeMPathTable;
494 /** 0x09c: Directory entry for the root directory (union). */
495 union
496 {
497 uint8_t ab[34];
498 } RootDir;
499 /** 0x0be: Volume set identifier (d1-characters).
500 * @note Character set differs from primary description. */
501 char achVolumeSetId[128];
502 /** 0x13e: Publisher identifier (a1-characters). Alternatively, it may refere
503 * to a file in the root dir if it starts with 0x5f and restricts itself to 8
504 * d1-characters.
505 * @note Character set differs from primary description. */
506 char achPublisherId[128];
507 /** 0x1be: Data preparer identifier (a1-characters).
508 * Same file reference alternative as previous field.
509 * @note Character set differs from primary description. */
510 char achDataPreparerId[128];
511 /** 0x23e: Application identifier (a1-characters).
512 * Same file reference alternative as previous field.
513 * @note Character set differs from primary description. */
514 char achApplicationId[128];
515 /** 0x2be: Copyright (root) file identifier (d1-characters).
516 * All spaces if none.
517 * @note Character set differs from primary description. */
518 char achCopyrightFileId[37];
519 /** 0x2e3: Abstract (root) file identifier (d1-characters).
520 * All spaces if none.
521 * @note Character set differs from primary description. */
522 char achAbstractFileId[37];
523 /** 0x308: Bibliographic file identifier (d1-characters).
524 * All spaces if none.
525 * @note Character set differs from primary description. */
526 char achBibliographicFileId[37];
527 /** 0x32d: Volume creation date and time. */
528 ISO9660TIMESTAMP BirthTime;
529 /** 0x33e: Volume modification date and time. */
530 ISO9660TIMESTAMP ModifyTime;
531 /** 0x34f: Volume (data) expiration date and time.
532 * If not specified, don't regard data as obsolete. */
533 ISO9660TIMESTAMP ExpireTime;
534 /** 0x360: Volume (data) effective date and time.
535 * If not specified, info can be used immediately. */
536 ISO9660TIMESTAMP EffectiveTime;
537 /** 0x371: File structure version (ISO9660_FILE_STRUCTURE_VERSION). */
538 uint8_t uFileStructureVersion;
539 /** 0x372: Reserve for future, MBZ. */
540 uint8_t bReserved883;
541 /** 0x373: Reserve for future, MBZ. */
542 uint8_t abAppUse[512];
543 /** 0x573: Reserved for future standardization, MBZ. */
544 uint8_t abReserved1396[653];
545} ISO9660SUPVOLDESC;
546AssertCompileSize(ISO9660SUPVOLDESC, ISO9660_SECTOR_SIZE);
547/** Pointer to a ISO 9660 supplementary volume descriptor. */
548typedef ISO9660SUPVOLDESC *PISO9660SUPVOLDESC;
549/** Pointer to a const ISO 9660 supplementary volume descriptor. */
550typedef ISO9660SUPVOLDESC const *PCISO9660SUPVOLDESC;
551/** The value of ISO9660SUPVOLDESC::Hdr.uDescVersion. */
552#define ISO9660SUPVOLDESC_VERSION UINT8_C(1)
553
554/** @name ISO9660SUPVOLDESC_VOL_F_XXX - ISO9660SUPVOLDESC::fVolumeFlags
555 * @{ */
556#define ISO9660SUPVOLDESC_VOL_F_ESC_ONLY_REG UINT8_C(0x00)
557#define ISO9660SUPVOLDESC_VOL_F_ESC_NOT_REG UINT8_C(0x01)
558/** @} */
559
560
561
562/**
563 * ISO 9660 volume partition descriptor.
564 */
565typedef struct ISO9660VOLPARTDESC
566{
567 /** 0x000: The volume descriptor header.
568 * Type is ISO9660VOLDESC_TYPE_PARTITION and version
569 * ISO9660VOLPARTDESC_VERSION. */
570 ISO9660VOLDESCHDR Hdr;
571 /** 0x007: Alignment padding. */
572 uint8_t bPadding8;
573 /** 0x008: System identifier (a-characters). */
574 char achSystemId[32];
575 /** 0x028: Volume partition identifier (d-characters). */
576 char achVolumePartitionId[32];
577 /** 0x048: The location of the partition (logical block number). */
578 ISO9660U32 offVolumePartition;
579 /** 0x050: The partition size in logical blocks (cbLogicalBlock). */
580 ISO9660U32 VolumePartitionSize;
581 /** 0x058: System specific data. */
582 uint8_t achSystemUse[1960];
583} ISO9660VOLPARTDESC;
584AssertCompileSize(ISO9660VOLPARTDESC, ISO9660_SECTOR_SIZE);
585/** Pointer to an ISO 9660 volume partition description. */
586typedef ISO9660VOLPARTDESC *PISO9660VOLPARTDESC;
587/** Pointer to a const ISO 9660 volume partition description. */
588typedef ISO9660VOLPARTDESC const *PCISO9660VOLPARTDESC;
589/** The value of ISO9660VOLPARTDESC::Hdr.uDescVersion. */
590#define ISO9660VOLPARTDESC_VERSION UINT8_C(1)
591
592/** @} */
593
594#endif
595
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