Naveen Neel / shedskin
Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers ntddcdrm.h Source File

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 */