1 ////////////////////////////////////////////////////////////////////
2 // Copyright (C) Alexander Telyatnikov, Ivan Keliukh, Yegor Anchishkin, SKIF Software, 1999-2013. Kiev, Ukraine
4 // This file was released under the GPLv2 on June 2015.
5 ////////////////////////////////////////////////////////////////////
14 This file defines the interface between CD-Writer's driver & user
19 NT kernel mode or Win32 app
22 #ifndef __CDRW_PUBLIC_H__
23 #define __CDRW_PUBLIC_H__
25 #define CDRW_SIGNATURE_v1 "ALWA CD-R/W v1"
27 //#define CDRW_RESTRICT_ACCESS // require W-acces rights for some IOCTLs
30 //#include "ntdddisk.h"
38 #if defined(CDRW_EXPORTS) || defined(FileSys_EXPORTS)
42 #ifndef FILE_DEVICE_SECURE_OPEN
43 #define FILE_DEVICE_SECURE_OPEN 0x00000100
44 #endif //FILE_DEVICE_SECURE_OPEN
49 #define IRP_MJ_PNP IRP_MJ_PNP_POWER // Obsolete....
52 #ifndef FILE_DEVICE_CDRW
53 #define FILE_DEVICE_CDRW 0x00000999
56 #ifndef FILE_DEVICE_CD_ROM
57 #define FILE_DEVICE_CD_ROM 0x00000002
58 #endif //FILE_DEVICE_CD_ROM
60 #ifndef IOCTL_CDROM_BASE
61 #define IOCTL_CDROM_BASE FILE_DEVICE_CD_ROM
62 #endif //IOCTL_CDROM_BASE
64 #ifndef FILE_DEVICE_DVD
65 #define FILE_DEVICE_DVD 0x00000033
66 #endif //FILE_DEVICE_DVD
68 #ifndef IOCTL_DVD_BASE
69 #define IOCTL_DVD_BASE FILE_DEVICE_DVD
70 #endif //IOCTL_DVD_BASE
72 #ifndef FILE_DEVICE_DISK
73 #define FILE_DEVICE_DISK 0x00000007
74 #endif //FILE_DEVICE_DISK
76 #ifndef IOCTL_DISK_BASE
77 #define IOCTL_DISK_BASE FILE_DEVICE_DISK
78 #endif //IOCTL_DISK_BASE
80 #ifndef IOCTL_CDROM_UNLOAD_DRIVER
81 #define IOCTL_CDROM_UNLOAD_DRIVER CTL_CODE(IOCTL_CDROM_BASE, 0x0402, METHOD_BUFFERED, FILE_READ_ACCESS)
83 #define IOCTL_CDROM_READ_TOC CTL_CODE(IOCTL_CDROM_BASE, 0x0000, METHOD_BUFFERED, FILE_READ_ACCESS)
84 #define IOCTL_CDROM_GET_CONTROL CTL_CODE(IOCTL_CDROM_BASE, 0x000D, METHOD_BUFFERED, FILE_READ_ACCESS)
85 #define IOCTL_CDROM_PLAY_AUDIO_MSF CTL_CODE(IOCTL_CDROM_BASE, 0x0006, METHOD_BUFFERED, FILE_READ_ACCESS)
86 #define IOCTL_CDROM_SEEK_AUDIO_MSF CTL_CODE(IOCTL_CDROM_BASE, 0x0001, METHOD_BUFFERED, FILE_READ_ACCESS)
87 #define IOCTL_CDROM_STOP_AUDIO CTL_CODE(IOCTL_CDROM_BASE, 0x0002, METHOD_BUFFERED, FILE_READ_ACCESS)
88 #define IOCTL_CDROM_PAUSE_AUDIO CTL_CODE(IOCTL_CDROM_BASE, 0x0003, METHOD_BUFFERED, FILE_READ_ACCESS)
89 #define IOCTL_CDROM_RESUME_AUDIO CTL_CODE(IOCTL_CDROM_BASE, 0x0004, METHOD_BUFFERED, FILE_READ_ACCESS)
90 #define IOCTL_CDROM_GET_VOLUME CTL_CODE(IOCTL_CDROM_BASE, 0x0005, METHOD_BUFFERED, FILE_READ_ACCESS)
91 #define IOCTL_CDROM_SET_VOLUME CTL_CODE(IOCTL_CDROM_BASE, 0x000A, METHOD_BUFFERED, FILE_READ_ACCESS)
92 #define IOCTL_CDROM_READ_Q_CHANNEL CTL_CODE(IOCTL_CDROM_BASE, 0x000B, METHOD_BUFFERED, FILE_READ_ACCESS)
93 #define IOCTL_CDROM_GET_LAST_SESSION CTL_CODE(IOCTL_CDROM_BASE, 0x000E, METHOD_BUFFERED, FILE_READ_ACCESS)
94 #define IOCTL_CDROM_RAW_READ CTL_CODE(IOCTL_CDROM_BASE, 0x000F, METHOD_OUT_DIRECT, FILE_READ_ACCESS)
95 #define IOCTL_CDROM_DISK_TYPE CTL_CODE(IOCTL_CDROM_BASE, 0x0010, METHOD_BUFFERED, FILE_ANY_ACCESS)
97 #define IOCTL_CDROM_CHECK_VERIFY CTL_CODE(IOCTL_CDROM_BASE, 0x0200, METHOD_BUFFERED, FILE_READ_ACCESS)
98 #define IOCTL_CDROM_MEDIA_REMOVAL CTL_CODE(IOCTL_CDROM_BASE, 0x0201, METHOD_BUFFERED, FILE_READ_ACCESS)
99 #define IOCTL_CDROM_EJECT_MEDIA CTL_CODE(IOCTL_CDROM_BASE, 0x0202, METHOD_BUFFERED, FILE_READ_ACCESS)
100 #define IOCTL_CDROM_LOAD_MEDIA CTL_CODE(IOCTL_CDROM_BASE, 0x0203, METHOD_BUFFERED, FILE_READ_ACCESS)
101 #define IOCTL_CDROM_RESERVE CTL_CODE(IOCTL_CDROM_BASE, 0x0204, METHOD_BUFFERED, FILE_READ_ACCESS)
102 #define IOCTL_CDROM_RELEASE CTL_CODE(IOCTL_CDROM_BASE, 0x0205, METHOD_BUFFERED, FILE_READ_ACCESS)
103 #define IOCTL_CDROM_FIND_NEW_DEVICES CTL_CODE(IOCTL_CDROM_BASE, 0x0206, METHOD_BUFFERED, FILE_READ_ACCESS)
105 #define IOCTL_CDROM_GET_DRIVE_GEOMETRY CTL_CODE(IOCTL_CDROM_BASE, 0x0013, METHOD_BUFFERED, FILE_READ_ACCESS)
106 #define IOCTL_CDROM_GET_DRIVE_GEOMETRY_EX CTL_CODE(IOCTL_CDROM_BASE, 0x0014, METHOD_BUFFERED, FILE_READ_ACCESS)
108 #define IOCTL_CDROM_READ_TOC_EX CTL_CODE(IOCTL_CDROM_BASE, 0x0015, METHOD_BUFFERED, FILE_READ_ACCESS)
109 #define IOCTL_CDROM_GET_CONFIGURATION CTL_CODE(IOCTL_CDROM_BASE, 0x0016, METHOD_BUFFERED, FILE_READ_ACCESS)
111 #endif //IOCTL_CDROM_UNLOAD_DRIVER
113 #ifdef CDRW_RESTRICT_ACCESS
115 #define CDRW_CTL_CODE_R(a,b) CTL_CODE(FILE_DEVICE_CDRW, a,b, FILE_READ_DATA)
116 #define CDRW_CTL_CODE_W(a,b) CTL_CODE(FILE_DEVICE_CDRW, a,b, FILE_READ_DATA)
117 #define CDRW_CTL_CODE_W(a,b) CTL_CODE(FILE_DEVICE_CDRW, a,b, FILE_WRITE_DATA )
118 #define CDRW_CTL_CODE_A(a,b) CTL_CODE(FILE_DEVICE_CDRW, a,b, FILE_READ_DATA | FILE_WRITE_DATA )
120 #else //CDRW_RESTRICT_ACCESS
122 #define CDRW_CTL_CODE_R(a,b) CTL_CODE(FILE_DEVICE_CDRW, a,b, FILE_READ_DATA)
123 #define CDRW_CTL_CODE_W(a,b) CTL_CODE(FILE_DEVICE_CDRW, a,b, FILE_READ_DATA)
124 #define CDRW_CTL_CODE_A(a,b) CTL_CODE(FILE_DEVICE_CDRW, a,b, FILE_READ_DATA)
125 #define CDRW_CTL_CODE_X(a,b) CTL_CODE(FILE_DEVICE_CDRW, a,b, FILE_ANY_ACCESS )
127 #endif //CDRW_RESTRICT_ACCESS
129 #define IOCTL_CDRW_LOCK_DOOR CDRW_CTL_CODE_R(0x801, METHOD_BUFFERED)
130 #define IOCTL_CDRW_SET_SPEED CDRW_CTL_CODE_R(0x802, METHOD_BUFFERED)
131 #define IOCTL_CDRW_SYNC_CACHE CDRW_CTL_CODE_W(0x803, METHOD_BUFFERED)
132 #define IOCTL_CDRW_GET_CAPABILITIES CDRW_CTL_CODE_X(0x804, METHOD_BUFFERED)
133 #define IOCTL_CDRW_GET_SPEED IOCTL_CDRW_GET_CAPABILITIES
134 #define IOCTL_CDRW_GET_MEDIA_TYPE CDRW_CTL_CODE_X(0x805, METHOD_BUFFERED)
135 #define IOCTL_CDRW_GET_WRITE_MODE CDRW_CTL_CODE_R(0x806, METHOD_BUFFERED)
136 #define IOCTL_CDRW_SET_WRITE_MODE CDRW_CTL_CODE_W(0x807, METHOD_BUFFERED)
137 #define IOCTL_CDRW_RESERVE_TRACK CDRW_CTL_CODE_W(0x808, METHOD_BUFFERED)
138 #define IOCTL_CDRW_BLANK CDRW_CTL_CODE_R(0x809, METHOD_BUFFERED)
139 #define IOCTL_CDRW_CLOSE_TRK_SES CDRW_CTL_CODE_W(0x80a, METHOD_BUFFERED)
140 //#define IOCTL_CDRW_LL_WRITE CDRW_CTL_CODE_R(0x80b, METHOD_OUT_DIRECT)
141 #define IOCTL_CDRW_LL_WRITE CDRW_CTL_CODE_R(0x80b, METHOD_BUFFERED)
142 #define IOCTL_CDRW_READ_TRACK_INFO CDRW_CTL_CODE_R(0x80c, METHOD_IN_DIRECT)
143 #define IOCTL_CDRW_READ_DISC_INFO CDRW_CTL_CODE_R(0x80d, METHOD_IN_DIRECT)
144 #define IOCTL_CDRW_BUFFER_CAPACITY CDRW_CTL_CODE_A(0x80e, METHOD_IN_DIRECT)
145 #define IOCTL_CDRW_GET_SIGNATURE CDRW_CTL_CODE_X(0x80f, METHOD_BUFFERED)
146 #define IOCTL_CDRW_RESET_DRIVER CDRW_CTL_CODE_A(0x810, METHOD_BUFFERED)
147 //#ifndef WITHOUT_FORMATTER
148 #define IOCTL_CDRW_FORMAT_UNIT CDRW_CTL_CODE_W(0x811, METHOD_BUFFERED)
149 #define IOCTL_CDRW_SET_RANDOM_ACCESS CDRW_CTL_CODE_W(0x812, METHOD_BUFFERED)
150 //#endif //WITHOUT_FORMATTER
151 #define IOCTL_CDRW_TEST_UNIT_READY CDRW_CTL_CODE_X(0x813, METHOD_BUFFERED)
152 #define IOCTL_CDRW_RESET_WRITE_STATUS CDRW_CTL_CODE_X(0x814, METHOD_BUFFERED)
153 #define IOCTL_CDRW_GET_LAST_ERROR CDRW_CTL_CODE_R(0x815, METHOD_BUFFERED)
154 #define IOCTL_CDRW_MODE_SENSE CDRW_CTL_CODE_X(0x816, METHOD_BUFFERED)
155 #define IOCTL_CDRW_MODE_SELECT CDRW_CTL_CODE_R(0x817, METHOD_BUFFERED)
156 #define IOCTL_CDRW_SET_READ_AHEAD CDRW_CTL_CODE_R(0x818, METHOD_BUFFERED)
157 #define IOCTL_CDRW_SET_DEFAULT_SESSION CDRW_CTL_CODE_R(0x819, METHOD_BUFFERED) // RESERVED !!!
158 #define IOCTL_CDRW_NOTIFY_MEDIA_CHANGE CDRW_CTL_CODE_X(0x81a, METHOD_BUFFERED)
159 #define IOCTL_CDRW_SEND_OPC_INFO CDRW_CTL_CODE_W(0x81b, METHOD_BUFFERED)
160 #define IOCTL_CDRW_LL_READ CDRW_CTL_CODE_R(0x81c, METHOD_BUFFERED)
161 #define IOCTL_CDRW_SEND_CUE_SHEET CDRW_CTL_CODE_W(0x81d, METHOD_OUT_DIRECT)
162 #define IOCTL_CDRW_INIT_DEINIT CDRW_CTL_CODE_A(0x81e, METHOD_BUFFERED)
163 #define IOCTL_CDRW_READ_FULL_TOC CDRW_CTL_CODE_R(0x81f, METHOD_BUFFERED)
164 #define IOCTL_CDRW_READ_PMA CDRW_CTL_CODE_R(0x820, METHOD_BUFFERED)
165 #define IOCTL_CDRW_READ_SESSION_INFO CDRW_CTL_CODE_R(0x821, METHOD_BUFFERED)
166 #define IOCTL_CDRW_READ_ATIP CDRW_CTL_CODE_R(0x822, METHOD_BUFFERED)
167 #define IOCTL_CDRW_READ_CD_TEXT CDRW_CTL_CODE_R(0x823, METHOD_BUFFERED)
168 #define IOCTL_CDRW_READ_TOC_EX CDRW_CTL_CODE_R(0x824, METHOD_BUFFERED)
169 #define IOCTL_CDRW_GET_DEVICE_INFO CDRW_CTL_CODE_R(0x825, METHOD_BUFFERED)
170 #define IOCTL_CDRW_GET_EVENT CDRW_CTL_CODE_R(0x826, METHOD_IN_DIRECT)
171 #define IOCTL_CDRW_GET_DEVICE_NAME CDRW_CTL_CODE_R(0x827, METHOD_BUFFERED)
172 #define IOCTL_CDRW_RESET_DRIVER_EX CDRW_CTL_CODE_A(0x828, METHOD_BUFFERED)
173 #define IOCTL_CDRW_GET_MEDIA_TYPE_EX CDRW_CTL_CODE_X(0x829, METHOD_BUFFERED)
174 #ifndef WITHOUT_FORMATTER
175 #define IOCTL_CDRW_GET_MRW_MODE CDRW_CTL_CODE_X(0x82a, METHOD_BUFFERED)
176 #define IOCTL_CDRW_SET_MRW_MODE CDRW_CTL_CODE_X(0x82b, METHOD_BUFFERED)
177 #endif //WITHOUT_FORMATTER
178 #define IOCTL_CDRW_READ_CAPACITY CDRW_CTL_CODE_R(0x82c, METHOD_IN_DIRECT)
179 #define IOCTL_CDRW_GET_DISC_LAYOUT CDRW_CTL_CODE_R(0x82d, METHOD_IN_DIRECT)
180 #define IOCTL_CDRW_SET_STREAMING CDRW_CTL_CODE_W(0x82e, METHOD_BUFFERED)
182 #define IOCTL_CDRW_UNLOAD_DRIVER IOCTL_CDROM_UNLOAD_DRIVER
184 #define IOCTL_CDRW_READ_TOC IOCTL_CDROM_READ_TOC
185 #define IOCTL_CDRW_GET_CONTROL IOCTL_CDROM_GET_CONTROL
186 #define IOCTL_CDRW_PLAY_AUDIO_MSF IOCTL_CDROM_PLAY_AUDIO_MSF
187 #define IOCTL_CDRW_SEEK_AUDIO_MSF IOCTL_CDROM_SEEK_AUDIO_MSF
188 #define IOCTL_CDRW_STOP_AUDIO IOCTL_CDROM_STOP_AUDIO
189 #define IOCTL_CDRW_PAUSE_AUDIO IOCTL_CDROM_PAUSE_AUDIO
190 #define IOCTL_CDRW_RESUME_AUDIO IOCTL_CDROM_RESUME_AUDIO
191 #define IOCTL_CDRW_GET_VOLUME IOCTL_CDROM_GET_VOLUME
192 #define IOCTL_CDRW_SET_VOLUME IOCTL_CDROM_SET_VOLUME
193 #define IOCTL_CDRW_READ_Q_CHANNEL IOCTL_CDROM_READ_Q_CHANNEL
194 #define IOCTL_CDRW_GET_LAST_SESSION IOCTL_CDROM_GET_LAST_SESSION
195 #define IOCTL_CDRW_RAW_READ IOCTL_CDROM_RAW_READ
196 #define IOCTL_CDRW_DISK_TYPE IOCTL_CDROM_DISK_TYPE
198 #define IOCTL_CDRW_CHECK_VERIFY IOCTL_CDROM_CHECK_VERIFY
199 #define IOCTL_CDRW_MEDIA_REMOVAL IOCTL_CDROM_MEDIA_REMOVAL
200 #define IOCTL_CDRW_EJECT_MEDIA IOCTL_CDROM_EJECT_MEDIA
201 #define IOCTL_CDRW_LOAD_MEDIA IOCTL_CDROM_LOAD_MEDIA
202 #define IOCTL_CDRW_RESERVE IOCTL_CDROM_RESERVE
203 #define IOCTL_CDRW_RELEASE IOCTL_CDROM_RELEASE
204 #define IOCTL_CDRW_FIND_NEW_DEVICES IOCTL_CDROM_FIND_NEW_DEVICES
206 #ifndef IOCTL_DVD_READ_STRUCTURE
207 #define IOCTL_DVD_READ_STRUCTURE CTL_CODE(IOCTL_DVD_BASE, 0x0450, METHOD_BUFFERED, FILE_READ_ACCESS)
209 #define IOCTL_DVD_START_SESSION CTL_CODE(IOCTL_DVD_BASE, 0x0400, METHOD_BUFFERED, FILE_READ_ACCESS)
210 #define IOCTL_DVD_READ_KEY CTL_CODE(IOCTL_DVD_BASE, 0x0401, METHOD_BUFFERED, FILE_READ_ACCESS)
211 #define IOCTL_DVD_SEND_KEY CTL_CODE(IOCTL_DVD_BASE, 0x0402, METHOD_BUFFERED, FILE_READ_ACCESS)
212 #define IOCTL_DVD_END_SESSION CTL_CODE(IOCTL_DVD_BASE, 0x0403, METHOD_BUFFERED, FILE_READ_ACCESS)
213 #define IOCTL_DVD_SET_READ_AHEAD CTL_CODE(IOCTL_DVD_BASE, 0x0404, METHOD_BUFFERED, FILE_READ_ACCESS)
214 #define IOCTL_DVD_GET_REGION CTL_CODE(IOCTL_DVD_BASE, 0x0405, METHOD_BUFFERED, FILE_READ_ACCESS)
215 #define IOCTL_DVD_SEND_KEY2 CTL_CODE(IOCTL_DVD_BASE, 0x0406, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
216 #endif //IOCTL_DVD_READ_STRUCTURE
218 #ifndef IOCTL_DISK_GET_DRIVE_GEOMETRY
219 #define IOCTL_DISK_GET_DRIVE_GEOMETRY CTL_CODE(IOCTL_DISK_BASE, 0x0000, METHOD_BUFFERED, FILE_ANY_ACCESS)
220 #define IOCTL_DISK_VERIFY CTL_CODE(IOCTL_DISK_BASE, 0x0005, METHOD_BUFFERED, FILE_ANY_ACCESS)
221 #define IOCTL_DISK_FORMAT_TRACKS CTL_CODE(IOCTL_DISK_BASE, 0x0006, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
222 #define IOCTL_DISK_IS_WRITABLE CTL_CODE(IOCTL_DISK_BASE, 0x0009, METHOD_BUFFERED, FILE_ANY_ACCESS)
223 #define IOCTL_DISK_FORMAT_TRACKS_EX CTL_CODE(IOCTL_DISK_BASE, 0x000b, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
225 #define IOCTL_DISK_CHECK_VERIFY CTL_CODE(IOCTL_DISK_BASE, 0x0200, METHOD_BUFFERED, FILE_READ_ACCESS)
226 #define IOCTL_DISK_MEDIA_REMOVAL CTL_CODE(IOCTL_DISK_BASE, 0x0201, METHOD_BUFFERED, FILE_READ_ACCESS)
227 #define IOCTL_DISK_EJECT_MEDIA CTL_CODE(IOCTL_DISK_BASE, 0x0202, METHOD_BUFFERED, FILE_READ_ACCESS)
228 #define IOCTL_DISK_LOAD_MEDIA CTL_CODE(IOCTL_DISK_BASE, 0x0203, METHOD_BUFFERED, FILE_READ_ACCESS)
229 #define IOCTL_DISK_RESERVE CTL_CODE(IOCTL_DISK_BASE, 0x0204, METHOD_BUFFERED, FILE_READ_ACCESS)
230 #define IOCTL_DISK_RELEASE CTL_CODE(IOCTL_DISK_BASE, 0x0205, METHOD_BUFFERED, FILE_READ_ACCESS)
231 #define IOCTL_DISK_FIND_NEW_DEVICES CTL_CODE(IOCTL_DISK_BASE, 0x0206, METHOD_BUFFERED, FILE_READ_ACCESS)
232 #define IOCTL_DISK_GET_MEDIA_TYPES CTL_CODE(IOCTL_DISK_BASE, 0x0300, METHOD_BUFFERED, FILE_ANY_ACCESS)
233 #endif //IOCTL_DISK_GET_DRIVE_GEOMETRY
235 #ifndef IOCTL_STORAGE_SET_READ_AHEAD
236 #define IOCTL_STORAGE_SET_READ_AHEAD CTL_CODE(IOCTL_STORAGE_BASE, 0x0100, METHOD_BUFFERED, FILE_READ_ACCESS)
237 #endif //IOCTL_STORAGE_SET_READ_AHEAD
239 #ifndef IOCTL_STORAGE_GET_MEDIA_TYPES_EX
240 #define IOCTL_STORAGE_GET_MEDIA_TYPES_EX CTL_CODE(IOCTL_STORAGE_BASE, 0x0301, METHOD_BUFFERED, FILE_ANY_ACCESS)
242 typedef enum _STORAGE_MEDIA_TYPE
{
244 // Following are defined in ntdddisk.h in the MEDIA_TYPE enum
246 // Unknown, // Format is unknown
247 // F5_1Pt2_512, // 5.25", 1.2MB, 512 bytes/sector
248 // F3_1Pt44_512, // 3.5", 1.44MB, 512 bytes/sector
249 // F3_2Pt88_512, // 3.5", 2.88MB, 512 bytes/sector
250 // F3_20Pt8_512, // 3.5", 20.8MB, 512 bytes/sector
251 // F3_720_512, // 3.5", 720KB, 512 bytes/sector
252 // F5_360_512, // 5.25", 360KB, 512 bytes/sector
253 // F5_320_512, // 5.25", 320KB, 512 bytes/sector
254 // F5_320_1024, // 5.25", 320KB, 1024 bytes/sector
255 // F5_180_512, // 5.25", 180KB, 512 bytes/sector
256 // F5_160_512, // 5.25", 160KB, 512 bytes/sector
257 // RemovableMedia, // Removable media other than floppy
258 // FixedMedia, // Fixed hard disk media
259 // F3_120M_512, // 3.5", 120M Floppy
260 // F3_640_512, // 3.5" , 640KB, 512 bytes/sector
261 // F5_640_512, // 5.25", 640KB, 512 bytes/sector
262 // F5_720_512, // 5.25", 720KB, 512 bytes/sector
263 // F3_1Pt2_512, // 3.5" , 1.2Mb, 512 bytes/sector
264 // F3_1Pt23_1024, // 3.5" , 1.23Mb, 1024 bytes/sector
265 // F5_1Pt23_1024, // 5.25", 1.23MB, 1024 bytes/sector
266 // F3_128Mb_512, // 3.5" MO 128Mb 512 bytes/sector
267 // F3_230Mb_512, // 3.5" MO 230Mb 512 bytes/sector
268 // F8_256_128, // 8", 256KB, 128 bytes/sector
271 DDS_4mm
= 0x20, // Tape - DAT DDS1,2,... (all vendors)
272 MiniQic
, // Tape - miniQIC Tape
273 Travan
, // Tape - Travan TR-1,2,3,...
275 MP_8mm
, // Tape - 8mm Exabyte Metal Particle
276 AME_8mm
, // Tape - 8mm Exabyte Advanced Metal Evap
277 AIT1_8mm
, // Tape - 8mm Sony AIT1
278 DLT
, // Tape - DLT Compact IIIxt, IV
279 NCTP
, // Tape - Philips NCTP
280 IBM_3480
, // Tape - IBM 3480
281 IBM_3490E
, // Tape - IBM 3490E
282 IBM_Magstar_3590
, // Tape - IBM Magstar 3590
283 IBM_Magstar_MP
, // Tape - IBM Magstar MP
284 STK_DATA_D3
, // Tape - STK Data D3
285 SONY_DTF
, // Tape - Sony DTF
286 DV_6mm
, // Tape - 6mm Digital Video
287 DMI
, // Tape - Exabyte DMI and compatibles
288 SONY_D2
, // Tape - Sony D2S and D2L
289 CLEANER_CARTRIDGE
, // Cleaner - All Drive types that support Drive Cleaners
290 CD_ROM
, // Opt_Disk - CD
291 CD_R
, // Opt_Disk - CD-Recordable (Write Once)
292 CD_RW
, // Opt_Disk - CD-Rewriteable
293 DVD_ROM
, // Opt_Disk - DVD-ROM
294 DVD_R
, // Opt_Disk - DVD-Recordable (Write Once)
295 DVD_RW
, // Opt_Disk - DVD-Rewriteable
296 MO_3_RW
, // Opt_Disk - 3.5" Rewriteable MO Disk
297 MO_5_WO
, // Opt_Disk - MO 5.25" Write Once
298 MO_5_RW
, // Opt_Disk - MO 5.25" Rewriteable (not LIMDOW)
299 MO_5_LIMDOW
, // Opt_Disk - MO 5.25" Rewriteable (LIMDOW)
300 PC_5_WO
, // Opt_Disk - Phase Change 5.25" Write Once Optical
301 PC_5_RW
, // Opt_Disk - Phase Change 5.25" Rewriteable
302 PD_5_RW
, // Opt_Disk - PhaseChange Dual Rewriteable
303 ABL_5_WO
, // Opt_Disk - Ablative 5.25" Write Once Optical
304 PINNACLE_APEX_5_RW
, // Opt_Disk - Pinnacle Apex 4.6GB Rewriteable Optical
305 SONY_12_WO
, // Opt_Disk - Sony 12" Write Once
306 PHILIPS_12_WO
, // Opt_Disk - Philips/LMS 12" Write Once
307 HITACHI_12_WO
, // Opt_Disk - Hitachi 12" Write Once
308 CYGNET_12_WO
, // Opt_Disk - Cygnet/ATG 12" Write Once
309 KODAK_14_WO
, // Opt_Disk - Kodak 14" Write Once
310 MO_NFR_525
, // Opt_Disk - Near Field Recording (Terastor)
311 NIKON_12_RW
, // Opt_Disk - Nikon 12" Rewriteable
312 IOMEGA_ZIP
, // Mag_Disk - Iomega Zip
313 IOMEGA_JAZ
, // Mag_Disk - Iomega Jaz
314 SYQUEST_EZ135
, // Mag_Disk - Syquest EZ135
315 SYQUEST_EZFLYER
, // Mag_Disk - Syquest EzFlyer
316 SYQUEST_SYJET
, // Mag_Disk - Syquest SyJet
317 AVATAR_F2
, // Mag_Disk - 2.5" Floppy
318 MP2_8mm
, // Tape - 8mm Hitachi
319 DST_S
, // Ampex DST Small Tapes
320 DST_M
, // Ampex DST Medium Tapes
321 DST_L
, // Ampex DST Large Tapes
322 VXATape_1
, // Ecrix 8mm Tape
323 VXATape_2
, // Ecrix 8mm Tape
324 STK_EAGLE
, // STK Eagle
325 LTO_Ultrium
, // IBM, HP, Seagate LTO Ultrium
326 LTO_Accelis
// IBM, HP, Seagate LTO Accelis
327 } STORAGE_MEDIA_TYPE
, *PSTORAGE_MEDIA_TYPE
;
329 #endif //IOCTL_STORAGE_GET_MEDIA_TYPES_EX
332 //**********************************************************************************************
334 typedef struct _SET_CD_SPEED_USER_IN
{
335 ULONG ReadSpeed
; // Kbyte/sec 176 = 1X
336 ULONG WriteSpeed
; // Kbyte/sec
337 } SET_CD_SPEED_USER_IN
, *PSET_CD_SPEED_USER_IN
;
339 typedef struct _SET_CD_SPEED_EX_USER_IN
{
340 ULONG ReadSpeed
; // Kbyte/sec 176 = 1X
341 ULONG WriteSpeed
; // Kbyte/sec
344 } SET_CD_SPEED_EX_USER_IN
, *PSET_CD_SPEED_EX_USER_IN
;
346 //**********************************************************************************************
348 typedef struct _SET_STREAMING_USER_IN
{
352 UCHAR RA
: 1; // Random Access
354 UCHAR RDD
: 1; // Restore Defaults
365 ULONG ReadSize
; // KBytes
366 ULONG ReadTime
; // ms
368 ULONG WriteSize
; // KBytes
369 ULONG WriteTime
; // ms
370 } SET_STREAMING_USER_IN
, *PSET_STREAMING_USER_IN
;
372 //**********************************************************************************************
375 #ifndef SyncCache_RELADR
376 #define SyncCache_RELADR 0x01
377 #define SyncCache_Immed 0x02
378 #endif //SyncCache_RELADR
381 typedef struct _SYNC_CACHE_USER_IN
{
392 } SYNC_CACHE_USER_IN
, *PSYNC_CACHE_USER_IN
;
394 //**********************************************************************************************
396 typedef struct _BUFFER_CAPACITY_BLOCK_USER_OUT
{
399 ULONG BlankBufferLength
;
401 BOOLEAN LostStreaming
;
402 ULONG MaximumPhysicalPages
;
403 ULONG MaximumTransferLength
;
404 ULONG ActualMaximumTransferLength
;
405 } BUFFER_CAPACITY_BLOCK_USER_OUT
, *PBUFFER_CAPACITY_BLOCK_USER_OUT
;
407 //**********************************************************************************************
409 typedef struct _TRACK_INFO_BLOCK_USER_OUT
{
445 ULONG LastRecordedAddr
;
446 UCHAR _TrackNum2
; // MSB
447 UCHAR _SesNum2
; // MSB
456 UCHAR TrackStartMSF
[3];
457 UCHAR NextWriteMSF
[3];
461 } TRACK_INFO_BLOCK_USER_OUT
, *PTRACK_INFO_BLOCK_USER_OUT
;
463 //**********************************************************************************************
465 typedef struct _TRACK_INFO_BLOCK_USER_IN
{
468 } TRACK_INFO_BLOCK_USER_IN
, *PTRACK_INFO_BLOCK_USER_IN
;
470 //**********************************************************************************************
472 typedef READ_CAPACITY_DATA READ_CAPACITY_USER_OUT
;
473 typedef PREAD_CAPACITY_DATA PREAD_CAPACITY_USER_OUT
;
475 //**********************************************************************************************
477 typedef struct _GET_SIGNATURE_USER_OUT
{
479 USHORT VersiomMajor
;
480 USHORT VersiomMinor
;
481 USHORT VersiomId
; // alfa/beta/...
484 } GET_SIGNATURE_USER_OUT
, *PGET_SIGNATURE_USER_OUT
;
486 //**********************************************************************************************
489 #ifndef BlankMedia_Mask
490 #define BlankMedia_Mask 0x07
491 #define BlankMedia_Complete 0x00
492 #define BlankMedia_Minimal 0x01
493 #define BlankMedia_Track 0x02
494 #define BlankMedia_UnreserveTrack 0x03
495 #define BlankMedia_TrackTail 0x04
496 #define BlankMedia_UncloseLastSes 0x05
497 #define BlankMedia_EraseSes 0x06
498 #define BlankMedia_Immed 0x10
499 #endif //BlankMedia_Mask
502 typedef struct _BLANK_MEDIA_USER_IN
{
513 ULONG StartAddr_TrkNum
;
514 } BLANK_MEDIA_USER_IN
, *PBLANK_MEDIA_USER_IN
;
516 //**********************************************************************************************
518 typedef struct _RESERVE_TRACK_USER_IN
{
520 } RESERVE_TRACK_USER_IN
, *PRESERVE_TRACK_USER_IN
;
522 #define RESERVE_TRACK_EX_SIZE 0x0
523 #define RESERVE_TRACK_EX_START_LBA 0x1
524 #define RESERVE_TRACK_EX_RMZ 0x2
526 typedef struct _RESERVE_TRACK_EX_USER_IN
{
532 } RESERVE_TRACK_EX_USER_IN
, *PRESERVE_TRACK_EX_USER_IN
;
534 //**********************************************************************************************
536 typedef struct _LL_WRITE_USER_IN
{
551 } LL_WRITE_USER_IN
, *PLL_WRITE_USER_IN
;
553 //**********************************************************************************************
555 //#ifndef WITHOUT_FORMATTER
558 #ifndef FormatDesc_Grow
559 #define FormatDesc_Grow 0x40
560 #define FormatDesc_Ses 0x80
564 #define FORMAT_UNIT_FORCE_STD_MODE 0x80000000
565 #define FORMAT_UNIT_FORCE_FULL_FMT 0x40000000
566 #define FORMAT_UNIT_RESTART_MRW 0x01000000
568 typedef struct _FORMAT_CDRW_PARAMETERS_USER_IN
{
579 } FORMAT_CDRW_PARAMETERS_USER_IN
, *PFORMAT_CDRW_PARAMETERS_USER_IN
;
581 //#endif //WITHOUT_FORMATTER
583 //**********************************************************************************************
586 #ifndef CloseTrkSes_Immed
587 #define CloseTrkSes_Immed 0x01
589 #define CloseTrkSes_Trk 0x01
590 #define CloseTrkSes_Ses 0x02
592 #define CloseTrkSes_LastTrkSes 0xff
596 typedef struct _CLOSE_TRK_SES_USER_IN
{
613 } CLOSE_TRK_SES_USER_IN
, *PCLOSE_TRK_SES_USER_IN
;
615 //**********************************************************************************************
617 typedef struct _PREVENT_MEDIA_REMOVAL_USER_IN
{
618 BOOLEAN PreventMediaRemoval
;
619 } PREVENT_MEDIA_REMOVAL_USER_IN
, *PPREVENT_MEDIA_REMOVAL_USER_IN
;
621 //**********************************************************************************************
623 typedef struct _SET_RANDOM_ACCESS_USER_IN
{
624 BOOLEAN RandomAccessMode
;
625 } SET_RANDOM_ACCESS_USER_IN
, *PSET_RANDOM_ACCESS_USER_IN
;
627 //**********************************************************************************************
630 #ifndef DiscInfo_Disk_Mask
631 #define DiscInfo_Disk_Mask 0x03
632 #define DiscInfo_Disk_Empty 0x00
633 #define DiscInfo_Disk_Appendable 0x01
634 #define DiscInfo_Disk_Complete 0x02
636 #define DiscInfo_Ses_Mask 0x0C
637 #define DiscInfo_Ses_Empty 0x00
638 #define DiscInfo_Ses_Incomplete 0x04
639 #define DiscInfo_Ses_Complete 0x0C
641 #define DiscInfo_Disk_Erasable 0x10
643 #define DiscInfo_URU 0x10
644 #define DiscInfo_DBC_V 0x20
645 #define DiscInfo_DID_V 0x40
647 #define DiscInfo_Type_cdrom 0x00 // CD-DA / CD-ROM
648 #define DiscInfo_Type_cdi 0x10 // CD-I
649 #define DiscInfo_Type_cdromxa 0x20 // CD-ROM XA
650 #define DiscInfo_Type_unknown 0xFF // HZ ;)
655 typedef struct _DISC_STATUS_INFO_USER_OUT
{
658 UCHAR AdditionalSenseCode
;
659 UCHAR AdditionalSenseCodeQualifier
;
661 BOOLEAN RandomAccessMode
;
664 LARGE_INTEGER MediaChangeTime
;
666 UCHAR LastSesLeadInMSF
[4];
667 UCHAR LastSesLeadOutMSF
[4];
670 ULONG FirstTrackNumLastSes
;
671 ULONG LastTrackNumLastSes
;
672 ULONG Reserved1
; // this is used to align data
674 } DISC_STATUS_INFO_USER_OUT
, *PDISC_STATUS_INFO_USER_OUT
;
676 #define DiscStatus_Formattable 0x01
678 typedef struct _DISC_INFO_BLOCK_USER_OUT
{ //
680 DISC_STATUS_INFO_USER_OUT Status
;
688 UCHAR LastSesStat
: 2;
696 UCHAR FirstTrackNumLastSes
;
697 UCHAR LastTrackNumLastSes
;
704 UCHAR DBC_V
: 1; // 0
710 UCHAR NumOfSes2
; // MSB MMC-3
711 UCHAR FirstTrackNumLastSes2
; // MSB MMC-3
712 UCHAR LastTrackNumLastSes2
; // MSB MMC-3
714 ULONG LastSesLeadInLBA
;
715 ULONG LastSesLeadOutLBA
;
716 UCHAR DiskBarCode
[8];
719 } DISC_INFO_BLOCK_USER_OUT
, *PDISC_INFO_BLOCK_USER_OUT
;
721 //**********************************************************************************************
723 typedef struct _TEST_UNIT_READY_USER_IN
{
725 } TEST_UNIT_READY_USER_IN
, *PTEST_UNIT_READY_USER_IN
;
727 typedef struct _TEST_UNIT_READY_USER_OUT
{
730 UCHAR AdditionalSenseCode
;
731 UCHAR AdditionalSenseCodeQualifier
;
732 } TEST_UNIT_READY_USER_OUT
, *PTEST_UNIT_READY_USER_OUT
;
734 //**********************************************************************************************
737 #ifndef MediaType_Unknown
739 #define MediaType_Unknown 0x00
740 #define MediaType_120mm_CDROM_DataOnly 0x01
741 #define MediaType_120mm_CDROM_AudioOnly 0x02 //CDDA
742 #define MediaType_120mm_CDROM_DataAudioCombined 0x03
743 #define MediaType_120mm_CDROM_Hybrid_PhotoCD 0x04
744 #define MediaType_80mm_CDROM_DataOnly 0x05
745 #define MediaType_80mm_CDROM_AudioOnly 0x06 //CDDA
746 #define MediaType_80mm_CDROM_DataAudioCombined 0x07
747 #define MediaType_80mm_CDROM_Hybrid_PhotoCD 0x08
749 #define MediaType_UnknownSize_CDR 0x10
750 #define MediaType_120mm_CDR_DataOnly 0x11
751 #define MediaType_120mm_CDR_AudioOnly 0x12 //CDDA
752 #define MediaType_120mm_CDR_DataAudioCombined 0x13
753 #define MediaType_120mm_CDR_Hybrid_PhotoCD 0x14
754 #define MediaType_80mm_CDR_DataOnly 0x15
755 #define MediaType_80mm_CDR_AudioOnly 0x16 //CDDA
756 #define MediaType_80mm_CDR_DataAudioCombined 0x17
757 #define MediaType_80mm_CDR_Hybrid_Photo_CD 0x18
759 #define MediaType_UnknownSize_CDRW 0x20
760 #define MediaType_120mm_CDRW_DataOnly 0x21
761 #define MediaType_120mm_CDRW_AudioOnly 0x22 //CDDA
762 #define MediaType_120mm_CDRW_DataAudioCombined 0x23
763 #define MediaType_120mm_CDRW_Hybrid 0x24
764 #define MediaType_80mm_CDRW_DataOnly 0x25
765 #define MediaType_80mm_CDRW_AudioOnly 0x26 //CDDA
766 #define MediaType_80mm_CDRW_DataAudioCombined 0x27
767 #define MediaType_80mm_CDRW_Hybrid 0x28
769 #define MediaType_UnknownSize_Unknown 0x30
771 #define MediaType_NoDiscPresent 0x70
772 #define MediaType_DoorOpen 0x71
777 typedef struct _GET_MEDIA_TYPE_USER_OUT
{
779 } GET_MEDIA_TYPE_USER_OUT
, *PGET_MEDIA_TYPE_USER_OUT
;
781 typedef struct _GET_MEDIA_TYPE_EX_USER_OUT
{
782 UCHAR OldStyleMediaType
; // see GET_MEDIA_TYPE_USER_OUT
789 UCHAR Layers
; // Number of layers - 1 (e.g. 0 => 1 layer)
790 UCHAR Reserved
[8]; // for future implementation
791 } GET_MEDIA_TYPE_EX_USER_OUT
, *PGET_MEDIA_TYPE_EX_USER_OUT
;
793 #define CdMediaClass_CDROM 0x00
794 #define CdMediaClass_CDR 0x01
795 #define CdMediaClass_CDRW 0x02
796 #define CdMediaClass_DVDROM 0x03
797 #define CdMediaClass_DVDRAM 0x05
798 #define CdMediaClass_DVDR 0x06
799 #define CdMediaClass_DVDRW 0x07
800 #define CdMediaClass_DVDpR 0x08
801 #define CdMediaClass_DVDpRW 0x09
802 #define CdMediaClass_DDCDROM 0x0a
803 #define CdMediaClass_DDCDR 0x0b
804 #define CdMediaClass_DDCDRW 0x0c
805 #define CdMediaClass_BDROM 0x0d
806 #define CdMediaClass_BDRE 0x0e
807 #define CdMediaClass_BDR 0x0f
808 #define CdMediaClass_HD_DVDROM 0x10
809 #define CdMediaClass_HD_DVDRAM 0x11
810 #define CdMediaClass_HD_DVDR 0x12
811 #define CdMediaClass_HD_DVDRW 0x13
812 #define CdMediaClass_NoDiscPresent 0x70
813 #define CdMediaClass_DoorOpen 0x71
814 #define CdMediaClass_Unknown 0xff
816 #define CdMediaClass_Max CdMediaClass_HD_DVDRW
818 #define CdMediaSize_Unknown 0
819 #define CdMediaSize_120mm 1
820 #define CdMediaSize_80mm 2
822 #define CdDataType_Unknown 0
823 #define CdDataType_DataOnly 1
824 #define CdDataType_AudioOnly 2 //CDDA
825 #define CdDataType_DataAudioCombined 3
826 #define CdDataType_Hybrid 4
827 #define CdDataType_DataOnlyMRW 5
829 #define CdMediaClassEx_CD 0x00
830 #define CdMediaClassEx_DVD 0x01
831 #define CdMediaClassEx_DDCD 0x02
832 #define CdMediaClassEx_BD 0x03
833 #define CdMediaClassEx_HD_DVD 0x04
834 #define CdMediaClassEx_None 0x70
835 #define CdMediaClassEx_Unknown 0xff
837 #define CdDataClassEx_ROM 0x00
838 #define CdDataClassEx_R 0x01
839 #define CdDataClassEx_RW 0x02
840 #define CdDataClassEx_Unknown 0xff
842 #define CdCapFlags_Writable 0x01
843 #define CdCapFlags_Erasable 0x02
844 #define CdCapFlags_Formatable 0x04
845 #define CdCapFlags_WriteParamsReq 0x08
846 #define CdCapFlags_RandomWritable 0x10
847 #define CdCapFlags_Cav 0x20
849 #define CdrwMediaClassEx_IsRAM(MediaClassEx) ( \
850 ((MediaClassEx) == CdMediaClass_DVDRAM) || \
851 ((MediaClassEx) == CdMediaClass_BDRE) || \
852 ((MediaClassEx) == CdMediaClass_HD_DVDRAM) )
854 #define CdrwIsDvdOverwritable(MediaClassEx) \
855 ((MediaClassEx) == CdMediaClass_DVDRW || \
856 (MediaClassEx) == CdMediaClass_DVDpRW || \
857 (MediaClassEx) == CdMediaClass_DVDRAM || \
858 (MediaClassEx) == CdMediaClass_BDRE || \
859 (MediaClassEx) == CdMediaClass_HD_DVDRW || \
860 (MediaClassEx) == CdMediaClass_HD_DVDRAM \
863 //**********************************************************************************************
866 #ifndef MAX_PAGE_SIZE
867 #define MAX_PAGE_SIZE 0x100
871 typedef struct _MODE_SENSE_USER_IN
{
877 UCHAR PageSavable
: 1;
880 } MODE_SENSE_USER_IN
, *PMODE_SENSE_USER_IN
;
882 typedef struct _MODE_SENSE_USER_OUT
{
883 MODE_PARAMETER_HEADER Header
;
884 } MODE_SENSE_USER_OUT
, *PMODE_SENSE_USER_OUT
;
886 //**********************************************************************************************
888 typedef struct _MODE_SELECT_USER_IN
{
889 MODE_PARAMETER_HEADER Header
;
890 } MODE_SELECT_USER_IN
, *PMODE_SELECT_USER_IN
;
892 //**********************************************************************************************
894 typedef struct _MODE_WRITE_PARAMS_PAGE_USER
{ // 0x05
897 UCHAR PageSavable
: 1;
899 UCHAR PageLength
; // 0x32
902 #ifndef WParam_WType_Mask
903 #define WParam_WType_Mask 0x0f
904 #define WParam_WType_Packet 0x00
905 #define WParam_WType_TAO 0x01
906 #define WParam_WType_Ses 0x02
907 #define WParam_WType_Raw 0x03
908 #define WParam_TestWrite 0x10
909 #define WParam_LS_V 0x20
910 #define WParam_BUFF 0x40
917 UCHAR WriteType
: 4; // 1
926 #ifndef WParam_TrkMode_Mask
927 #define WParam_TrkMode_Mask 0x0f
928 #define WParam_TrkMode_None 0x00
929 #define WParam_TrkMode_Audio 0x00
930 #define WParam_TrkMode_Audio_PreEmph 0x01
931 #define WParam_TrkMode_Data 0x04
932 #define WParam_TrkMode_IncrData 0x05
933 #define WParam_TrkMode_QAudio_PreEmph 0x08
934 #define WParam_TrkMode_AllowCpy 0x02
935 #define WParam_Copy 0x10
936 #define WParam_FP 0x20
937 #define WParam_MultiSes_Mask 0xc0
938 #define WParam_Multises_None 0x00
939 #define WParam_Multises_Final 0x80
940 #define WParam_Multises_Multi 0xc0
947 UCHAR TrackMode
: 4; // 4
950 UCHAR Multisession
: 2; // 11
955 #ifndef WParam_BlkType_Mask
956 #define WParam_BlkType_Mask 0x0f
957 #define WParam_BlkType_Raw_2352 0x00
958 #define WParam_BlkType_RawPQ_2368 0x01
959 #define WParam_BlkType_RawPW_2448 0x02
960 #define WParam_BlkType_RawPW_R_2448 0x03
961 #define WParam_BlkType_M1_2048 0x08
962 #define WParam_BlkType_M2_2336 0x09
963 #define WParam_BlkType_M2XAF1_2048 0x0a
964 #define WParam_BlkType_M2XAF1SH_2056 0x0b
965 #define WParam_BlkType_M2XAF2_2324 0x0c
966 #define WParam_BlkType_M2XAFXSH_2332 0x0d
973 UCHAR DataBlockType
: 4; // 8
984 UCHAR HostAppCode
: 6; // 0
990 #ifndef WParam_SesFmt_CdRom
991 #define WParam_SesFmt_CdRom 0x00
992 #define WParam_SesFmt_CdI 0x10
993 #define WParam_SesFmt_CdRomXa 0x20
999 ULONG PacketSize
; // 0
1000 USHORT AudioPause
; // 150
1020 struct _SubHdrParams1
{
1025 #define WParam_SubHdr_SubMode0 0x00
1026 #define WParam_SubHdr_SubMode1 0x08
1034 #define WParam_SubHdr_Mode_Mask 0x03
1035 #define WParam_SubHdr_Mode0 0x00
1036 #define WParam_SubHdr_Mode1 0x01
1037 #define WParam_SubHdr_Mode2 0x02
1038 #define WParam_SubHdr_Format_Mask 0xe0
1039 #define WParam_SubHdr_Format_UserData 0x00
1040 #define WParam_SubHdr_Format_RunIn4 0x20
1041 #define WParam_SubHdr_Format_RunIn3 0x40
1042 #define WParam_SubHdr_Format_RunIn2 0x60
1043 #define WParam_SubHdr_Format_RunIn1 0x80
1044 #define WParam_SubHdr_Format_Link 0xa0
1045 #define WParam_SubHdr_Format_RunOut2 0xc0
1046 #define WParam_SubHdr_Format_RunOut1 0xe0
1058 } MODE_WRITE_PARAMS_PAGE_USER
, *PMODE_WRITE_PARAMS_PAGE_USER
;
1060 typedef MODE_WRITE_PARAMS_PAGE_USER GET_WRITE_MODE_USER_OUT
;
1061 typedef PMODE_WRITE_PARAMS_PAGE_USER PGET_WRITE_MODE_USER_OUT
;
1063 typedef MODE_WRITE_PARAMS_PAGE_USER SET_WRITE_MODE_USER_IN
;
1064 typedef PMODE_WRITE_PARAMS_PAGE_USER PSET_WRITE_MODE_USER_IN
;
1066 //**********************************************************************************************
1068 #ifndef WITHOUT_FORMATTER
1070 typedef MODE_MRW_PAGE GET_MRW_MODE_USER_OUT
;
1071 typedef PMODE_MRW_PAGE PGET_MRW_MODE_USER_OUT
;
1073 typedef MODE_MRW_PAGE SET_MRW_MODE_USER_IN
;
1074 typedef PMODE_MRW_PAGE PSET_MRW_MODE_USER_IN
;
1076 #endif //WITHOUT_FORMATTER
1078 //**********************************************************************************************
1080 typedef struct _SET_READ_AHEAD_USER_IN
{
1083 } SET_READ_AHEAD_USER_IN
, *PSET_READ_AHEAD_USER_IN
;
1085 //**********************************************************************************************
1087 typedef struct _GET_CAPABILITIES_USER_OUT
{
1089 UCHAR Reserved1
: 1;
1095 #ifndef DevCap_read_cd_r
1096 #define DevCap_read_cd_r 0x01 // reserved in 1.2
1097 #define DevCap_read_cd_rw 0x02 // reserved in 1.2
1098 #define DevCap_method2 0x04
1099 #define DevCap_read_dvd_rom 0x08
1100 #define DevCap_read_dvd_r 0x10
1101 #define DevCap_read_dvd_ram 0x20
1102 #endif //DevCap_cd_r_read
1105 UCHAR ReadCap
; // DevCap_*_read
1106 /* UCHAR cd_r_read : 1; // reserved in 1.2
1107 UCHAR cd_rw_read : 1; // reserved in 1.2
1110 UCHAR dvd_r_read : 1;
1111 UCHAR dvd_ram_read : 1;
1112 UCHAR Reserved2 : 2;*/
1115 #ifndef DevCap_write_cd_r
1116 #define DevCap_write_cd_r 0x01 // reserved in 1.2
1117 #define DevCap_write_cd_rw 0x02 // reserved in 1.2
1118 #define DevCap_test_write 0x04
1119 #define DevCap_write_dvd_r 0x10
1120 #define DevCap_write_dvd_ram 0x20
1121 #endif //DevCap_cd_r_write
1124 UCHAR WriteCap
; // DevCap_*_write
1125 /* UCHAR cd_r_write : 1; // reserved in 1.2
1126 UCHAR cd_rw_write : 1; // reserved in 1.2
1127 UCHAR dvd_ram_write : 1;
1128 UCHAR dvd_r_write : 1;
1129 UCHAR reserved3a : 1;
1130 UCHAR test_write : 1;
1131 UCHAR Reserved3 : 2;*/
1134 #ifndef DevCap_audio_play
1135 #define DevCap_audio_play 0x01
1136 #define DevCap_composite 0x02
1137 #define DevCap_digport1 0x04
1138 #define DevCap_digport2 0x08
1139 #define DevCap_mode2_form1 0x10
1140 #define DevCap_mode2_form2 0x20
1141 #define DevCap_multisession 0x40
1142 #endif //DevCap_audio_play
1145 UCHAR Capabilities0
;
1146 /* UCHAR audio_play : 1;
1147 UCHAR composite : 1;
1150 UCHAR mode2_form1 : 1;
1151 UCHAR mode2_form2 : 1;
1152 UCHAR multisession : 1;
1153 UCHAR Reserved4 : 1;*/
1157 #define DevCap_cdda 0x01
1158 #define DevCap_cdda_accurate 0x02
1159 #define DevCap_rw_supported 0x04
1160 #define DevCap_rw_corr 0x08
1161 #define DevCap_c2_pointers 0x10
1162 #define DevCap_isrc 0x20
1163 #define DevCap_upc 0x40
1164 #define DevCap_read_bar_code 0x80
1165 #endif //DevCap_cdda
1168 UCHAR Capabilities1
;
1170 UCHAR cdda_accurate : 1;
1171 UCHAR rw_supported : 1;
1173 UCHAR c2_pointers : 1;
1176 UCHAR Reserved5 : 1;*/
1180 #define DevCap_lock 0x01
1181 #define DevCap_lock_state 0x02
1182 #define DevCap_prevent_jumper 0x04
1183 #define DevCap_eject 0x08
1184 #define DevCap_mechtype_mask 0xE0
1185 #define DevCap_mechtype_caddy 0x00
1186 #define DevCap_mechtype_tray (0x01<<5)
1187 #define DevCap_mechtype_popup (0x02<<5)
1188 #define DevCap_mechtype_individual_changer (0x04<<5)
1189 #define DevCap_mechtype_cartridge_changer (0x05<<5)
1190 #endif //DevCap_lock
1193 UCHAR Capabilities2
;
1195 UCHAR lock_state : 1;
1196 UCHAR prevent_jumper : 1;
1198 UCHAR Reserved6 : 1;
1199 UCHAR mechtype : 3;*/
1202 #ifndef DevCap_separate_volume
1203 #define DevCap_separate_volume 0x01
1204 #define DevCap_separate_mute 0x02
1205 #define DevCap_disc_present 0x04 // reserved in 1.2
1206 #define DevCap_sw_slot_select 0x08 // reserved in 1.2
1207 #define DevCap_change_side_cap 0x10
1208 #define DevCap_rw_leadin_read 0x20
1209 #endif //DevCap_separate_volume
1212 UCHAR Capabilities3
;
1213 /* UCHAR separate_volume : 1;
1214 UCHAR separate_mute : 1;
1215 UCHAR disc_present : 1; // reserved in 1.2
1216 UCHAR sss : 1; // reserved in 1.2
1217 UCHAR Reserved7 : 4;*/
1219 USHORT MaximumSpeedSupported
;
1220 USHORT NumberVolumeLevels
;
1222 USHORT CurrentSpeed
;
1226 UCHAR SpecialParameters0
;
1227 /* UCHAR Reserved9 : 1;
1232 UCHAR Reserved10 : 2;*/
1234 USHORT MaximumWriteSpeedSupported
;
1235 USHORT CurrentWriteSpeed
;
1236 USHORT CopyManagementRevision
;
1237 UCHAR Reserved11
[2];
1239 } GET_CAPABILITIES_USER_OUT
, *PGET_CAPABILITIES_USER_OUT
;
1241 typedef struct _GET_CAPABILITIES_3_USER_OUT
{
1244 UCHAR Reserved1
: 1;
1248 UCHAR ReadCap
; // DevCap_*_read
1249 UCHAR WriteCap
; // DevCap_*_write
1250 UCHAR Capabilities0
;
1251 UCHAR Capabilities1
;
1252 UCHAR Capabilities2
;
1253 UCHAR Capabilities3
;
1254 USHORT MaximumSpeedSupported
;
1255 USHORT NumberVolumeLevels
;
1257 USHORT CurrentSpeed
;
1260 UCHAR SpecialParameters0
;
1262 USHORT MaximumWriteSpeedSupported
;
1263 USHORT CurrentWriteSpeed
;
1264 USHORT CopyManagementRevision
;
1265 UCHAR Reserved11
[2];
1271 UCHAR SpecialParameters1
;
1272 /* UCHAR RCS : 2; // rotation control selected
1273 UCHAR Reserved13 : 6; */
1275 USHORT CurrentWriteSpeed3
;
1276 USHORT LunWPerfDescriptorCount
;
1278 // LUN_WRITE_PERF_DESC_USER WritePerfDescs[0];
1280 } GET_CAPABILITIES_3_USER_OUT
, *PGET_CAPABILITIES_3_USER_OUT
;
1282 typedef struct _LUN_WRITE_PERF_DESC_USER
{
1285 #define LunWPerf_RotCtrl_Mask 0x07
1286 #define LunWPerf_RotCtrl_CLV 0x00
1287 #define LunWPerf_RotCtrl_CAV 0x01
1289 UCHAR RotationControl
;
1290 USHORT WriteSpeedSupported
; // kbps
1292 } LUN_WRITE_PERF_DESC_USER
, *PLUN_WRITE_PERF_DESC_USER
;
1294 //**********************************************************************************************
1296 typedef struct _SEND_OPC_INFO_USER_IN
{
1299 } SEND_OPC_INFO_USER_IN
, *PSEND_OPC_INFO_USER_IN
;
1301 typedef struct _SEND_OPC_INFO_HEADER_USER_IN
{
1303 USHORT OpcBlocksNumber
;
1304 } SEND_OPC_INFO_HEADER_USER_IN
, *PSEND_OPC_INFO_HEADER_USER_IN
;
1306 //**********************************************************************************************
1308 typedef struct _LL_READ_USER_IN
{
1310 #define ReadCd_BlkType_Mask 0x1c
1311 #define ReadCd_BlkType_Any (0x00<<2)
1312 #define ReadCd_BlkType_CDDA (0x01<<2)
1313 #define ReadCd_BlkType_M1 (0x02<<2)
1314 #define ReadCd_BlkType_M2FX (0x03<<2)
1315 #define ReadCd_BlkType_M2F1 (0x04<<2)
1316 #define ReadCd_BlkType_M2F2 (0x05<<2)
1318 UCHAR ExpectedBlkType
;
1320 ULONG LBA
; // negative value (-1) indicates tha (H)MSF must be used
1323 #define ReadCd_Error_Mask 0x0006
1324 #define ReadCd_Error_None 0x0000
1325 #define ReadCd_Error_C2 0x0002
1326 #define ReadCd_Error_C2ex 0x0004
1327 #define ReadCd_Include_EDC 0x0008
1328 #define ReadCd_Include_UsrData 0x0010
1329 #define ReadCd_Header_Mask 0x0060
1330 #define ReadCd_Header_None 0x0000
1331 #define ReadCd_Header_Hdr 0x0020
1332 #define ReadCd_Header_SubHdr 0x0040
1333 #define ReadCd_Header_AllHdr 0x0060
1334 #define ReadCd_Include_SyncData 0x0080
1335 #define ReadCd_SubChan_Mask 0x0700
1336 #define ReadCd_SubChan_None 0x0000
1337 #define ReadCd_SubChan_Raw 0x0100
1338 #define ReadCd_SubChan_Q 0x0200
1339 #define ReadCd_SubChan_PW 0x0400
1340 #define ReadCd_SubChan_All ReadCd_SubChan_Mask
1345 UCHAR Reserved2
: 1;
1346 UCHAR ErrorFlags
: 2;
1347 UCHAR IncludeEDC
: 1;
1348 UCHAR IncludeUserData
: 1;
1349 UCHAR HeaderCode
: 2;
1350 UCHAR IncludeSyncData
: 1;
1352 UCHAR SubChannelSelection
: 3;
1353 UCHAR Reserved3
: 5;
1358 CHAR Starting_MSF
[3];
1361 } LL_READ_USER_IN
, *PLL_READ_USER_IN
;
1363 //**********************************************************************************************
1365 typedef struct _GET_LAST_ERROR_USER_OUT
{
1369 UCHAR AdditionalSenseCode
;
1370 UCHAR AdditionalSenseCodeQualifier
;
1373 BOOLEAN RandomAccessMode
;
1374 LARGE_INTEGER MediaChangeTime
;
1375 ULONG MediaChangeCount
;
1377 } GET_LAST_ERROR_USER_OUT
, *PGET_LAST_ERROR_USER_OUT
;
1379 //**********************************************************************************************
1381 typedef enum _TRACK_MODE_TYPE
{
1385 } TRACK_MODE_TYPE
, *PTRACK_MODE_TYPE
;
1387 typedef struct _RAW_READ_USER_IN
{
1388 LARGE_INTEGER DiskOffset
;
1390 TRACK_MODE_TYPE TrackMode
;
1391 } RAW_READ_USER_IN
, *PRAW_READ_USER_IN
;
1393 //**********************************************************************************************
1395 typedef struct _PLAY_AUDIO_MSF_USER_IN
{
1396 UCHAR StartingMSF
[3];
1398 } PLAY_AUDIO_MSF_USER_IN
, *PPLAY_AUDIO_MSF_USER_IN
;
1400 //**********************************************************************************************
1402 #define AudioStatus_NotSupported 0x00
1403 #define AudioStatus_InProgress 0x11
1404 #define AudioStatus_Paused 0x12
1405 #define AudioStatus_PlayComplete 0x13
1406 #define AudioStatus_PlayError 0x14
1407 #define AudioStatus_NoStatus 0x15
1409 typedef struct _SUB_Q_HEADER
{
1412 UCHAR DataLength
[2];
1413 } SUB_Q_HEADER
, *PSUB_Q_HEADER
;
1415 typedef struct _SUB_Q_CURRENT_POSITION
{
1416 SUB_Q_HEADER Header
;
1422 UCHAR AbsoluteAddress
[4];
1423 UCHAR TrackRelativeAddress
[4];
1424 } SUB_Q_CURRENT_POSITION
, *PSUB_Q_CURRENT_POSITION
;
1426 typedef struct _SUB_Q_MEDIA_CATALOG_NUMBER
{
1427 SUB_Q_HEADER Header
;
1430 UCHAR Reserved1
: 7;
1432 UCHAR MediaCatalog
[15];
1433 } SUB_Q_MEDIA_CATALOG_NUMBER
, *PSUB_Q_MEDIA_CATALOG_NUMBER
;
1435 typedef struct _SUB_Q_TRACK_ISRC
{
1436 SUB_Q_HEADER Header
;
1441 UCHAR Reserved2
: 7;
1443 UCHAR TrackIsrc
[15];
1444 } SUB_Q_TRACK_ISRC
, *PSUB_Q_TRACK_ISRC
;
1446 typedef union _SUB_Q_CHANNEL_DATA_USER_OUT
{
1447 SUB_Q_CURRENT_POSITION CurrentPosition
;
1448 SUB_Q_MEDIA_CATALOG_NUMBER MediaCatalog
;
1449 SUB_Q_TRACK_ISRC TrackIsrc
;
1450 } SUB_Q_CHANNEL_DATA_USER_OUT
, *PSUB_Q_CHANNEL_DATA_USER_OUT
;
1452 #define IOCTL_CDROM_SUB_Q_CHANNEL 0x00
1453 #define IOCTL_CDROM_CURRENT_POSITION 0x01
1454 #define IOCTL_CDROM_MEDIA_CATALOG 0x02
1455 #define IOCTL_CDROM_TRACK_ISRC 0x03
1457 typedef struct _SUB_Q_CHANNEL_DATA_USER_IN
{
1460 } SUB_Q_CHANNEL_DATA_USER_IN
, *PSUB_Q_CHANNEL_DATA_USER_IN
;
1462 //**********************************************************************************************
1464 typedef struct _SEEK_AUDIO_MSF_USER_IN
{
1466 } SEEK_AUDIO_MSF_USER_IN
, *PSEEK_AUDIO_MSF_USER_IN
;
1468 //**********************************************************************************************
1470 typedef struct _AUDIO_CONTROL_USER_OUT
{
1472 USHORT LogicalBlocksPerSecond
;
1473 } AUDIO_CONTROL_USER_OUT
, *PAUDIO_CONTROL_USER_OUT
;
1475 //**********************************************************************************************
1477 typedef READ_TOC_TOC READ_TOC_USER_OUT
;
1478 typedef PREAD_TOC_TOC PREAD_TOC_USER_OUT
;
1480 typedef READ_TOC_SES GET_LAST_SESSION_USER_OUT
;
1481 typedef PREAD_TOC_SES PGET_LAST_SESSION_USER_OUT
;
1483 typedef READ_TOC_FULL_TOC READ_FULL_TOC_USER_OUT
;
1484 typedef PREAD_TOC_FULL_TOC PREAD_FULL_TOC_USER_OUT
;
1486 typedef READ_TOC_FULL_TOC READ_PMA_USER_OUT
;
1487 typedef PREAD_TOC_FULL_TOC PREAD_PMA_USER_OUT
;
1489 typedef READ_TOC_ATIP READ_ATIP_USER_OUT
;
1490 typedef PREAD_TOC_ATIP PREAD_ATIP_USER_OUT
;
1492 typedef READ_TOC_CD_TEXT READ_CD_TEXT_USER_OUT
;
1493 typedef PREAD_TOC_CD_TEXT PREAD_CD_TEXT_USER_OUT
;
1495 //**********************************************************************************************
1497 typedef struct _VOLUME_CONTROL
{
1498 UCHAR PortVolume
[4];
1499 } VOLUME_CONTROL
, *PVOLUME_CONTROL
;
1501 typedef VOLUME_CONTROL VOLUME_CONTROL_USER_IN
;
1502 typedef PVOLUME_CONTROL PVOLUME_CONTROL_USER_IN
;
1504 typedef VOLUME_CONTROL VOLUME_CONTROL_USER_OUT
;
1505 typedef PVOLUME_CONTROL PVOLUME_CONTROL_USER_OUT
;
1507 //**********************************************************************************************
1509 typedef struct _INIT_DEINIT_USER_IN
{
1510 BOOLEAN PassThrough
;
1511 BOOLEAN Reserved
; // For separate device (de)initialization
1512 } INIT_DEINIT_USER_IN
, *PINIT_DEINIT_USER_IN
;
1514 typedef INIT_DEINIT_USER_IN INIT_DEINIT_USER_OUT
;
1515 typedef PINIT_DEINIT_USER_IN PINIT_DEINIT_USER_OUT
;
1517 //**********************************************************************************************
1519 typedef struct _READ_SESSION_INFO_USER_IN
{
1522 } READ_SESSION_INFO_USER_IN
, *PREAD_SESSION_INFO_USER_IN
;
1524 typedef READ_TOC_SES READ_SESSION_INFO_USER_OUT
;
1525 typedef PREAD_TOC_SES PREAD_SESSION_INFO_USER_OUT
;
1527 //**********************************************************************************************
1529 typedef struct _READ_TOC_EX_USER_IN
{
1532 } READ_TOC_EX_USER_IN
, *PREAD_TOC_EX_USER_IN
;
1534 typedef READ_TOC_SES READ_TOC_EX_USER_OUT
;
1535 typedef PREAD_TOC_SES PREAD_TOC_EX_USER_OUT
;
1537 //**********************************************************************************************
1539 #define DefSession_LastAvailable 0xff
1541 typedef struct _SET_DEFAULT_SESSION_USER_IN
{
1543 } SET_DEFAULT_SESSION_USER_IN
, *PSET_DEFAULT_SESSION_USER_IN
;
1545 //**********************************************************************************************
1547 typedef struct _NOTIFY_MEDIA_CHANGE_USER_IN
{
1549 } NOTIFY_MEDIA_CHANGE_USER_IN
, *PNOTIFY_MEDIA_CHANGE_USER_IN
;
1551 //**********************************************************************************************
1553 typedef DISK_GEOMETRY GET_DRIVE_GEOMETRY_USER_OUT
;
1554 typedef PDISK_GEOMETRY PGET_DRIVE_GEOMETRY_USER_OUT
;
1556 //**********************************************************************************************
1558 typedef struct _GET_DEVICE_INFO_OLD_USER_OUT
{
1559 UCHAR WModes
[4][16];
1561 UCHAR SimulatedWModes
[4][16];
1564 INQUIRYDATA InquiryData
;
1565 ULONG Features2
[4]; // form GET_CONFIG 0 - 128
1566 } GET_DEVICE_INFO_OLD_USER_OUT
, *PGET_DEVICE_INFO_OLD_USER_OUT
;
1568 typedef struct _GET_DEVICE_INFO_USER_OUT
{
1571 UCHAR WModes
[4][16];
1573 UCHAR SimulatedWModes
[4][16];
1576 INQUIRYDATA InquiryData
;
1577 ULONG Features2
[4]; // from GET_CONFIG
1578 ULONG Features2ex
[64-4]; // from GET_CONFIG (reserved for higher values)
1579 ULONG WriteCaps
; // CDRW_DEV_CAPABILITY_xxx
1580 ULONG ReadCaps
; // CDRW_DEV_CAPABILITY_xxx
1581 } GET_DEVICE_INFO_USER_OUT
, *PGET_DEVICE_INFO_USER_OUT
;
1583 #define CDRW_DEV_CAPABILITY_TAG 0xCA10AB11
1585 #define WMODE_SUPPORTED 0x01
1586 #define WMODE_SUPPORTED_FP 0x02
1587 #define WMODE_SUPPORTED_VP 0x04
1588 #define WMODE_NOT_SUPPORTED 0xff
1589 #define WMODE_NOT_TESTED 0x00
1591 #define CDRW_FEATURE_OPC 0x00000001 // use OPC regardless of OPCn in DISK_INFO
1592 #define CDRW_FEATURE_EVENT 0x00000002
1593 #define CDRW_FEATURE_GET_CFG 0x00000004
1594 #define CDRW_FEATURE_NO_LOCK_REP 0x00000008 // device doesn't report tray lock state
1595 #define CDRW_FEATURE_SYNC_ON_WRITE 0x00000010 // device preferes Sync Cache after each Write
1596 #define CDRW_FEATURE_BAD_RW_SEEK 0x00000020 // seek error occures with status Illegal Sector Mode For This Track
1597 // on old CdRoms when they attempt to read outer sectors on FP formatted
1598 // disk. Workaround: perform sequence of seeks from lower address
1599 // to required with step about 0x800 blocks.
1600 #define CDRW_FEATURE_FP_ADDRESSING_PROBLEM 0x00000040
1601 #define CDRW_FEATURE_MRW_ADDRESSING_PROBLEM 0x00000080
1602 #define CDRW_FEATURE_FORCE_SYNC_ON_WRITE 0x00000100 // device requires Sync Cache after each Write
1603 #define CDRW_FEATURE_BAD_DVD_LAST_LBA 0x00000200 // device cannot determile LastLba on not closed DVD disks
1604 #define CDRW_FEATURE_FULL_BLANK_ON_FORMAT 0x00000400 // device cannot format disk until it is full-blanked
1605 #define CDRW_FEATURE_STREAMING 0x00000800 // device supports streaming read/write
1606 #define CDRW_FEATURE_FORCE_SYNC_BEFORE_READ 0x00001000 // device requires Sync Cache on Write -> Read state transition
1607 #define CDRW_FEATURE_CHANGER 0x80000000
1609 #define DEV_CAP_GET_PROFILE(arr, pf) \
1610 (((pf) > PFNUM_Max) ? 0 : (((arr)[(pf)/32] >> (pf)%32) & 1))
1612 #define CDRW_DEV_CAPABILITY_CDROM ((ULONG)1 << CdMediaClass_CDROM )
1613 #define CDRW_DEV_CAPABILITY_CDR ((ULONG)1 << CdMediaClass_CDR )
1614 #define CDRW_DEV_CAPABILITY_CDRW ((ULONG)1 << CdMediaClass_CDRW )
1615 #define CDRW_DEV_CAPABILITY_DVDROM ((ULONG)1 << CdMediaClass_DVDROM )
1616 #define CDRW_DEV_CAPABILITY_DVDRAM ((ULONG)1 << CdMediaClass_DVDRAM )
1617 #define CDRW_DEV_CAPABILITY_DVDR ((ULONG)1 << CdMediaClass_DVDR )
1618 #define CDRW_DEV_CAPABILITY_DVDRW ((ULONG)1 << CdMediaClass_DVDRW )
1619 #define CDRW_DEV_CAPABILITY_DVDpR ((ULONG)1 << CdMediaClass_DVDpR )
1620 #define CDRW_DEV_CAPABILITY_DVDpRW ((ULONG)1 << CdMediaClass_DVDpRW )
1621 #define CDRW_DEV_CAPABILITY_DDCDROM ((ULONG)1 << CdMediaClass_DDCDROM)
1622 #define CDRW_DEV_CAPABILITY_DDCDR ((ULONG)1 << CdMediaClass_DDCDR )
1623 #define CDRW_DEV_CAPABILITY_DDCDRW ((ULONG)1 << CdMediaClass_DDCDRW )
1625 //**********************************************************************************************
1627 typedef ULONG CHECK_VERIFY_USER_OUT
, *PCHECK_VERIFY_USER_OUT
;
1629 //**********************************************************************************************
1632 #ifndef EventStat_Class_OpChange
1633 #define EventStat_Class_OpChange 0x01
1634 #define EventStat_Class_PM 0x02
1635 #define EventStat_Class_Media 0x04
1636 #define EventStat_Class_DevBusy 0x06
1637 #endif // end EventStat_Class_OpChange
1640 typedef struct _GET_EVENT_USER_IN
{
1643 } GET_EVENT_USER_IN
, *PGET_EVENT_USER_IN
;
1645 typedef union _GET_EVENT_USER_OUT
{
1646 EVENT_STAT_OPERATIONAL_BLOCK Operational
;
1647 EVENT_STAT_PM_BLOCK PowerManagement
;
1648 EVENT_STAT_EXT_REQ_BLOCK ExternalReq
;
1649 EVENT_STAT_MEDIA_BLOCK MediaChange
;
1650 EVENT_STAT_DEV_BUSY_BLOCK DeviceBusy
;
1651 } GET_EVENT_USER_OUT
, *PGET_EVENT_USER_OUT
;
1653 //**********************************************************************************************
1656 //**********************************************************************************************
1658 typedef enum DVD_STRUCTURE_FORMAT
{
1659 DvdPhysicalDescriptor
,
1660 DvdCopyrightDescriptor
,
1661 DvdDiskKeyDescriptor
,
1663 DvdManufacturerDescriptor
,
1665 } DVD_STRUCTURE_FORMAT
, *PDVD_STRUCTURE_FORMAT
;
1667 typedef ULONG DVD_SESSION_ID
, *PDVD_SESSION_ID
;
1669 typedef struct _DVD_READ_STRUCTURE_USER_IN
{
1670 LARGE_INTEGER BlockByteOffset
;
1671 DVD_STRUCTURE_FORMAT Format
;
1672 DVD_SESSION_ID SessionId
;
1674 } DVD_READ_STRUCTURE_USER_IN
, *PDVD_READ_STRUCTURE_USER_IN
;
1676 typedef struct _DVD_READ_STRUCTURE_USER_OUT
{
1680 } DVD_READ_STRUCTURE_USER_OUT
, *PDVD_READ_STRUCTURE_USER_OUT
;
1682 //**********************************************************************************************
1684 typedef struct _DVD_START_SESSION_USER_OUT
{
1685 DVD_SESSION_ID SessionId
;
1686 } DVD_START_SESSION_USER_OUT
, *PDVD_START_SESSION_USER_OUT
;
1688 //**********************************************************************************************
1691 DvdChallengeKey
= 0x01,
1699 DvdInvalidateAGID
= 0x3f
1702 typedef struct _DVD_READ_KEY_USER_IN
{
1704 DVD_SESSION_ID SessionId
;
1705 DVD_KEY_TYPE KeyType
;
1709 LARGE_INTEGER TitleOffset
;
1711 // UCHAR KeyData[0];
1712 } DVD_READ_KEY_USER_IN
, *PDVD_READ_KEY_USER_IN
;
1714 typedef DVD_READ_KEY_USER_IN DVD_COPY_PROTECT_KEY
;
1715 typedef PDVD_READ_KEY_USER_IN PDVD_COPY_PROTECT_KEY
;
1717 typedef DVD_READ_KEY_USER_IN DVD_READ_KEY_USER_OUT
;
1718 typedef PDVD_READ_KEY_USER_IN PDVD_READ_KEY_USER_OUT
;
1720 //**********************************************************************************************
1722 typedef DVD_START_SESSION_USER_OUT DVD_END_SESSION_USER_IN
;
1723 typedef PDVD_START_SESSION_USER_OUT PDVD_END_SESSION_USER_IN
;
1725 //**********************************************************************************************
1727 typedef DVD_READ_KEY_USER_IN DVD_SEND_KEY_USER_IN
;
1728 typedef PDVD_READ_KEY_USER_IN PDVD_SEND_KEY_USER_IN
;
1730 typedef struct _DVD_SET_RPC_KEY
{
1731 UCHAR PreferredDriveRegionCode
;
1733 } DVD_SET_RPC_KEY
, * PDVD_SET_RPC_KEY
;
1735 //**********************************************************************************************
1737 // Predefined (Mt. Fuji) key sizes
1738 // Add sizeof(DVD_COPY_PROTECT_KEY) to get allocation size for
1739 // the full key structure
1741 #define DVD_CHALLENGE_KEY_LENGTH (12 + sizeof(DVD_COPY_PROTECT_KEY))
1742 #define DVD_BUS_KEY_LENGTH (8 + sizeof(DVD_COPY_PROTECT_KEY))
1743 #define DVD_TITLE_KEY_LENGTH (8 + sizeof(DVD_COPY_PROTECT_KEY))
1744 #define DVD_DISK_KEY_LENGTH (2048 + sizeof(DVD_COPY_PROTECT_KEY))
1745 #define DVD_RPC_KEY_LENGTH (sizeof(DVD_RPC_KEY) + sizeof(DVD_COPY_PROTECT_KEY))
1746 #define DVD_SET_RPC_KEY_LENGTH (sizeof(DVD_SET_RPC_KEY) + sizeof(DVD_COPY_PROTECT_KEY))
1747 #define DVD_ASF_LENGTH (sizeof(DVD_ASF) + sizeof(DVD_COPY_PROTECT_KEY))
1749 //**********************************************************************************************
1751 typedef struct _DISK_VERIFY_USER_IN
{
1752 LONGLONG StartingOffset
;
1754 } DISK_VERIFY_USER_IN
, *PDISK_VERIFY_USER_IN
;
1756 //**********************************************************************************************
1758 typedef struct _CDROM_DISK_DATA_USER_OUT
{
1762 } CDROM_DISK_DATA_USER_OUT
, *PCDROM_DISK_DATA_USER_OUT
;
1764 #define CDROM_DISK_AUDIO_TRACK (0x00000001)
1765 #define CDROM_DISK_DATA_TRACK (0x00000002)
1767 //**********************************************************************************************
1769 typedef struct _CDRW_RESET_DRIVER_USER_IN
{
1771 BOOLEAN Reserved
[3];
1773 } CDRW_RESET_DRIVER_USER_IN
, *PCDRW_RESET_DRIVER_USER_IN
;
1775 //**********************************************************************************************
1777 typedef struct _MediaTrackMap
{
1788 #define TrackMap_AllowCopyBit_variated 0x01
1789 #define TrackMap_CopyBit_variated 0x02
1790 #define TrackMap_Try_variation 0x04
1791 #define TrackMap_Use_variation 0x08
1792 #define TrackMap_FixFPAddressing 0x10
1793 #define TrackMap_FixMRWAddressing 0x20
1795 // are used only if FixFPAddressing is enabled
1796 ULONG TrackFPOffset
;
1797 ULONG PacketFPOffset
;
1799 } MediaTrackMap
, *PMediaTrackMap
;
1801 typedef struct _GET_DISK_LAYOUT_USER_OUT
{
1804 ULONG DiskLayoutFlags
;
1805 // Number of last session
1807 ULONG FirstTrackNum
;
1809 // First & Last LBA of the last session
1812 // Last writable LBA
1813 ULONG LastPossibleLBA
;
1814 // First writable LBA
1817 struct _MediaTrackMap
* TrackMap
;
1820 ULONG WriteBlockSize
;
1826 ULONG PhSerialNumber
;
1830 } GET_DISK_LAYOUT_USER_OUT
, *PGET_DISK_LAYOUT_USER_OUT
;
1832 #define DiskLayout_FLAGS_TRACKMAP (0x00002000)
1833 #define DiskLayout_FLAGS_RAW_DISK (0x00040000)
1835 //**********************************************************************************************
1837 // Error codes returned by IOCTL_CDRW_GEL_LAST_ERROR
1839 //#ifndef CDRW_ERR_NO_ERROR
1841 #define CDRW_ERR_NO_ERROR 0x0000
1842 #define CDRW_ERR_WRITE_IN_PROGRESS_BUSY 0x0001
1843 #define CDRW_ERR_FORMAT_IN_PROGRESS_BUSY 0x0002
1844 #define CDRW_ERR_CLOSE_IN_PROGRESS_BUSY 0x0003
1845 #define CDRW_ERR_BAD_ADDR_ALIGNMENT 0x0004
1846 #define CDRW_ERR_BAD_SIZE_ALIGNMENT 0x0005
1847 #define CDRW_ERR_STREAM_LOSS 0x0006
1848 #define CDRW_ERR_TEST_WRITE_UNSUPPORTED 0x0007
1849 #define CDRW_ERR_UNHANDLED_WRITE_TYPE 0x0008
1850 #define CDRW_ERR_CANT_ALLOC_TMP_BUFFER 0x0009
1851 #define CDRW_ERR_BUFFER_IS_FULL 0x000a
1852 #define CDRW_ERR_VERIFY_REQUIRED 0x000b
1853 #define CDRW_ERR_PLAY_IN_PROGRESS_BUSY 0x000c
1854 #define CDRW_ERR_TOO_LONG_BLOCK_TO_TRANSFER 0x000d
1855 #define CDRW_ERR_INWALID_WRITE_PARAMETERS 0x000e // use SET_WRITE_PARAMS properly
1856 #define CDRW_ERR_INVALID_IO_BUFFER_ADDRESS 0x000f
1857 #define CDRW_ERR_INVALID_INPUT_BUFFER_SIZE 0x0010
1858 #define CDRW_ERR_INVALID_OUTPUT_BUFFER_SIZE 0x0011
1859 #define CDRW_ERR_UNRECOGNIZED_MEDIA 0x0012
1860 #define CDRW_ERR_MEDIA_WRITE_PROTECTED 0x0013
1861 #define CDRW_ERR_NO_MEDIA 0x0014
1862 #define CDRW_ERR_TRAY_OPEN 0x0015
1863 #define CDRW_ERR_MEDIA_NOT_APPENDABLE 0x0016
1864 #define CDRW_ERR_INVALID_LBA 0x0017
1865 #define CDRW_ERR_INVALID_FIXED_PACKET_SIZE 0x0018
1866 #define CDRW_ERR_INVALID_WRITE_TYPE_FOR_MEDIA 0x0019
1867 #define CDRW_ERR_CUE_SHEET_REQUIRED 0x001a // you sould send cue sheet before SAO
1868 #define CDRW_ERR_CANT_DEINIT_IN_CLASS_MODE 0x001b // there is no underlayered driver
1869 #define CDRW_ERR_INVALID_FORMAT_UNIT_SETTINGS 0x001c // use SET_WRITE_PARAMS properly before
1870 // calling FormatUnit
1871 #define CDRW_ERR_UNHANDLED_FORMAT_UNIT_MODE 0x001d // this mode is not supported by
1872 // Workaround module
1873 #define CDRW_ERR_CANT_READ_BUFFER_CAPACITY 0x001e
1874 #define CDRW_ERR_DEVICE_WRITE_ERROR 0x001f
1875 #define CDRW_ERR_UNHANDLED_IOCTL 0x0020
1876 #define CDRW_ERR_UNHANDLED_FORMAT_WORKAROUND_MODE 0x0021 // check your Registry settings
1877 #define CDRW_ERR_DOOR_LOCKED_BUSY 0x0022
1878 #define CDRW_ERR_MAGIC_WORD_REQUIRED 0x0023
1879 #define CDRW_ERR_INVALID_SECTOR_MODE 0x0024
1880 #define CDRW_ERR_DVD_LICENSE_VIOLATION 0x0025
1881 #define CDRW_ERR_INVALID_DVD_KEY_TYPE 0x0026
1882 #define CDRW_ERR_INVALID_DVD_REGION_CODE 0x0027
1883 #define CDRW_ERR_PAGE_IS_NOT_SUPPORTED 0x0028
1884 #define CDRW_ERR_STD_FORMAT_REQUIRED 0x0029
1885 //#define CDRW_ERR_ 0x00
1886 //#define CDRW_ERR_ 0x00
1887 //#define CDRW_ERR_ 0x00
1888 //#define CDRW_ERR_ 0x00
1893 #define REG_TIMEOUT_NAME_USER ("TimeOutValue")
1894 #define REG_AUTORUN_NAME_USER ("Autorun")
1895 #define REG_LOADMODE_NAME_USER ("LoadMode")
1897 #define LOADMODE_CDRW_ONLY 0
1898 #define LOADMODE_ALWAYS 1
1899 #define LOADMODE_NEVER 2
1901 #define REG_PACKETSIZE_NAME_USER ("PacketSize") // Initial packet size (FP)
1903 #define PACKETSIZE_STREAM 0
1904 #define PACKETSIZE_UDF 32
1906 #ifndef WITHOUT_FORMATTER
1907 #define REG_FORMATUNIT_NAME_USER ("FormatUnitMode") // FORMAT_UNIT workaround mode
1909 #define FORMATUNIT_FP 0 // simulation via FP
1910 #define FORMATUNIT_STD 1
1911 #endif //WITHOUT_FORMATTER
1913 #define REG_R_SPLIT_SIZE_NAME_USER ("ReadSplitSize") // Read request spliting limit
1914 #define REG_W_SPLIT_SIZE_NAME_USER ("WriteSplitSize") // Write request spliting limit
1916 #define REG_CDR_SIMULATION_NAME_USER ("CdRSimulationMode") // Influence on READ_DISC_INFO
1917 // capability check on startup
1918 #define CDR_SIMULATION_CDROM 0
1919 #define CDR_SIMULATION_ALWAYS 1
1920 #define CDR_SIMULATION_NEVER 2
1922 #define REG_SPEEDMODE_NAME_USER ("SpeedDetectionMode")
1924 #define SPEEDMODE_ASSUME_OK 0
1925 #define SPEEDMODE_REREAD 1
1927 //#define REG_MAX_WRITE_SPEED_R_NAME_USER ("MaxWriteSpeedCDR")
1928 //#define REG_MAX_WRITE_SPEED_RW_NAME_USER ("MaxWriteSpeedCDRW")
1930 //#define REG_SIMULATION_TABLE_NAME_USER ("WModeSimulationTable") // via Raw
1932 #define REG_WMODE_SIMULATION_NAME_USER ("WModeSimulation") // via Raw
1933 #define WMODE_SIMULATION_ON 1
1934 #define WMODE_SIMULATION_OFF 0
1935 #define WMODE_ASSUME_OK 2
1937 #define REG_SYNC_PACKETS_NAME_USER ("SyncPacketsMode")
1938 #define SYNC_PACKETS_ALWAYS 0
1939 #define SYNC_PACKETS_RESET_DRV 1
1940 #define SYNC_PACKETS_NEVER 2
1941 #define SYNC_PACKETS_FP 3
1942 #define SYNC_PACKETS_DISABLED 4
1943 #define SYNC_PACKETS_VP_ONLY 5
1944 #define SYNC_PACKETS_BY_W_THROUGH 6
1946 #define REG_ASSURE_READY_NAME_USER ("AssureReadiness")
1947 #define ASSURE_READY_TEST_UNIT 0
1948 #define ASSURE_READY_DELAY_100 1
1949 #define ASSURE_READY_NONE 2
1951 #define REG_WAIT_PACKETS_NAME_USER ("WaitPackets")
1952 #define WAIT_PACKETS_ALWAYS 0
1953 #define WAIT_PACKETS_STREAM 1
1955 #define REG_BAD_RW_SEEK_NAME_USER ("BadRWSeek")
1957 #define REG_ALLOW_PACKET_ON_CDR_NAME_USER ("AllowPacketOnCdR")
1958 #define ALLOW_PACKET_ON_CDR_OFF 0
1959 #define ALLOW_PACKET_ON_CDR_ON 1
1961 #define REG_MAX_READY_RETRY_NAME_USER ("MaxReadyRetry")
1963 #define REG_BAD_DVD_READ_TRACK_INFO_NAME_USER ("DvdBadReadTrackInfo")
1964 #define REG_BAD_DVD_READ_DISC_INFO_NAME_USER ("DvdBadReadDiscInfo")
1965 #define REG_BAD_DVD_READ_CAPACITY_NAME_USER ("DvdBadReadCapacity")
1966 #define REG_BAD_DVD_LAST_LBA_NAME_USER ("DvdBadLastLba")
1967 #define REG_BAD_DVD_LAST_LBA_NAME_USER ("DvdBadLastLba")
1969 #define REG_FULL_BLANK_ON_FORMAT_NAME_USER ("FullEraseBeforeFormat")
1971 #define DEFAULT_LAST_LBA_FP_CD 276159
1972 #define DEFAULT_LAST_LBA_DVD 0x23053f
1973 #define DEFAULT_LAST_LBA_BD (25*1000*1000/2-1)
1978 #endif //__CDRW_PUBLIC_H__