3 * COPYRIGHT: See COPYING in the top level directory
4 * PROJECT: ReactOS kernel
5 * FILE: include/ntos/cdrom.h
6 * PURPOSE: CD-ROM related definitions used by all the parts of the system
7 * PROGRAMMER: Eric Kohl <ekohl@rz-online.de>
12 #ifndef __INCLUDE_NTOS_CDROM_H
13 #define __INCLUDE_NTOS_CDROM_H
15 #define IOCTL_CDROM_READ_TOC CTL_CODE(FILE_DEVICE_CD_ROM, 0x0000, METHOD_BUFFERED, FILE_READ_ACCESS)
16 #define IOCTL_CDROM_GET_LAST_SESSION CTL_CODE(FILE_DEVICE_CD_ROM, 0x000E, METHOD_BUFFERED, FILE_READ_ACCESS)
17 #define IOCTL_CDROM_GET_DRIVE_GEOMETRY CTL_CODE(FILE_DEVICE_CD_ROM, 0x0013, METHOD_BUFFERED, FILE_READ_ACCESS)
18 /* These are promised by W32 to s/IOCTL_CDROM_/IOCTL_STORAGE_/ in future:
20 #define IOCTL_CDROM_CHECK_VERIFY CTL_CODE(FILE_DEVICE_CD_ROM, 0x0200, METHOD_BUFFERED, FILE_READ_ACCESS)
21 #define IOCTL_CDROM_MEDIA_REMOVAL CTL_CODE(FILE_DEVICE_CD_ROM, 0x0201, METHOD_BUFFERED, FILE_READ_ACCESS)
22 #define IOCTL_CDROM_EJECT_MEDIA CTL_CODE(FILE_DEVICE_CD_ROM, 0x0202, METHOD_BUFFERED, FILE_READ_ACCESS)
23 #define IOCTL_CDROM_LOAD_MEDIA CTL_CODE(FILE_DEVICE_CD_ROM, 0x0203, METHOD_BUFFERED, FILE_READ_ACCESS)
24 #define IOCTL_CDROM_RESERVE CTL_CODE(FILE_DEVICE_CD_ROM, 0x0204, METHOD_BUFFERED, FILE_READ_ACCESS)
25 #define IOCTL_CDROM_RELEASE CTL_CODE(FILE_DEVICE_CD_ROM, 0x0205, METHOD_BUFFERED, FILE_READ_ACCESS)
26 #define IOCTL_CDROM_FIND_NEW_DEVICES CTL_CODE(FILE_DEVICE_CD_ROM, 0x0206, METHOD_BUFFERED, FILE_READ_ACCESS)
28 #define MAXIMUM_NUMBER_TRACKS 100
29 #define MAXIMUM_CDROM_SIZE 804
31 #define TOC_DATA_TRACK 0x04 /* TRACK_DATA.Control */
32 #define TOC_LAST_TRACK 0xAA /* TRACK_DATA.TrackNumber */
34 typedef struct _TRACK_DATA {
36 UCHAR Control : 4; /* bitfield; 0 || TOC_DATA_TRACK */
37 UCHAR Adr : 4; /* Q-subchannel info */
38 UCHAR TrackNumber; /* CDROM_TOC.FirstTrack or TOC_LAST_TRACK on last+1 track CDROM_TOC.TrackData[CDROM_TOC.LastTrack-1] */
40 UCHAR Address[4]; /* big-endian LBA address for TOC_DATA_TRACK; MSF (sometimes BCD-MSF) for audio */
41 } TRACK_DATA, *PTRACK_DATA;
43 typedef struct _CDROM_TOC {
44 UCHAR Length[2]; /* <='sizeof(CDROM_TOC)-2' or less; it does not count 'Length' itself; little-endian */
45 UCHAR FirstTrack; /* based anywhere */
46 UCHAR LastTrack; /* last TrackData has TOC_LAST_TRACK; 'LastTrack-FirstTrack+1' is the count */
47 TRACK_DATA TrackData[MAXIMUM_NUMBER_TRACKS];
48 } CDROM_TOC, *PCDROM_TOC;
50 #define CDROM_TOC_SIZE sizeof(CDROM_TOC)
54 #endif /* __INCLUDE_NTOS_CDROM_H */