|
|
1.1 root 1: /*++ BUILD Version: 0001 // Increment this if a change has global effects
2:
3: Copyright (c) 1990-1993 Microsoft Corporation
4:
5: Module Name:
6:
7: ntddcdrm.h
8:
9: Abstract:
10:
11: This module contains structures and definitions
12: associated with CDROM IOCTls.
13:
14: Author:
15:
16: Mike Glass
17:
18: Revision History:
19:
20: --*/
21:
22: //
23: // NtDeviceIoControlFile IoControlCode values for this device.
24: //
25: // Warning: Remember that the low two bits of the code specify how the
26: // buffers are passed to the driver!
27: //
28:
29: #define IOCTL_CDROM_BASE FILE_DEVICE_CD_ROM
30:
31: #define IOCTL_CDROM_UNLOAD_DRIVER CTL_CODE(IOCTL_CDROM_BASE, 0x0402, METHOD_BUFFERED, FILE_READ_ACCESS)
32:
33: //
34: // CDROM Audio Device Control Functions
35: //
36:
37: #define IOCTL_CDROM_READ_TOC CTL_CODE(IOCTL_CDROM_BASE, 0x0000, METHOD_BUFFERED, FILE_READ_ACCESS)
38: #define IOCTL_CDROM_GET_CONTROL CTL_CODE(IOCTL_CDROM_BASE, 0x000D, METHOD_BUFFERED, FILE_READ_ACCESS)
39: #define IOCTL_CDROM_PLAY_AUDIO_MSF CTL_CODE(IOCTL_CDROM_BASE, 0x0006, METHOD_BUFFERED, FILE_READ_ACCESS)
40: #define IOCTL_CDROM_SEEK_AUDIO_MSF CTL_CODE(IOCTL_CDROM_BASE, 0x0001, METHOD_BUFFERED, FILE_READ_ACCESS)
41: #define IOCTL_CDROM_STOP_AUDIO CTL_CODE(IOCTL_CDROM_BASE, 0x0002, METHOD_BUFFERED, FILE_READ_ACCESS)
42: #define IOCTL_CDROM_PAUSE_AUDIO CTL_CODE(IOCTL_CDROM_BASE, 0x0003, METHOD_BUFFERED, FILE_READ_ACCESS)
43: #define IOCTL_CDROM_RESUME_AUDIO CTL_CODE(IOCTL_CDROM_BASE, 0x0004, METHOD_BUFFERED, FILE_READ_ACCESS)
44: #define IOCTL_CDROM_GET_VOLUME CTL_CODE(IOCTL_CDROM_BASE, 0x0005, METHOD_BUFFERED, FILE_READ_ACCESS)
45: #define IOCTL_CDROM_SET_VOLUME CTL_CODE(IOCTL_CDROM_BASE, 0x000A, METHOD_BUFFERED, FILE_READ_ACCESS)
46: #define IOCTL_CDROM_READ_Q_CHANNEL CTL_CODE(IOCTL_CDROM_BASE, 0x000B, METHOD_BUFFERED, FILE_READ_ACCESS)
47: #define IOCTL_CDROM_GET_LAST_SESSION CTL_CODE(IOCTL_CDROM_BASE, 0x000E, METHOD_BUFFERED, FILE_READ_ACCESS)
48:
49: #define IOCTL_CDROM_GET_DRIVE_GEOMETRY CTL_CODE(IOCTL_CDROM_BASE, 0x0013, METHOD_BUFFERED, FILE_READ_ACCESS)
50:
51: //
52: // The following device control codes are common for all class drivers. The
53: // functions codes defined here must match all of the other class drivers.
54: //
55:
56: #define IOCTL_CDROM_CHECK_VERIFY CTL_CODE(IOCTL_CDROM_BASE, 0x0200, METHOD_BUFFERED, FILE_READ_ACCESS)
57: #define IOCTL_CDROM_MEDIA_REMOVAL CTL_CODE(IOCTL_CDROM_BASE, 0x0201, METHOD_BUFFERED, FILE_READ_ACCESS)
58: #define IOCTL_CDROM_EJECT_MEDIA CTL_CODE(IOCTL_CDROM_BASE, 0x0202, METHOD_BUFFERED, FILE_READ_ACCESS)
59: #define IOCTL_CDROM_LOAD_MEDIA CTL_CODE(IOCTL_CDROM_BASE, 0x0203, METHOD_BUFFERED, FILE_READ_ACCESS)
60: #define IOCTL_CDROM_RESERVE CTL_CODE(IOCTL_CDROM_BASE, 0x0204, METHOD_BUFFERED, FILE_READ_ACCESS)
61: #define IOCTL_CDROM_RELEASE CTL_CODE(IOCTL_CDROM_BASE, 0x0205, METHOD_BUFFERED, FILE_READ_ACCESS)
62:
63: //
64: // The following device control code is for the SIMBAD simulated bad
65: // sector facility. See SIMBAD.H in this directory for related structures.
66: //
67:
68: #define IOCTL_CDROM_SIMBAD CTL_CODE(IOCTL_CDROM_BASE, 0x1003, METHOD_BUFFERED, FILE_READ_ACCESS)
69:
70: //
71: // Maximum CD Rom size
72: //
73:
74: #define MAXIMUM_NUMBER_TRACKS 100
75: #define MAXIMUM_CDROM_SIZE 804
76:
77: //
78: // CD ROM Table OF Contents (TOC)
79: //
80: // Format 0 - Get table of contents
81: //
82:
83: typedef struct _TRACK_DATA {
84: UCHAR Reserved;
85: UCHAR Control : 4;
86: UCHAR Adr : 4;
87: UCHAR TrackNumber;
88: UCHAR Reserved1;
89: UCHAR Address[4];
90: } TRACK_DATA, *PTRACK_DATA;
91:
92: typedef struct _CDROM_TOC {
93:
94: //
95: // Header
96: //
97:
98: UCHAR Length[2];
99: UCHAR FirstTrack;
100: UCHAR LastTrack;
101:
102: //
103: // Track data
104: //
105:
106: TRACK_DATA TrackData[MAXIMUM_NUMBER_TRACKS];
107: } CDROM_TOC, *PCDROM_TOC;
108:
109: #define CDROM_TOC_SIZE sizeof(CDROM_TOC)
110:
111: //
112: // Play audio starting at MSF and ending at MSF
113: //
114:
115: typedef struct _CDROM_PLAY_AUDIO_MSF {
116: UCHAR StartingM;
117: UCHAR StartingS;
118: UCHAR StartingF;
119: UCHAR EndingM;
120: UCHAR EndingS;
121: UCHAR EndingF;
122: } CDROM_PLAY_AUDIO_MSF, *PCDROM_PLAY_AUDIO_MSF;
123:
124: //
125: // Seek to MSF
126: //
127:
128: typedef struct _CDROM_SEEK_AUDIO_MSF {
129: UCHAR M;
130: UCHAR S;
131: UCHAR F;
132: } CDROM_SEEK_AUDIO_MSF, *PCDROM_SEEK_AUDIO_MSF;
133:
134:
135: //
136: // CD ROM Data Mode Codes, used with IOCTL_CDROM_READ_Q_CHANNEL
137: //
138:
139: #define IOCTL_CDROM_SUB_Q_CHANNEL 0x00
140: #define IOCTL_CDROM_CURRENT_POSITION 0x01
141: #define IOCTL_CDROM_MEDIA_CATALOG 0x02
142: #define IOCTL_CDROM_TRACK_ISRC 0x03
143:
144: typedef struct _CDROM_SUB_Q_DATA_FORMAT {
145: UCHAR Format;
146: UCHAR Track;
147: } CDROM_SUB_Q_DATA_FORMAT, *PCDROM_SUB_Q_DATA_FORMAT;
148:
149:
150: //
151: // CD ROM Sub-Q Channel Data Format
152: //
153:
154: typedef struct _SUB_Q_HEADER {
155: UCHAR Reserved;
156: UCHAR AudioStatus;
157: UCHAR DataLength[2];
158: } SUB_Q_HEADER, *PSUB_Q_HEADER;
159:
160: typedef struct _SUB_Q_CURRENT_POSITION {
161: SUB_Q_HEADER Header;
162: UCHAR FormatCode;
163: UCHAR Control : 4;
164: UCHAR ADR : 4;
165: UCHAR TrackNumber;
166: UCHAR IndexNumber;
167: UCHAR AbsoluteAddress[4];
168: UCHAR TrackRelativeAddress[4];
169: } SUB_Q_CURRENT_POSITION, *PSUB_Q_CURRENT_POSITION;
170:
171: typedef struct _SUB_Q_MEDIA_CATALOG_NUMBER {
172: SUB_Q_HEADER Header;
173: UCHAR FormatCode;
174: UCHAR Reserved[3];
175: UCHAR Reserved1 : 7;
176: UCHAR Mcval : 1;
177: UCHAR MediaCatalog[15];
178: } SUB_Q_MEDIA_CATALOG_NUMBER, *PSUB_Q_MEDIA_CATALOG_NUMBER;
179:
180: typedef struct _SUB_Q_TRACK_ISRC {
181: SUB_Q_HEADER Header;
182: UCHAR FormatCode;
183: UCHAR Reserved0;
184: UCHAR Track;
185: UCHAR Reserved1;
186: UCHAR Reserved2 : 7;
187: UCHAR Tcval : 1;
188: UCHAR TrackIsrc[15];
189: } SUB_Q_TRACK_ISRC, *PSUB_Q_TRACK_ISRC;
190:
191: typedef union _SUB_Q_CHANNEL_DATA {
192: SUB_Q_CURRENT_POSITION CurrentPosition;
193: SUB_Q_MEDIA_CATALOG_NUMBER MediaCatalog;
194: SUB_Q_TRACK_ISRC TrackIsrc;
195: } SUB_Q_CHANNEL_DATA, *PSUB_Q_CHANNEL_DATA;
196:
197: //
198: // Audio Status Codes
199: //
200:
201: #define AUDIO_STATUS_NOT_SUPPORTED 0x00
202: #define AUDIO_STATUS_IN_PROGRESS 0x11
203: #define AUDIO_STATUS_PAUSED 0x12
204: #define AUDIO_STATUS_PLAY_COMPLETE 0x13
205: #define AUDIO_STATUS_PLAY_ERROR 0x14
206: #define AUDIO_STATUS_NO_STATUS 0x15
207:
208: //
209: // ADR Sub-channel Q Field
210: //
211:
212: #define ADR_NO_MODE_INFORMATION 0x0
213: #define ADR_ENCODES_CURRENT_POSITION 0x1
214: #define ADR_ENCODES_MEDIA_CATALOG 0x2
215: #define ADR_ENCODES_ISRC 0x3
216:
217: //
218: // Sub-channel Q Control Bits
219: //
220:
221: #define AUDIO_WITH_PREEMPHASIS 0x0
222: #define DIGITAL_COPY_PERMITTED 0x2
223: #define AUDIO_DATA_TRACK 0x4
224: #define TWO_FOUR_CHANNEL_AUDIO 0x8
225:
226: //
227: // Get Audio control parameters
228: //
229:
230: typedef struct _CDROM_AUDIO_CONTROL {
231: UCHAR LbaFormat;
232: USHORT LogicalBlocksPerSecond;
233: } CDROM_AUDIO_CONTROL, *PCDROM_AUDIO_CONTROL;
234:
235: //
236: // Volume control - Volume takes a value between 1 and 0xFF.
237: // SCSI-II CDROM audio suppports up to 4 audio ports with
238: // Independent volume control.
239: //
240:
241: typedef struct _VOLUME_CONTROL {
242: UCHAR PortVolume[4];
243: } VOLUME_CONTROL, *PVOLUME_CONTROL;
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.