Embed:
(wiki syntax)
Show/hide line numbers
ntddcdrm.h
00001 /* 00002 * ntddcdrm.h 00003 * 00004 * CDROM IOCTL interface. 00005 * 00006 * This file is part of the w32api package. 00007 * 00008 * Contributors: 00009 * Created by Casper S. Hornstrup <chorns@users.sourceforge.net> 00010 * 00011 * THIS SOFTWARE IS NOT COPYRIGHTED 00012 * 00013 * This source code is offered for use in the public domain. You may 00014 * use, modify or distribute it freely. 00015 * 00016 * This code is distributed in the hope that it will be useful but 00017 * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY 00018 * DISCLAIMED. This includes but is not limited to warranties of 00019 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 00020 * 00021 */ 00022 00023 #ifndef __NTDDCDRM_H 00024 #define __NTDDCDRM_H 00025 00026 #if __GNUC__ >=3 00027 #pragma GCC system_header 00028 #endif 00029 00030 #ifdef __cplusplus 00031 extern "C" { 00032 #endif 00033 00034 #include "ntddk.h" 00035 #include "ntddstor.h" 00036 00037 #define IOCTL_CDROM_BASE FILE_DEVICE_CD_ROM 00038 00039 #define IOCTL_CDROM_CHECK_VERIFY \ 00040 CTL_CODE(IOCTL_CDROM_BASE, 0x0200, METHOD_BUFFERED, FILE_READ_ACCESS) 00041 00042 #define IOCTL_CDROM_FIND_NEW_DEVICES \ 00043 CTL_CODE(IOCTL_CDROM_BASE, 0x0206, METHOD_BUFFERED, FILE_READ_ACCESS) 00044 00045 #define IOCTL_CDROM_GET_CONTROL \ 00046 CTL_CODE(IOCTL_CDROM_BASE, 0x000D, METHOD_BUFFERED, FILE_READ_ACCESS) 00047 00048 #define IOCTL_CDROM_GET_DRIVE_GEOMETRY \ 00049 CTL_CODE(IOCTL_CDROM_BASE, 0x0013, METHOD_BUFFERED, FILE_READ_ACCESS) 00050 00051 #define IOCTL_CDROM_GET_LAST_SESSION \ 00052 CTL_CODE(IOCTL_CDROM_BASE, 0x000E, METHOD_BUFFERED, FILE_READ_ACCESS) 00053 00054 #define IOCTL_CDROM_GET_VOLUME \ 00055 CTL_CODE(IOCTL_CDROM_BASE, 0x0005, METHOD_BUFFERED, FILE_READ_ACCESS) 00056 00057 #define IOCTL_CDROM_PAUSE_AUDIO \ 00058 CTL_CODE(IOCTL_CDROM_BASE, 0x0003, METHOD_BUFFERED, FILE_READ_ACCESS) 00059 00060 #define IOCTL_CDROM_PLAY_AUDIO_MSF \ 00061 CTL_CODE(IOCTL_CDROM_BASE, 0x0006, METHOD_BUFFERED, FILE_READ_ACCESS) 00062 00063 #define IOCTL_CDROM_RAW_READ \ 00064 CTL_CODE(IOCTL_CDROM_BASE, 0x000F, METHOD_OUT_DIRECT, FILE_READ_ACCESS) 00065 00066 #define IOCTL_CDROM_READ_Q_CHANNEL \ 00067 CTL_CODE(IOCTL_CDROM_BASE, 0x000B, METHOD_BUFFERED, FILE_READ_ACCESS) 00068 00069 #define IOCTL_CDROM_READ_TOC \ 00070 CTL_CODE(IOCTL_CDROM_BASE, 0x0000, METHOD_BUFFERED, FILE_READ_ACCESS) 00071 00072 #define IOCTL_CDROM_READ_TOC_EX \ 00073 CTL_CODE(IOCTL_CDROM_BASE, 0x0015, METHOD_BUFFERED, FILE_READ_ACCESS) 00074 00075 #define IOCTL_CDROM_RESUME_AUDIO \ 00076 CTL_CODE(IOCTL_CDROM_BASE, 0x0004, METHOD_BUFFERED, FILE_READ_ACCESS) 00077 00078 #define IOCTL_CDROM_SEEK_AUDIO_MSF \ 00079 CTL_CODE(IOCTL_CDROM_BASE, 0x0001, METHOD_BUFFERED, FILE_READ_ACCESS) 00080 00081 #define IOCTL_CDROM_SET_VOLUME \ 00082 CTL_CODE(IOCTL_CDROM_BASE, 0x000A, METHOD_BUFFERED, FILE_READ_ACCESS) 00083 00084 #define IOCTL_CDROM_SIMBAD \ 00085 CTL_CODE(IOCTL_CDROM_BASE, 0x1003, METHOD_BUFFERED, FILE_READ_ACCESS) 00086 00087 #define IOCTL_CDROM_STOP_AUDIO \ 00088 CTL_CODE(IOCTL_CDROM_BASE, 0x0002, METHOD_BUFFERED, FILE_READ_ACCESS) 00089 00090 00091 #define MAXIMUM_NUMBER_TRACKS 100 00092 #define MAXIMUM_CDROM_SIZE 804 00093 #define MINIMUM_CDROM_READ_TOC_EX_SIZE 2 00094 00095 typedef struct _TRACK_DATA { 00096 UCHAR Reserved; 00097 UCHAR Control : 4; 00098 UCHAR Adr : 4; 00099 UCHAR TrackNumber; 00100 UCHAR Reserved1; 00101 UCHAR Address[4]; 00102 } TRACK_DATA, *PTRACK_DATA; 00103 00104 /* CDROM_DISK_DATA.DiskData flags */ 00105 #define CDROM_DISK_AUDIO_TRACK 0x00000001 00106 #define CDROM_DISK_DATA_TRACK 0x00000002 00107 00108 typedef struct _CDROM_DISK_DATA { 00109 ULONG DiskData; 00110 } CDROM_DISK_DATA, *PCDROM_DISK_DATA; 00111 00112 typedef struct _CDROM_PLAY_AUDIO_MSF { 00113 UCHAR StartingM; 00114 UCHAR StartingS; 00115 UCHAR StartingF; 00116 UCHAR EndingM; 00117 UCHAR EndingS; 00118 UCHAR EndingF; 00119 } CDROM_PLAY_AUDIO_MSF, *PCDROM_PLAY_AUDIO_MSF; 00120 00121 /* CDROM_READ_TOC_EX.Format constants */ 00122 #define CDROM_READ_TOC_EX_FORMAT_TOC 0x00 00123 #define CDROM_READ_TOC_EX_FORMAT_SESSION 0x01 00124 #define CDROM_READ_TOC_EX_FORMAT_FULL_TOC 0x02 00125 #define CDROM_READ_TOC_EX_FORMAT_PMA 0x03 00126 #define CDROM_READ_TOC_EX_FORMAT_ATIP 0x04 00127 #define CDROM_READ_TOC_EX_FORMAT_CDTEXT 0x05 00128 00129 typedef struct _CDROM_READ_TOC_EX { 00130 UCHAR Format : 4; 00131 UCHAR Reserved1 : 3; 00132 UCHAR Msf : 1; 00133 UCHAR SessionTrack; 00134 UCHAR Reserved2; 00135 UCHAR Reserved3; 00136 } CDROM_READ_TOC_EX, *PCDROM_READ_TOC_EX; 00137 00138 typedef struct _CDROM_SEEK_AUDIO_MSF { 00139 UCHAR M; 00140 UCHAR S; 00141 UCHAR F; 00142 } CDROM_SEEK_AUDIO_MSF, *PCDROM_SEEK_AUDIO_MSF; 00143 00144 /* CDROM_SUB_Q_DATA_FORMAT.Format constants */ 00145 #define IOCTL_CDROM_SUB_Q_CHANNEL 0x00 00146 #define IOCTL_CDROM_CURRENT_POSITION 0x01 00147 #define IOCTL_CDROM_MEDIA_CATALOG 0x02 00148 #define IOCTL_CDROM_TRACK_ISRC 0x03 00149 00150 typedef struct _CDROM_SUB_Q_DATA_FORMAT { 00151 UCHAR Format; 00152 UCHAR Track; 00153 } CDROM_SUB_Q_DATA_FORMAT, *PCDROM_SUB_Q_DATA_FORMAT; 00154 00155 typedef struct _CDROM_TOC { 00156 UCHAR Length[2]; 00157 UCHAR FirstTrack; 00158 UCHAR LastTrack; 00159 TRACK_DATA TrackData[MAXIMUM_NUMBER_TRACKS]; 00160 } CDROM_TOC, *PCDROM_TOC; 00161 00162 #define CDROM_TOC_SIZE sizeof(CDROM_TOC) 00163 00164 typedef struct _CDROM_TOC_ATIP_DATA_BLOCK { 00165 UCHAR CdrwReferenceSpeed : 3; 00166 UCHAR Reserved3 : 1; 00167 UCHAR WritePower : 3; 00168 UCHAR True1 : 1; 00169 UCHAR Reserved4 : 6; 00170 UCHAR UnrestrictedUse : 1; 00171 UCHAR Reserved5 : 1; 00172 UCHAR A3Valid : 1; 00173 UCHAR A2Valid : 1; 00174 UCHAR A1Valid : 1; 00175 UCHAR Reserved6 : 3; 00176 UCHAR IsCdrw : 1; 00177 UCHAR True2 : 1; 00178 UCHAR Reserved7; 00179 UCHAR LeadInMsf[3]; 00180 UCHAR Reserved8; 00181 UCHAR LeadOutMsf[3]; 00182 UCHAR Reserved9; 00183 UCHAR A1Values[3]; 00184 UCHAR Reserved10; 00185 UCHAR A2Values[3]; 00186 UCHAR Reserved11; 00187 UCHAR A3Values[3]; 00188 UCHAR Reserved12; 00189 } CDROM_TOC_ATIP_DATA_BLOCK, *PCDROM_TOC_ATIP_DATA_BLOCK; 00190 00191 typedef struct _CDROM_TOC_ATIP_DATA { 00192 UCHAR Length[2]; 00193 UCHAR Reserved1; 00194 UCHAR Reserved2; 00195 CDROM_TOC_ATIP_DATA_BLOCK Descriptors[0]; 00196 } CDROM_TOC_ATIP_DATA, *PCDROM_TOC_ATIP_DATA; 00197 00198 /* CDROM_TOC_CD_TEXT_DATA_BLOCK.PackType constants */ 00199 #define CDROM_CD_TEXT_PACK_ALBUM_NAME 0x80 00200 #define CDROM_CD_TEXT_PACK_PERFORMER 0x81 00201 #define CDROM_CD_TEXT_PACK_SONGWRITER 0x82 00202 #define CDROM_CD_TEXT_PACK_COMPOSER 0x83 00203 #define CDROM_CD_TEXT_PACK_ARRANGER 0x84 00204 #define CDROM_CD_TEXT_PACK_MESSAGES 0x85 00205 #define CDROM_CD_TEXT_PACK_DISC_ID 0x86 00206 #define CDROM_CD_TEXT_PACK_GENRE 0x87 00207 #define CDROM_CD_TEXT_PACK_TOC_INFO 0x88 00208 #define CDROM_CD_TEXT_PACK_TOC_INFO2 0x89 00209 #define CDROM_CD_TEXT_PACK_UPC_EAN 0x8e 00210 #define CDROM_CD_TEXT_PACK_SIZE_INFO 0x8f 00211 00212 typedef struct _CDROM_TOC_CD_TEXT_DATA_BLOCK { 00213 UCHAR PackType; 00214 UCHAR TrackNumber : 7; 00215 UCHAR ExtensionFlag : 1; 00216 UCHAR SequenceNumber; 00217 UCHAR CharacterPosition : 4; 00218 UCHAR BlockNumber : 3; 00219 UCHAR Unicode : 1; 00220 _ANONYMOUS_UNION union { 00221 UCHAR Text[12]; 00222 WCHAR WText[6]; 00223 } DUMMYUNIONNAME; 00224 UCHAR CRC[2]; 00225 } CDROM_TOC_CD_TEXT_DATA_BLOCK, *PCDROM_TOC_CD_TEXT_DATA_BLOCK; 00226 00227 typedef struct _CDROM_TOC_CD_TEXT_DATA { 00228 UCHAR Length[2]; 00229 UCHAR Reserved1; 00230 UCHAR Reserved2; 00231 CDROM_TOC_CD_TEXT_DATA_BLOCK Descriptors[0]; 00232 } CDROM_TOC_CD_TEXT_DATA, *PCDROM_TOC_CD_TEXT_DATA; 00233 00234 /* CDROM_TOC_FULL_TOC_DATA_BLOCK.Adr constants */ 00235 #define ADR_NO_MODE_INFORMATION 0x0 00236 #define ADR_ENCODES_CURRENT_POSITION 0x1 00237 #define ADR_ENCODES_MEDIA_CATALOG 0x2 00238 #define ADR_ENCODES_ISRC 0x3 00239 00240 typedef struct _CDROM_TOC_FULL_TOC_DATA_BLOCK { 00241 UCHAR SessionNumber; 00242 UCHAR Control : 4; 00243 UCHAR Adr : 4; 00244 UCHAR Reserved1; 00245 UCHAR Point; 00246 UCHAR MsfExtra[3]; 00247 UCHAR Zero; 00248 UCHAR Msf[3]; 00249 } CDROM_TOC_FULL_TOC_DATA_BLOCK, *PCDROM_TOC_FULL_TOC_DATA_BLOCK; 00250 00251 typedef struct _CDROM_TOC_FULL_TOC_DATA { 00252 UCHAR Length[2]; 00253 UCHAR FirstCompleteSession; 00254 UCHAR LastCompleteSession; 00255 CDROM_TOC_FULL_TOC_DATA_BLOCK Descriptors[0]; 00256 } CDROM_TOC_FULL_TOC_DATA, *PCDROM_TOC_FULL_TOC_DATA; 00257 00258 typedef struct _CDROM_TOC_PMA_DATA { 00259 UCHAR Length[2]; 00260 UCHAR Reserved1; 00261 UCHAR Reserved2; 00262 CDROM_TOC_FULL_TOC_DATA_BLOCK Descriptors[0]; 00263 } CDROM_TOC_PMA_DATA, *PCDROM_TOC_PMA_DATA; 00264 00265 /* SUB_Q_HEADER.AudioStatus constants */ 00266 #define AUDIO_STATUS_NOT_SUPPORTED 0x00 00267 #define AUDIO_STATUS_IN_PROGRESS 0x11 00268 #define AUDIO_STATUS_PAUSED 0x12 00269 #define AUDIO_STATUS_PLAY_COMPLETE 0x13 00270 #define AUDIO_STATUS_PLAY_ERROR 0x14 00271 #define AUDIO_STATUS_NO_STATUS 0x15 00272 00273 typedef struct _SUB_Q_HEADER { 00274 UCHAR Reserved; 00275 UCHAR AudioStatus; 00276 UCHAR DataLength[2]; 00277 } SUB_Q_HEADER, *PSUB_Q_HEADER; 00278 00279 typedef struct _SUB_Q_MEDIA_CATALOG_NUMBER { 00280 SUB_Q_HEADER Header; 00281 UCHAR FormatCode; 00282 UCHAR Reserved[3]; 00283 UCHAR Reserved1 : 7; 00284 UCHAR Mcval :1; 00285 UCHAR MediaCatalog[15]; 00286 } SUB_Q_MEDIA_CATALOG_NUMBER, *PSUB_Q_MEDIA_CATALOG_NUMBER; 00287 00288 typedef struct _SUB_Q_TRACK_ISRC { 00289 SUB_Q_HEADER Header; 00290 UCHAR FormatCode; 00291 UCHAR Reserved0; 00292 UCHAR Track; 00293 UCHAR Reserved1; 00294 UCHAR Reserved2 : 7; 00295 UCHAR Tcval : 1; 00296 UCHAR TrackIsrc[15]; 00297 } SUB_Q_TRACK_ISRC, *PSUB_Q_TRACK_ISRC; 00298 00299 typedef struct _SUB_Q_CURRENT_POSITION { 00300 SUB_Q_HEADER Header; 00301 UCHAR FormatCode; 00302 UCHAR Control : 4; 00303 UCHAR ADR : 4; 00304 UCHAR TrackNumber; 00305 UCHAR IndexNumber; 00306 UCHAR AbsoluteAddress[4]; 00307 UCHAR TrackRelativeAddress[4]; 00308 } SUB_Q_CURRENT_POSITION, *PSUB_Q_CURRENT_POSITION; 00309 00310 typedef union _SUB_Q_CHANNEL_DATA { 00311 SUB_Q_CURRENT_POSITION CurrentPosition; 00312 SUB_Q_MEDIA_CATALOG_NUMBER MediaCatalog; 00313 SUB_Q_TRACK_ISRC TrackIsrc; 00314 } SUB_Q_CHANNEL_DATA, *PSUB_Q_CHANNEL_DATA; 00315 00316 /* CDROM_AUDIO_CONTROL.LbaFormat constants */ 00317 #define AUDIO_WITH_PREEMPHASIS 0x1 00318 #define DIGITAL_COPY_PERMITTED 0x2 00319 #define AUDIO_DATA_TRACK 0x4 00320 #define TWO_FOUR_CHANNEL_AUDIO 0x8 00321 00322 typedef struct _CDROM_AUDIO_CONTROL { 00323 UCHAR LbaFormat; 00324 USHORT LogicalBlocksPerSecond; 00325 } CDROM_AUDIO_CONTROL, *PCDROM_AUDIO_CONTROL; 00326 00327 typedef struct _VOLUME_CONTROL { 00328 UCHAR PortVolume[4]; 00329 } VOLUME_CONTROL, *PVOLUME_CONTROL; 00330 00331 typedef enum _TRACK_MODE_TYPE { 00332 YellowMode2, 00333 XAForm2, 00334 CDDA 00335 } TRACK_MODE_TYPE, *PTRACK_MODE_TYPE; 00336 00337 typedef struct __RAW_READ_INFO { 00338 LARGE_INTEGER DiskOffset; 00339 ULONG SectorCount; 00340 TRACK_MODE_TYPE TrackMode; 00341 } RAW_READ_INFO, *PRAW_READ_INFO; 00342 00343 #ifdef __cplusplus 00344 } 00345 #endif 00346 00347 #endif /* __NTDDCDRM_H */
Generated on Tue Jul 12 2022 19:59:54 by
1.7.2