1 ////////////////////////////////////////////////////////////////////
2 // Copyright (C) Alexander Telyatnikov, Ivan Keliukh, Yegor Anchishkin, SKIF Software, 1999-2013. Kiev, Ukraine
4 ////////////////////////////////////////////////////////////////////
13 This file defines the interface between CD-Writer's driver & user
18 NT kernel mode or Win32 app
21 #ifndef __CDRW_PUBLIC_H__
22 #define __CDRW_PUBLIC_H__
24 #define CDRW_SIGNATURE_v1 "ALWA CD-R/W v1"
26 //#define CDRW_RESTRICT_ACCESS // require W-acces rights for some IOCTLs
29 //#include "ntdddisk.h"
37 #if defined(CDRW_EXPORTS) || defined(FileSys_EXPORTS)
41 #ifndef FILE_DEVICE_SECURE_OPEN
42 #define FILE_DEVICE_SECURE_OPEN 0x00000100
43 #endif //FILE_DEVICE_SECURE_OPEN
48 #define IRP_MJ_PNP IRP_MJ_PNP_POWER // Obsolete....
51 #ifndef FILE_DEVICE_CDRW
52 #define FILE_DEVICE_CDRW 0x00000999
55 #ifndef FILE_DEVICE_CD_ROM
56 #define FILE_DEVICE_CD_ROM 0x00000002
57 #endif //FILE_DEVICE_CD_ROM
59 #ifndef IOCTL_CDROM_BASE
60 #define IOCTL_CDROM_BASE FILE_DEVICE_CD_ROM
61 #endif //IOCTL_CDROM_BASE
63 #ifndef FILE_DEVICE_DVD
64 #define FILE_DEVICE_DVD 0x00000033
65 #endif //FILE_DEVICE_DVD
67 #ifndef IOCTL_DVD_BASE
68 #define IOCTL_DVD_BASE FILE_DEVICE_DVD
69 #endif //IOCTL_DVD_BASE
71 #ifndef FILE_DEVICE_DISK
72 #define FILE_DEVICE_DISK 0x00000007
73 #endif //FILE_DEVICE_DISK
75 #ifndef IOCTL_DISK_BASE
76 #define IOCTL_DISK_BASE FILE_DEVICE_DISK
77 #endif //IOCTL_DISK_BASE
79 #ifndef IOCTL_CDROM_UNLOAD_DRIVER
80 #define IOCTL_CDROM_UNLOAD_DRIVER CTL_CODE(IOCTL_CDROM_BASE, 0x0402, METHOD_BUFFERED, FILE_READ_ACCESS)
82 #define IOCTL_CDROM_READ_TOC CTL_CODE(IOCTL_CDROM_BASE, 0x0000, METHOD_BUFFERED, FILE_READ_ACCESS)
83 #define IOCTL_CDROM_GET_CONTROL CTL_CODE(IOCTL_CDROM_BASE, 0x000D, METHOD_BUFFERED, FILE_READ_ACCESS)
84 #define IOCTL_CDROM_PLAY_AUDIO_MSF CTL_CODE(IOCTL_CDROM_BASE, 0x0006, METHOD_BUFFERED, FILE_READ_ACCESS)
85 #define IOCTL_CDROM_SEEK_AUDIO_MSF CTL_CODE(IOCTL_CDROM_BASE, 0x0001, METHOD_BUFFERED, FILE_READ_ACCESS)
86 #define IOCTL_CDROM_STOP_AUDIO CTL_CODE(IOCTL_CDROM_BASE, 0x0002, METHOD_BUFFERED, FILE_READ_ACCESS)
87 #define IOCTL_CDROM_PAUSE_AUDIO CTL_CODE(IOCTL_CDROM_BASE, 0x0003, METHOD_BUFFERED, FILE_READ_ACCESS)
88 #define IOCTL_CDROM_RESUME_AUDIO CTL_CODE(IOCTL_CDROM_BASE, 0x0004, METHOD_BUFFERED, FILE_READ_ACCESS)
89 #define IOCTL_CDROM_GET_VOLUME CTL_CODE(IOCTL_CDROM_BASE, 0x0005, METHOD_BUFFERED, FILE_READ_ACCESS)
90 #define IOCTL_CDROM_SET_VOLUME CTL_CODE(IOCTL_CDROM_BASE, 0x000A, METHOD_BUFFERED, FILE_READ_ACCESS)
91 #define IOCTL_CDROM_READ_Q_CHANNEL CTL_CODE(IOCTL_CDROM_BASE, 0x000B, METHOD_BUFFERED, FILE_READ_ACCESS)
92 #define IOCTL_CDROM_GET_LAST_SESSION CTL_CODE(IOCTL_CDROM_BASE, 0x000E, METHOD_BUFFERED, FILE_READ_ACCESS)
93 #define IOCTL_CDROM_RAW_READ CTL_CODE(IOCTL_CDROM_BASE, 0x000F, METHOD_OUT_DIRECT, FILE_READ_ACCESS)
94 #define IOCTL_CDROM_DISK_TYPE CTL_CODE(IOCTL_CDROM_BASE, 0x0010, METHOD_BUFFERED, FILE_ANY_ACCESS)
96 #define IOCTL_CDROM_CHECK_VERIFY CTL_CODE(IOCTL_CDROM_BASE, 0x0200, METHOD_BUFFERED, FILE_READ_ACCESS)
97 #define IOCTL_CDROM_MEDIA_REMOVAL CTL_CODE(IOCTL_CDROM_BASE, 0x0201, METHOD_BUFFERED, FILE_READ_ACCESS)
98 #define IOCTL_CDROM_EJECT_MEDIA CTL_CODE(IOCTL_CDROM_BASE, 0x0202, METHOD_BUFFERED, FILE_READ_ACCESS)
99 #define IOCTL_CDROM_LOAD_MEDIA CTL_CODE(IOCTL_CDROM_BASE, 0x0203, METHOD_BUFFERED, FILE_READ_ACCESS)
100 #define IOCTL_CDROM_RESERVE CTL_CODE(IOCTL_CDROM_BASE, 0x0204, METHOD_BUFFERED, FILE_READ_ACCESS)
101 #define IOCTL_CDROM_RELEASE CTL_CODE(IOCTL_CDROM_BASE, 0x0205, METHOD_BUFFERED, FILE_READ_ACCESS)
102 #define IOCTL_CDROM_FIND_NEW_DEVICES CTL_CODE(IOCTL_CDROM_BASE, 0x0206, METHOD_BUFFERED, FILE_READ_ACCESS)
104 #define IOCTL_CDROM_GET_DRIVE_GEOMETRY CTL_CODE(IOCTL_CDROM_BASE, 0x0013, METHOD_BUFFERED, FILE_READ_ACCESS)
105 #define IOCTL_CDROM_GET_DRIVE_GEOMETRY_EX CTL_CODE(IOCTL_CDROM_BASE, 0x0014, METHOD_BUFFERED, FILE_READ_ACCESS)
107 #define IOCTL_CDROM_READ_TOC_EX CTL_CODE(IOCTL_CDROM_BASE, 0x0015, METHOD_BUFFERED, FILE_READ_ACCESS)
108 #define IOCTL_CDROM_GET_CONFIGURATION CTL_CODE(IOCTL_CDROM_BASE, 0x0016, METHOD_BUFFERED, FILE_READ_ACCESS)
110 #endif //IOCTL_CDROM_UNLOAD_DRIVER
112 #ifdef CDRW_RESTRICT_ACCESS
114 #define CDRW_CTL_CODE_R(a,b) CTL_CODE(FILE_DEVICE_CDRW, a,b, FILE_READ_DATA)
115 #define CDRW_CTL_CODE_W(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_WRITE_DATA )
117 #define CDRW_CTL_CODE_A(a,b) CTL_CODE(FILE_DEVICE_CDRW, a,b, FILE_READ_DATA | FILE_WRITE_DATA )
119 #else //CDRW_RESTRICT_ACCESS
121 #define CDRW_CTL_CODE_R(a,b) CTL_CODE(FILE_DEVICE_CDRW, a,b, FILE_READ_DATA)
122 #define CDRW_CTL_CODE_W(a,b) CTL_CODE(FILE_DEVICE_CDRW, a,b, FILE_READ_DATA)
123 #define CDRW_CTL_CODE_A(a,b) CTL_CODE(FILE_DEVICE_CDRW, a,b, FILE_READ_DATA)
124 #define CDRW_CTL_CODE_X(a,b) CTL_CODE(FILE_DEVICE_CDRW, a,b, FILE_ANY_ACCESS )
126 #endif //CDRW_RESTRICT_ACCESS
128 #define IOCTL_CDRW_LOCK_DOOR CDRW_CTL_CODE_R(0x801, METHOD_BUFFERED)
129 #define IOCTL_CDRW_SET_SPEED CDRW_CTL_CODE_R(0x802, METHOD_BUFFERED)
130 #define IOCTL_CDRW_SYNC_CACHE CDRW_CTL_CODE_W(0x803, METHOD_BUFFERED)
131 #define IOCTL_CDRW_GET_CAPABILITIES CDRW_CTL_CODE_X(0x804, METHOD_BUFFERED)
132 #define IOCTL_CDRW_GET_SPEED IOCTL_CDRW_GET_CAPABILITIES
133 #define IOCTL_CDRW_GET_MEDIA_TYPE CDRW_CTL_CODE_X(0x805, METHOD_BUFFERED)
134 #define IOCTL_CDRW_GET_WRITE_MODE CDRW_CTL_CODE_R(0x806, METHOD_BUFFERED)
135 #define IOCTL_CDRW_SET_WRITE_MODE CDRW_CTL_CODE_W(0x807, METHOD_BUFFERED)
136 #define IOCTL_CDRW_RESERVE_TRACK CDRW_CTL_CODE_W(0x808, METHOD_BUFFERED)
137 #define IOCTL_CDRW_BLANK CDRW_CTL_CODE_R(0x809, METHOD_BUFFERED)
138 #define IOCTL_CDRW_CLOSE_TRK_SES CDRW_CTL_CODE_W(0x80a, METHOD_BUFFERED)
139 //#define IOCTL_CDRW_LL_WRITE CDRW_CTL_CODE_R(0x80b, METHOD_OUT_DIRECT)
140 #define IOCTL_CDRW_LL_WRITE CDRW_CTL_CODE_R(0x80b, METHOD_BUFFERED)
141 #define IOCTL_CDRW_READ_TRACK_INFO CDRW_CTL_CODE_R(0x80c, METHOD_IN_DIRECT)
142 #define IOCTL_CDRW_READ_DISC_INFO CDRW_CTL_CODE_R(0x80d, METHOD_IN_DIRECT)
143 #define IOCTL_CDRW_BUFFER_CAPACITY CDRW_CTL_CODE_A(0x80e, METHOD_IN_DIRECT)
144 #define IOCTL_CDRW_GET_SIGNATURE CDRW_CTL_CODE_X(0x80f, METHOD_BUFFERED)
145 #define IOCTL_CDRW_RESET_DRIVER CDRW_CTL_CODE_A(0x810, METHOD_BUFFERED)
146 //#ifndef WITHOUT_FORMATTER
147 #define IOCTL_CDRW_FORMAT_UNIT CDRW_CTL_CODE_W(0x811, METHOD_BUFFERED)
148 #define IOCTL_CDRW_SET_RANDOM_ACCESS CDRW_CTL_CODE_W(0x812, METHOD_BUFFERED)
149 //#endif //WITHOUT_FORMATTER
150 #define IOCTL_CDRW_TEST_UNIT_READY CDRW_CTL_CODE_X(0x813, METHOD_BUFFERED)
151 #define IOCTL_CDRW_RESET_WRITE_STATUS CDRW_CTL_CODE_X(0x814, METHOD_BUFFERED)
152 #define IOCTL_CDRW_GET_LAST_ERROR CDRW_CTL_CODE_R(0x815, METHOD_BUFFERED)
153 #define IOCTL_CDRW_MODE_SENSE CDRW_CTL_CODE_X(0x816, METHOD_BUFFERED)
154 #define IOCTL_CDRW_MODE_SELECT CDRW_CTL_CODE_R(0x817, METHOD_BUFFERED)
155 #define IOCTL_CDRW_SET_READ_AHEAD CDRW_CTL_CODE_R(0x818, METHOD_BUFFERED)
156 #define IOCTL_CDRW_SET_DEFAULT_SESSION CDRW_CTL_CODE_R(0x819, METHOD_BUFFERED) // RESERVED !!!
157 #define IOCTL_CDRW_NOTIFY_MEDIA_CHANGE CDRW_CTL_CODE_X(0x81a, METHOD_BUFFERED)
158 #define IOCTL_CDRW_SEND_OPC_INFO CDRW_CTL_CODE_W(0x81b, METHOD_BUFFERED)
159 #define IOCTL_CDRW_LL_READ CDRW_CTL_CODE_R(0x81c, METHOD_BUFFERED)
160 #define IOCTL_CDRW_SEND_CUE_SHEET CDRW_CTL_CODE_W(0x81d, METHOD_OUT_DIRECT)
161 #define IOCTL_CDRW_INIT_DEINIT CDRW_CTL_CODE_A(0x81e, METHOD_BUFFERED)
162 #define IOCTL_CDRW_READ_FULL_TOC CDRW_CTL_CODE_R(0x81f, METHOD_BUFFERED)
163 #define IOCTL_CDRW_READ_PMA CDRW_CTL_CODE_R(0x820, METHOD_BUFFERED)
164 #define IOCTL_CDRW_READ_SESSION_INFO CDRW_CTL_CODE_R(0x821, METHOD_BUFFERED)
165 #define IOCTL_CDRW_READ_ATIP CDRW_CTL_CODE_R(0x822, METHOD_BUFFERED)
166 #define IOCTL_CDRW_READ_CD_TEXT CDRW_CTL_CODE_R(0x823, METHOD_BUFFERED)
167 #define IOCTL_CDRW_READ_TOC_EX CDRW_CTL_CODE_R(0x824, METHOD_BUFFERED)
168 #define IOCTL_CDRW_GET_DEVICE_INFO CDRW_CTL_CODE_R(0x825, METHOD_BUFFERED)
169 #define IOCTL_CDRW_GET_EVENT CDRW_CTL_CODE_R(0x826, METHOD_IN_DIRECT)
170 #define IOCTL_CDRW_GET_DEVICE_NAME CDRW_CTL_CODE_R(0x827, METHOD_BUFFERED)
171 #define IOCTL_CDRW_RESET_DRIVER_EX CDRW_CTL_CODE_A(0x828, METHOD_BUFFERED)
172 #define IOCTL_CDRW_GET_MEDIA_TYPE_EX CDRW_CTL_CODE_X(0x829, METHOD_BUFFERED)
173 #ifndef WITHOUT_FORMATTER
174 #define IOCTL_CDRW_GET_MRW_MODE CDRW_CTL_CODE_X(0x82a, METHOD_BUFFERED)
175 #define IOCTL_CDRW_SET_MRW_MODE CDRW_CTL_CODE_X(0x82b, METHOD_BUFFERED)
176 #endif //WITHOUT_FORMATTER
177 #define IOCTL_CDRW_READ_CAPACITY CDRW_CTL_CODE_R(0x82c, METHOD_IN_DIRECT)
178 #define IOCTL_CDRW_GET_DISC_LAYOUT CDRW_CTL_CODE_R(0x82d, METHOD_IN_DIRECT)
179 #define IOCTL_CDRW_SET_STREAMING CDRW_CTL_CODE_W(0x82e, METHOD_BUFFERED)
181 #define IOCTL_CDRW_UNLOAD_DRIVER IOCTL_CDROM_UNLOAD_DRIVER
183 #define IOCTL_CDRW_READ_TOC IOCTL_CDROM_READ_TOC
184 #define IOCTL_CDRW_GET_CONTROL IOCTL_CDROM_GET_CONTROL
185 #define IOCTL_CDRW_PLAY_AUDIO_MSF IOCTL_CDROM_PLAY_AUDIO_MSF
186 #define IOCTL_CDRW_SEEK_AUDIO_MSF IOCTL_CDROM_SEEK_AUDIO_MSF
187 #define IOCTL_CDRW_STOP_AUDIO IOCTL_CDROM_STOP_AUDIO
188 #define IOCTL_CDRW_PAUSE_AUDIO IOCTL_CDROM_PAUSE_AUDIO
189 #define IOCTL_CDRW_RESUME_AUDIO IOCTL_CDROM_RESUME_AUDIO
190 #define IOCTL_CDRW_GET_VOLUME IOCTL_CDROM_GET_VOLUME
191 #define IOCTL_CDRW_SET_VOLUME IOCTL_CDROM_SET_VOLUME
192 #define IOCTL_CDRW_READ_Q_CHANNEL IOCTL_CDROM_READ_Q_CHANNEL
193 #define IOCTL_CDRW_GET_LAST_SESSION IOCTL_CDROM_GET_LAST_SESSION
194 #define IOCTL_CDRW_RAW_READ IOCTL_CDROM_RAW_READ
195 #define IOCTL_CDRW_DISK_TYPE IOCTL_CDROM_DISK_TYPE
197 #define IOCTL_CDRW_CHECK_VERIFY IOCTL_CDROM_CHECK_VERIFY
198 #define IOCTL_CDRW_MEDIA_REMOVAL IOCTL_CDROM_MEDIA_REMOVAL
199 #define IOCTL_CDRW_EJECT_MEDIA IOCTL_CDROM_EJECT_MEDIA
200 #define IOCTL_CDRW_LOAD_MEDIA IOCTL_CDROM_LOAD_MEDIA
201 #define IOCTL_CDRW_RESERVE IOCTL_CDROM_RESERVE
202 #define IOCTL_CDRW_RELEASE IOCTL_CDROM_RELEASE
203 #define IOCTL_CDRW_FIND_NEW_DEVICES IOCTL_CDROM_FIND_NEW_DEVICES
205 #ifndef IOCTL_DVD_READ_STRUCTURE
206 #define IOCTL_DVD_READ_STRUCTURE CTL_CODE(IOCTL_DVD_BASE, 0x0450, METHOD_BUFFERED, FILE_READ_ACCESS)
208 #define IOCTL_DVD_START_SESSION CTL_CODE(IOCTL_DVD_BASE, 0x0400, METHOD_BUFFERED, FILE_READ_ACCESS)
209 #define IOCTL_DVD_READ_KEY CTL_CODE(IOCTL_DVD_BASE, 0x0401, METHOD_BUFFERED, FILE_READ_ACCESS)
210 #define IOCTL_DVD_SEND_KEY CTL_CODE(IOCTL_DVD_BASE, 0x0402, METHOD_BUFFERED, FILE_READ_ACCESS)
211 #define IOCTL_DVD_END_SESSION CTL_CODE(IOCTL_DVD_BASE, 0x0403, METHOD_BUFFERED, FILE_READ_ACCESS)
212 #define IOCTL_DVD_SET_READ_AHEAD CTL_CODE(IOCTL_DVD_BASE, 0x0404, METHOD_BUFFERED, FILE_READ_ACCESS)
213 #define IOCTL_DVD_GET_REGION CTL_CODE(IOCTL_DVD_BASE, 0x0405, METHOD_BUFFERED, FILE_READ_ACCESS)
214 #define IOCTL_DVD_SEND_KEY2 CTL_CODE(IOCTL_DVD_BASE, 0x0406, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
215 #endif //IOCTL_DVD_READ_STRUCTURE
217 #ifndef IOCTL_DISK_GET_DRIVE_GEOMETRY
218 #define IOCTL_DISK_GET_DRIVE_GEOMETRY CTL_CODE(IOCTL_DISK_BASE, 0x0000, METHOD_BUFFERED, FILE_ANY_ACCESS)
219 #define IOCTL_DISK_VERIFY CTL_CODE(IOCTL_DISK_BASE, 0x0005, METHOD_BUFFERED, FILE_ANY_ACCESS)
220 #define IOCTL_DISK_FORMAT_TRACKS CTL_CODE(IOCTL_DISK_BASE, 0x0006, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
221 #define IOCTL_DISK_IS_WRITABLE CTL_CODE(IOCTL_DISK_BASE, 0x0009, METHOD_BUFFERED, FILE_ANY_ACCESS)
222 #define IOCTL_DISK_FORMAT_TRACKS_EX CTL_CODE(IOCTL_DISK_BASE, 0x000b, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
224 #define IOCTL_DISK_CHECK_VERIFY CTL_CODE(IOCTL_DISK_BASE, 0x0200, METHOD_BUFFERED, FILE_READ_ACCESS)
225 #define IOCTL_DISK_MEDIA_REMOVAL CTL_CODE(IOCTL_DISK_BASE, 0x0201, METHOD_BUFFERED, FILE_READ_ACCESS)
226 #define IOCTL_DISK_EJECT_MEDIA CTL_CODE(IOCTL_DISK_BASE, 0x0202, METHOD_BUFFERED, FILE_READ_ACCESS)
227 #define IOCTL_DISK_LOAD_MEDIA CTL_CODE(IOCTL_DISK_BASE, 0x0203, METHOD_BUFFERED, FILE_READ_ACCESS)
228 #define IOCTL_DISK_RESERVE CTL_CODE(IOCTL_DISK_BASE, 0x0204, METHOD_BUFFERED, FILE_READ_ACCESS)
229 #define IOCTL_DISK_RELEASE CTL_CODE(IOCTL_DISK_BASE, 0x0205, METHOD_BUFFERED, FILE_READ_ACCESS)
230 #define IOCTL_DISK_FIND_NEW_DEVICES CTL_CODE(IOCTL_DISK_BASE, 0x0206, METHOD_BUFFERED, FILE_READ_ACCESS)
231 #define IOCTL_DISK_GET_MEDIA_TYPES CTL_CODE(IOCTL_DISK_BASE, 0x0300, METHOD_BUFFERED, FILE_ANY_ACCESS)
232 #endif //IOCTL_DISK_GET_DRIVE_GEOMETRY
234 #ifndef IOCTL_STORAGE_SET_READ_AHEAD
235 #define IOCTL_STORAGE_SET_READ_AHEAD CTL_CODE(IOCTL_STORAGE_BASE, 0x0100, METHOD_BUFFERED, FILE_READ_ACCESS)
236 #endif //IOCTL_STORAGE_SET_READ_AHEAD
238 #ifndef IOCTL_STORAGE_GET_MEDIA_TYPES_EX
239 #define IOCTL_STORAGE_GET_MEDIA_TYPES_EX CTL_CODE(IOCTL_STORAGE_BASE, 0x0301, METHOD_BUFFERED, FILE_ANY_ACCESS)
241 typedef enum _STORAGE_MEDIA_TYPE
{
243 // Following are defined in ntdddisk.h in the MEDIA_TYPE enum
245 // Unknown, // Format is unknown
246 // F5_1Pt2_512, // 5.25", 1.2MB, 512 bytes/sector
247 // F3_1Pt44_512, // 3.5", 1.44MB, 512 bytes/sector
248 // F3_2Pt88_512, // 3.5", 2.88MB, 512 bytes/sector
249 // F3_20Pt8_512, // 3.5", 20.8MB, 512 bytes/sector
250 // F3_720_512, // 3.5", 720KB, 512 bytes/sector
251 // F5_360_512, // 5.25", 360KB, 512 bytes/sector
252 // F5_320_512, // 5.25", 320KB, 512 bytes/sector
253 // F5_320_1024, // 5.25", 320KB, 1024 bytes/sector
254 // F5_180_512, // 5.25", 180KB, 512 bytes/sector
255 // F5_160_512, // 5.25", 160KB, 512 bytes/sector
256 // RemovableMedia, // Removable media other than floppy
257 // FixedMedia, // Fixed hard disk media
258 // F3_120M_512, // 3.5", 120M Floppy
259 // F3_640_512, // 3.5" , 640KB, 512 bytes/sector
260 // F5_640_512, // 5.25", 640KB, 512 bytes/sector
261 // F5_720_512, // 5.25", 720KB, 512 bytes/sector
262 // F3_1Pt2_512, // 3.5" , 1.2Mb, 512 bytes/sector
263 // F3_1Pt23_1024, // 3.5" , 1.23Mb, 1024 bytes/sector
264 // F5_1Pt23_1024, // 5.25", 1.23MB, 1024 bytes/sector
265 // F3_128Mb_512, // 3.5" MO 128Mb 512 bytes/sector
266 // F3_230Mb_512, // 3.5" MO 230Mb 512 bytes/sector
267 // F8_256_128, // 8", 256KB, 128 bytes/sector
270 DDS_4mm
= 0x20, // Tape - DAT DDS1,2,... (all vendors)
271 MiniQic
, // Tape - miniQIC Tape
272 Travan
, // Tape - Travan TR-1,2,3,...
274 MP_8mm
, // Tape - 8mm Exabyte Metal Particle
275 AME_8mm
, // Tape - 8mm Exabyte Advanced Metal Evap
276 AIT1_8mm
, // Tape - 8mm Sony AIT1
277 DLT
, // Tape - DLT Compact IIIxt, IV
278 NCTP
, // Tape - Philips NCTP
279 IBM_3480
, // Tape - IBM 3480
280 IBM_3490E
, // Tape - IBM 3490E
281 IBM_Magstar_3590
, // Tape - IBM Magstar 3590
282 IBM_Magstar_MP
, // Tape - IBM Magstar MP
283 STK_DATA_D3
, // Tape - STK Data D3
284 SONY_DTF
, // Tape - Sony DTF
285 DV_6mm
, // Tape - 6mm Digital Video
286 DMI
, // Tape - Exabyte DMI and compatibles
287 SONY_D2
, // Tape - Sony D2S and D2L
288 CLEANER_CARTRIDGE
, // Cleaner - All Drive types that support Drive Cleaners
289 CD_ROM
, // Opt_Disk - CD
290 CD_R
, // Opt_Disk - CD-Recordable (Write Once)
291 CD_RW
, // Opt_Disk - CD-Rewriteable
292 DVD_ROM
, // Opt_Disk - DVD-ROM
293 DVD_R
, // Opt_Disk - DVD-Recordable (Write Once)
294 DVD_RW
, // Opt_Disk - DVD-Rewriteable
295 MO_3_RW
, // Opt_Disk - 3.5" Rewriteable MO Disk
296 MO_5_WO
, // Opt_Disk - MO 5.25" Write Once
297 MO_5_RW
, // Opt_Disk - MO 5.25" Rewriteable (not LIMDOW)
298 MO_5_LIMDOW
, // Opt_Disk - MO 5.25" Rewriteable (LIMDOW)
299 PC_5_WO
, // Opt_Disk - Phase Change 5.25" Write Once Optical
300 PC_5_RW
, // Opt_Disk - Phase Change 5.25" Rewriteable
301 PD_5_RW
, // Opt_Disk - PhaseChange Dual Rewriteable
302 ABL_5_WO
, // Opt_Disk - Ablative 5.25" Write Once Optical
303 PINNACLE_APEX_5_RW
, // Opt_Disk - Pinnacle Apex 4.6GB Rewriteable Optical
304 SONY_12_WO
, // Opt_Disk - Sony 12" Write Once
305 PHILIPS_12_WO
, // Opt_Disk - Philips/LMS 12" Write Once
306 HITACHI_12_WO
, // Opt_Disk - Hitachi 12" Write Once
307 CYGNET_12_WO
, // Opt_Disk - Cygnet/ATG 12" Write Once
308 KODAK_14_WO
, // Opt_Disk - Kodak 14" Write Once
309 MO_NFR_525
, // Opt_Disk - Near Field Recording (Terastor)
310 NIKON_12_RW
, // Opt_Disk - Nikon 12" Rewriteable
311 IOMEGA_ZIP
, // Mag_Disk - Iomega Zip
312 IOMEGA_JAZ
, // Mag_Disk - Iomega Jaz
313 SYQUEST_EZ135
, // Mag_Disk - Syquest EZ135
314 SYQUEST_EZFLYER
, // Mag_Disk - Syquest EzFlyer
315 SYQUEST_SYJET
, // Mag_Disk - Syquest SyJet
316 AVATAR_F2
, // Mag_Disk - 2.5" Floppy
317 MP2_8mm
, // Tape - 8mm Hitachi
318 DST_S
, // Ampex DST Small Tapes
319 DST_M
, // Ampex DST Medium Tapes
320 DST_L
, // Ampex DST Large Tapes
321 VXATape_1
, // Ecrix 8mm Tape
322 VXATape_2
, // Ecrix 8mm Tape
323 STK_EAGLE
, // STK Eagle
324 LTO_Ultrium
, // IBM, HP, Seagate LTO Ultrium
325 LTO_Accelis
// IBM, HP, Seagate LTO Accelis
326 } STORAGE_MEDIA_TYPE
, *PSTORAGE_MEDIA_TYPE
;
328 #endif //IOCTL_STORAGE_GET_MEDIA_TYPES_EX
331 //**********************************************************************************************
333 typedef struct _SET_CD_SPEED_USER_IN
{
334 ULONG ReadSpeed
; // Kbyte/sec 176 = 1X
335 ULONG WriteSpeed
; // Kbyte/sec
336 } SET_CD_SPEED_USER_IN
, *PSET_CD_SPEED_USER_IN
;
338 typedef struct _SET_CD_SPEED_EX_USER_IN
{
339 ULONG ReadSpeed
; // Kbyte/sec 176 = 1X
340 ULONG WriteSpeed
; // Kbyte/sec
343 } SET_CD_SPEED_EX_USER_IN
, *PSET_CD_SPEED_EX_USER_IN
;
345 //**********************************************************************************************
347 typedef struct _SET_STREAMING_USER_IN
{
351 UCHAR RA
: 1; // Random Access
353 UCHAR RDD
: 1; // Restore Defaults
364 ULONG ReadSize
; // KBytes
365 ULONG ReadTime
; // ms
367 ULONG WriteSize
; // KBytes
368 ULONG WriteTime
; // ms
369 } SET_STREAMING_USER_IN
, *PSET_STREAMING_USER_IN
;
371 //**********************************************************************************************
374 #ifndef SyncCache_RELADR
375 #define SyncCache_RELADR 0x01
376 #define SyncCache_Immed 0x02
377 #endif //SyncCache_RELADR
380 typedef struct _SYNC_CACHE_USER_IN
{
391 } SYNC_CACHE_USER_IN
, *PSYNC_CACHE_USER_IN
;
393 //**********************************************************************************************
395 typedef struct _BUFFER_CAPACITY_BLOCK_USER_OUT
{
398 ULONG BlankBufferLength
;
400 BOOLEAN LostStreaming
;
401 ULONG MaximumPhysicalPages
;
402 ULONG MaximumTransferLength
;
403 ULONG ActualMaximumTransferLength
;
404 } BUFFER_CAPACITY_BLOCK_USER_OUT
, *PBUFFER_CAPACITY_BLOCK_USER_OUT
;
406 //**********************************************************************************************
408 typedef struct _TRACK_INFO_BLOCK_USER_OUT
{
444 ULONG LastRecordedAddr
;
445 UCHAR _TrackNum2
; // MSB
446 UCHAR _SesNum2
; // MSB
455 UCHAR TrackStartMSF
[3];
456 UCHAR NextWriteMSF
[3];
460 } TRACK_INFO_BLOCK_USER_OUT
, *PTRACK_INFO_BLOCK_USER_OUT
;
462 //**********************************************************************************************
464 typedef struct _TRACK_INFO_BLOCK_USER_IN
{
467 } TRACK_INFO_BLOCK_USER_IN
, *PTRACK_INFO_BLOCK_USER_IN
;
469 //**********************************************************************************************
471 typedef READ_CAPACITY_DATA READ_CAPACITY_USER_OUT
;
472 typedef PREAD_CAPACITY_DATA PREAD_CAPACITY_USER_OUT
;
474 //**********************************************************************************************
476 typedef struct _GET_SIGNATURE_USER_OUT
{
478 USHORT VersiomMajor
;
479 USHORT VersiomMinor
;
480 USHORT VersiomId
; // alfa/beta/...
483 } GET_SIGNATURE_USER_OUT
, *PGET_SIGNATURE_USER_OUT
;
485 //**********************************************************************************************
488 #ifndef BlankMedia_Mask
489 #define BlankMedia_Mask 0x07
490 #define BlankMedia_Complete 0x00
491 #define BlankMedia_Minimal 0x01
492 #define BlankMedia_Track 0x02
493 #define BlankMedia_UnreserveTrack 0x03
494 #define BlankMedia_TrackTail 0x04
495 #define BlankMedia_UncloseLastSes 0x05
496 #define BlankMedia_EraseSes 0x06
497 #define BlankMedia_Immed 0x10
498 #endif //BlankMedia_Mask
501 typedef struct _BLANK_MEDIA_USER_IN
{
512 ULONG StartAddr_TrkNum
;
513 } BLANK_MEDIA_USER_IN
, *PBLANK_MEDIA_USER_IN
;
515 //**********************************************************************************************
517 typedef struct _RESERVE_TRACK_USER_IN
{
519 } RESERVE_TRACK_USER_IN
, *PRESERVE_TRACK_USER_IN
;
521 #define RESERVE_TRACK_EX_SIZE 0x0
522 #define RESERVE_TRACK_EX_START_LBA 0x1
523 #define RESERVE_TRACK_EX_RMZ 0x2
525 typedef struct _RESERVE_TRACK_EX_USER_IN
{
531 } RESERVE_TRACK_EX_USER_IN
, *PRESERVE_TRACK_EX_USER_IN
;
533 //**********************************************************************************************
535 typedef struct _LL_WRITE_USER_IN
{
550 } LL_WRITE_USER_IN
, *PLL_WRITE_USER_IN
;
552 //**********************************************************************************************
554 //#ifndef WITHOUT_FORMATTER
557 #ifndef FormatDesc_Grow
558 #define FormatDesc_Grow 0x40
559 #define FormatDesc_Ses 0x80
563 #define FORMAT_UNIT_FORCE_STD_MODE 0x80000000
564 #define FORMAT_UNIT_FORCE_FULL_FMT 0x40000000
565 #define FORMAT_UNIT_RESTART_MRW 0x01000000
567 typedef struct _FORMAT_CDRW_PARAMETERS_USER_IN
{
578 } FORMAT_CDRW_PARAMETERS_USER_IN
, *PFORMAT_CDRW_PARAMETERS_USER_IN
;
580 //#endif //WITHOUT_FORMATTER
582 //**********************************************************************************************
585 #ifndef CloseTrkSes_Immed
586 #define CloseTrkSes_Immed 0x01
588 #define CloseTrkSes_Trk 0x01
589 #define CloseTrkSes_Ses 0x02
591 #define CloseTrkSes_LastTrkSes 0xff
595 typedef struct _CLOSE_TRK_SES_USER_IN
{
612 } CLOSE_TRK_SES_USER_IN
, *PCLOSE_TRK_SES_USER_IN
;
614 //**********************************************************************************************
616 typedef struct _PREVENT_MEDIA_REMOVAL_USER_IN
{
617 BOOLEAN PreventMediaRemoval
;
618 } PREVENT_MEDIA_REMOVAL_USER_IN
, *PPREVENT_MEDIA_REMOVAL_USER_IN
;
620 //**********************************************************************************************
622 typedef struct _SET_RANDOM_ACCESS_USER_IN
{
623 BOOLEAN RandomAccessMode
;
624 } SET_RANDOM_ACCESS_USER_IN
, *PSET_RANDOM_ACCESS_USER_IN
;
626 //**********************************************************************************************
629 #ifndef DiscInfo_Disk_Mask
630 #define DiscInfo_Disk_Mask 0x03
631 #define DiscInfo_Disk_Empty 0x00
632 #define DiscInfo_Disk_Appendable 0x01
633 #define DiscInfo_Disk_Complete 0x02
635 #define DiscInfo_Ses_Mask 0x0C
636 #define DiscInfo_Ses_Empty 0x00
637 #define DiscInfo_Ses_Incomplete 0x04
638 #define DiscInfo_Ses_Complete 0x0C
640 #define DiscInfo_Disk_Erasable 0x10
642 #define DiscInfo_URU 0x10
643 #define DiscInfo_DBC_V 0x20
644 #define DiscInfo_DID_V 0x40
646 #define DiscInfo_Type_cdrom 0x00 // CD-DA / CD-ROM
647 #define DiscInfo_Type_cdi 0x10 // CD-I
648 #define DiscInfo_Type_cdromxa 0x20 // CD-ROM XA
649 #define DiscInfo_Type_unknown 0xFF // HZ ;)
654 typedef struct _DISC_STATUS_INFO_USER_OUT
{
657 UCHAR AdditionalSenseCode
;
658 UCHAR AdditionalSenseCodeQualifier
;
660 BOOLEAN RandomAccessMode
;
663 LARGE_INTEGER MediaChangeTime
;
665 UCHAR LastSesLeadInMSF
[4];
666 UCHAR LastSesLeadOutMSF
[4];
669 ULONG FirstTrackNumLastSes
;
670 ULONG LastTrackNumLastSes
;
671 ULONG Reserved1
; // this is used to align data
673 } DISC_STATUS_INFO_USER_OUT
, *PDISC_STATUS_INFO_USER_OUT
;
675 #define DiscStatus_Formattable 0x01
677 typedef struct _DISC_INFO_BLOCK_USER_OUT
{ //
679 DISC_STATUS_INFO_USER_OUT Status
;
687 UCHAR LastSesStat
: 2;
695 UCHAR FirstTrackNumLastSes
;
696 UCHAR LastTrackNumLastSes
;
703 UCHAR DBC_V
: 1; // 0
709 UCHAR NumOfSes2
; // MSB MMC-3
710 UCHAR FirstTrackNumLastSes2
; // MSB MMC-3
711 UCHAR LastTrackNumLastSes2
; // MSB MMC-3
713 ULONG LastSesLeadInLBA
;
714 ULONG LastSesLeadOutLBA
;
715 UCHAR DiskBarCode
[8];
718 } DISC_INFO_BLOCK_USER_OUT
, *PDISC_INFO_BLOCK_USER_OUT
;
720 //**********************************************************************************************
722 typedef struct _TEST_UNIT_READY_USER_IN
{
724 } TEST_UNIT_READY_USER_IN
, *PTEST_UNIT_READY_USER_IN
;
726 typedef struct _TEST_UNIT_READY_USER_OUT
{
729 UCHAR AdditionalSenseCode
;
730 UCHAR AdditionalSenseCodeQualifier
;
731 } TEST_UNIT_READY_USER_OUT
, *PTEST_UNIT_READY_USER_OUT
;
733 //**********************************************************************************************
736 #ifndef MediaType_Unknown
738 #define MediaType_Unknown 0x00
739 #define MediaType_120mm_CDROM_DataOnly 0x01
740 #define MediaType_120mm_CDROM_AudioOnly 0x02 //CDDA
741 #define MediaType_120mm_CDROM_DataAudioCombined 0x03
742 #define MediaType_120mm_CDROM_Hybrid_PhotoCD 0x04
743 #define MediaType_80mm_CDROM_DataOnly 0x05
744 #define MediaType_80mm_CDROM_AudioOnly 0x06 //CDDA
745 #define MediaType_80mm_CDROM_DataAudioCombined 0x07
746 #define MediaType_80mm_CDROM_Hybrid_PhotoCD 0x08
748 #define MediaType_UnknownSize_CDR 0x10
749 #define MediaType_120mm_CDR_DataOnly 0x11
750 #define MediaType_120mm_CDR_AudioOnly 0x12 //CDDA
751 #define MediaType_120mm_CDR_DataAudioCombined 0x13
752 #define MediaType_120mm_CDR_Hybrid_PhotoCD 0x14
753 #define MediaType_80mm_CDR_DataOnly 0x15
754 #define MediaType_80mm_CDR_AudioOnly 0x16 //CDDA
755 #define MediaType_80mm_CDR_DataAudioCombined 0x17
756 #define MediaType_80mm_CDR_Hybrid_Photo_CD 0x18
758 #define MediaType_UnknownSize_CDRW 0x20
759 #define MediaType_120mm_CDRW_DataOnly 0x21
760 #define MediaType_120mm_CDRW_AudioOnly 0x22 //CDDA
761 #define MediaType_120mm_CDRW_DataAudioCombined 0x23
762 #define MediaType_120mm_CDRW_Hybrid 0x24
763 #define MediaType_80mm_CDRW_DataOnly 0x25
764 #define MediaType_80mm_CDRW_AudioOnly 0x26 //CDDA
765 #define MediaType_80mm_CDRW_DataAudioCombined 0x27
766 #define MediaType_80mm_CDRW_Hybrid 0x28
768 #define MediaType_UnknownSize_Unknown 0x30
770 #define MediaType_NoDiscPresent 0x70
771 #define MediaType_DoorOpen 0x71
776 typedef struct _GET_MEDIA_TYPE_USER_OUT
{
778 } GET_MEDIA_TYPE_USER_OUT
, *PGET_MEDIA_TYPE_USER_OUT
;
780 typedef struct _GET_MEDIA_TYPE_EX_USER_OUT
{
781 UCHAR OldStyleMediaType
; // see GET_MEDIA_TYPE_USER_OUT
788 UCHAR Layers
; // Number of layers - 1 (e.g. 0 => 1 layer)
789 UCHAR Reserved
[8]; // for future implementation
790 } GET_MEDIA_TYPE_EX_USER_OUT
, *PGET_MEDIA_TYPE_EX_USER_OUT
;
792 #define CdMediaClass_CDROM 0x00
793 #define CdMediaClass_CDR 0x01
794 #define CdMediaClass_CDRW 0x02
795 #define CdMediaClass_DVDROM 0x03
796 #define CdMediaClass_DVDRAM 0x05
797 #define CdMediaClass_DVDR 0x06
798 #define CdMediaClass_DVDRW 0x07
799 #define CdMediaClass_DVDpR 0x08
800 #define CdMediaClass_DVDpRW 0x09
801 #define CdMediaClass_DDCDROM 0x0a
802 #define CdMediaClass_DDCDR 0x0b
803 #define CdMediaClass_DDCDRW 0x0c
804 #define CdMediaClass_BDROM 0x0d
805 #define CdMediaClass_BDRE 0x0e
806 #define CdMediaClass_BDR 0x0f
807 #define CdMediaClass_HD_DVDROM 0x10
808 #define CdMediaClass_HD_DVDRAM 0x11
809 #define CdMediaClass_HD_DVDR 0x12
810 #define CdMediaClass_HD_DVDRW 0x13
811 #define CdMediaClass_NoDiscPresent 0x70
812 #define CdMediaClass_DoorOpen 0x71
813 #define CdMediaClass_Unknown 0xff
815 #define CdMediaClass_Max CdMediaClass_HD_DVDRW
817 #define CdMediaSize_Unknown 0
818 #define CdMediaSize_120mm 1
819 #define CdMediaSize_80mm 2
821 #define CdDataType_Unknown 0
822 #define CdDataType_DataOnly 1
823 #define CdDataType_AudioOnly 2 //CDDA
824 #define CdDataType_DataAudioCombined 3
825 #define CdDataType_Hybrid 4
826 #define CdDataType_DataOnlyMRW 5
828 #define CdMediaClassEx_CD 0x00
829 #define CdMediaClassEx_DVD 0x01
830 #define CdMediaClassEx_DDCD 0x02
831 #define CdMediaClassEx_BD 0x03
832 #define CdMediaClassEx_HD_DVD 0x04
833 #define CdMediaClassEx_None 0x70
834 #define CdMediaClassEx_Unknown 0xff
836 #define CdDataClassEx_ROM 0x00
837 #define CdDataClassEx_R 0x01
838 #define CdDataClassEx_RW 0x02
839 #define CdDataClassEx_Unknown 0xff
841 #define CdCapFlags_Writable 0x01
842 #define CdCapFlags_Erasable 0x02
843 #define CdCapFlags_Formatable 0x04
844 #define CdCapFlags_WriteParamsReq 0x08
845 #define CdCapFlags_RandomWritable 0x10
846 #define CdCapFlags_Cav 0x20
848 #define CdrwMediaClassEx_IsRAM(MediaClassEx) ( \
849 ((MediaClassEx) == CdMediaClass_DVDRAM) || \
850 ((MediaClassEx) == CdMediaClass_BDRE) || \
851 ((MediaClassEx) == CdMediaClass_HD_DVDRAM) )
853 #define CdrwIsDvdOverwritable(MediaClassEx) \
854 ((MediaClassEx) == CdMediaClass_DVDRW || \
855 (MediaClassEx) == CdMediaClass_DVDpRW || \
856 (MediaClassEx) == CdMediaClass_DVDRAM || \
857 (MediaClassEx) == CdMediaClass_BDRE || \
858 (MediaClassEx) == CdMediaClass_HD_DVDRW || \
859 (MediaClassEx) == CdMediaClass_HD_DVDRAM \
862 //**********************************************************************************************
865 #ifndef MAX_PAGE_SIZE
866 #define MAX_PAGE_SIZE 0x100
870 typedef struct _MODE_SENSE_USER_IN
{
876 UCHAR PageSavable
: 1;
879 } MODE_SENSE_USER_IN
, *PMODE_SENSE_USER_IN
;
881 typedef struct _MODE_SENSE_USER_OUT
{
882 MODE_PARAMETER_HEADER Header
;
883 } MODE_SENSE_USER_OUT
, *PMODE_SENSE_USER_OUT
;
885 //**********************************************************************************************
887 typedef struct _MODE_SELECT_USER_IN
{
888 MODE_PARAMETER_HEADER Header
;
889 } MODE_SELECT_USER_IN
, *PMODE_SELECT_USER_IN
;
891 //**********************************************************************************************
893 typedef struct _MODE_WRITE_PARAMS_PAGE_USER
{ // 0x05
896 UCHAR PageSavable
: 1;
898 UCHAR PageLength
; // 0x32
901 #ifndef WParam_WType_Mask
902 #define WParam_WType_Mask 0x0f
903 #define WParam_WType_Packet 0x00
904 #define WParam_WType_TAO 0x01
905 #define WParam_WType_Ses 0x02
906 #define WParam_WType_Raw 0x03
907 #define WParam_TestWrite 0x10
908 #define WParam_LS_V 0x20
909 #define WParam_BUFF 0x40
916 UCHAR WriteType
: 4; // 1
925 #ifndef WParam_TrkMode_Mask
926 #define WParam_TrkMode_Mask 0x0f
927 #define WParam_TrkMode_None 0x00
928 #define WParam_TrkMode_Audio 0x00
929 #define WParam_TrkMode_Audio_PreEmph 0x01
930 #define WParam_TrkMode_Data 0x04
931 #define WParam_TrkMode_IncrData 0x05
932 #define WParam_TrkMode_QAudio_PreEmph 0x08
933 #define WParam_TrkMode_AllowCpy 0x02
934 #define WParam_Copy 0x10
935 #define WParam_FP 0x20
936 #define WParam_MultiSes_Mask 0xc0
937 #define WParam_Multises_None 0x00
938 #define WParam_Multises_Final 0x80
939 #define WParam_Multises_Multi 0xc0
946 UCHAR TrackMode
: 4; // 4
949 UCHAR Multisession
: 2; // 11
954 #ifndef WParam_BlkType_Mask
955 #define WParam_BlkType_Mask 0x0f
956 #define WParam_BlkType_Raw_2352 0x00
957 #define WParam_BlkType_RawPQ_2368 0x01
958 #define WParam_BlkType_RawPW_2448 0x02
959 #define WParam_BlkType_RawPW_R_2448 0x03
960 #define WParam_BlkType_M1_2048 0x08
961 #define WParam_BlkType_M2_2336 0x09
962 #define WParam_BlkType_M2XAF1_2048 0x0a
963 #define WParam_BlkType_M2XAF1SH_2056 0x0b
964 #define WParam_BlkType_M2XAF2_2324 0x0c
965 #define WParam_BlkType_M2XAFXSH_2332 0x0d
972 UCHAR DataBlockType
: 4; // 8
983 UCHAR HostAppCode
: 6; // 0
989 #ifndef WParam_SesFmt_CdRom
990 #define WParam_SesFmt_CdRom 0x00
991 #define WParam_SesFmt_CdI 0x10
992 #define WParam_SesFmt_CdRomXa 0x20
998 ULONG PacketSize
; // 0
999 USHORT AudioPause
; // 150
1019 struct _SubHdrParams1
{
1024 #define WParam_SubHdr_SubMode0 0x00
1025 #define WParam_SubHdr_SubMode1 0x08
1033 #define WParam_SubHdr_Mode_Mask 0x03
1034 #define WParam_SubHdr_Mode0 0x00
1035 #define WParam_SubHdr_Mode1 0x01
1036 #define WParam_SubHdr_Mode2 0x02
1037 #define WParam_SubHdr_Format_Mask 0xe0
1038 #define WParam_SubHdr_Format_UserData 0x00
1039 #define WParam_SubHdr_Format_RunIn4 0x20
1040 #define WParam_SubHdr_Format_RunIn3 0x40
1041 #define WParam_SubHdr_Format_RunIn2 0x60
1042 #define WParam_SubHdr_Format_RunIn1 0x80
1043 #define WParam_SubHdr_Format_Link 0xa0
1044 #define WParam_SubHdr_Format_RunOut2 0xc0
1045 #define WParam_SubHdr_Format_RunOut1 0xe0
1057 } MODE_WRITE_PARAMS_PAGE_USER
, *PMODE_WRITE_PARAMS_PAGE_USER
;
1059 typedef MODE_WRITE_PARAMS_PAGE_USER GET_WRITE_MODE_USER_OUT
;
1060 typedef PMODE_WRITE_PARAMS_PAGE_USER PGET_WRITE_MODE_USER_OUT
;
1062 typedef MODE_WRITE_PARAMS_PAGE_USER SET_WRITE_MODE_USER_IN
;
1063 typedef PMODE_WRITE_PARAMS_PAGE_USER PSET_WRITE_MODE_USER_IN
;
1065 //**********************************************************************************************
1067 #ifndef WITHOUT_FORMATTER
1069 typedef MODE_MRW_PAGE GET_MRW_MODE_USER_OUT
;
1070 typedef PMODE_MRW_PAGE PGET_MRW_MODE_USER_OUT
;
1072 typedef MODE_MRW_PAGE SET_MRW_MODE_USER_IN
;
1073 typedef PMODE_MRW_PAGE PSET_MRW_MODE_USER_IN
;
1075 #endif //WITHOUT_FORMATTER
1077 //**********************************************************************************************
1079 typedef struct _SET_READ_AHEAD_USER_IN
{
1082 } SET_READ_AHEAD_USER_IN
, *PSET_READ_AHEAD_USER_IN
;
1084 //**********************************************************************************************
1086 typedef struct _GET_CAPABILITIES_USER_OUT
{
1088 UCHAR Reserved1
: 1;
1094 #ifndef DevCap_read_cd_r
1095 #define DevCap_read_cd_r 0x01 // reserved in 1.2
1096 #define DevCap_read_cd_rw 0x02 // reserved in 1.2
1097 #define DevCap_method2 0x04
1098 #define DevCap_read_dvd_rom 0x08
1099 #define DevCap_read_dvd_r 0x10
1100 #define DevCap_read_dvd_ram 0x20
1101 #endif //DevCap_cd_r_read
1104 UCHAR ReadCap
; // DevCap_*_read
1105 /* UCHAR cd_r_read : 1; // reserved in 1.2
1106 UCHAR cd_rw_read : 1; // reserved in 1.2
1109 UCHAR dvd_r_read : 1;
1110 UCHAR dvd_ram_read : 1;
1111 UCHAR Reserved2 : 2;*/
1114 #ifndef DevCap_write_cd_r
1115 #define DevCap_write_cd_r 0x01 // reserved in 1.2
1116 #define DevCap_write_cd_rw 0x02 // reserved in 1.2
1117 #define DevCap_test_write 0x04
1118 #define DevCap_write_dvd_r 0x10
1119 #define DevCap_write_dvd_ram 0x20
1120 #endif //DevCap_cd_r_write
1123 UCHAR WriteCap
; // DevCap_*_write
1124 /* UCHAR cd_r_write : 1; // reserved in 1.2
1125 UCHAR cd_rw_write : 1; // reserved in 1.2
1126 UCHAR dvd_ram_write : 1;
1127 UCHAR dvd_r_write : 1;
1128 UCHAR reserved3a : 1;
1129 UCHAR test_write : 1;
1130 UCHAR Reserved3 : 2;*/
1133 #ifndef DevCap_audio_play
1134 #define DevCap_audio_play 0x01
1135 #define DevCap_composite 0x02
1136 #define DevCap_digport1 0x04
1137 #define DevCap_digport2 0x08
1138 #define DevCap_mode2_form1 0x10
1139 #define DevCap_mode2_form2 0x20
1140 #define DevCap_multisession 0x40
1141 #endif //DevCap_audio_play
1144 UCHAR Capabilities0
;
1145 /* UCHAR audio_play : 1;
1146 UCHAR composite : 1;
1149 UCHAR mode2_form1 : 1;
1150 UCHAR mode2_form2 : 1;
1151 UCHAR multisession : 1;
1152 UCHAR Reserved4 : 1;*/
1156 #define DevCap_cdda 0x01
1157 #define DevCap_cdda_accurate 0x02
1158 #define DevCap_rw_supported 0x04
1159 #define DevCap_rw_corr 0x08
1160 #define DevCap_c2_pointers 0x10
1161 #define DevCap_isrc 0x20
1162 #define DevCap_upc 0x40
1163 #define DevCap_read_bar_code 0x80
1164 #endif //DevCap_cdda
1167 UCHAR Capabilities1
;
1169 UCHAR cdda_accurate : 1;
1170 UCHAR rw_supported : 1;
1172 UCHAR c2_pointers : 1;
1175 UCHAR Reserved5 : 1;*/
1179 #define DevCap_lock 0x01
1180 #define DevCap_lock_state 0x02
1181 #define DevCap_prevent_jumper 0x04
1182 #define DevCap_eject 0x08
1183 #define DevCap_mechtype_mask 0xE0
1184 #define DevCap_mechtype_caddy 0x00
1185 #define DevCap_mechtype_tray (0x01<<5)
1186 #define DevCap_mechtype_popup (0x02<<5)
1187 #define DevCap_mechtype_individual_changer (0x04<<5)
1188 #define DevCap_mechtype_cartridge_changer (0x05<<5)
1189 #endif //DevCap_lock
1192 UCHAR Capabilities2
;
1194 UCHAR lock_state : 1;
1195 UCHAR prevent_jumper : 1;
1197 UCHAR Reserved6 : 1;
1198 UCHAR mechtype : 3;*/
1201 #ifndef DevCap_separate_volume
1202 #define DevCap_separate_volume 0x01
1203 #define DevCap_separate_mute 0x02
1204 #define DevCap_disc_present 0x04 // reserved in 1.2
1205 #define DevCap_sw_slot_select 0x08 // reserved in 1.2
1206 #define DevCap_change_side_cap 0x10
1207 #define DevCap_rw_leadin_read 0x20
1208 #endif //DevCap_separate_volume
1211 UCHAR Capabilities3
;
1212 /* UCHAR separate_volume : 1;
1213 UCHAR separate_mute : 1;
1214 UCHAR disc_present : 1; // reserved in 1.2
1215 UCHAR sss : 1; // reserved in 1.2
1216 UCHAR Reserved7 : 4;*/
1218 USHORT MaximumSpeedSupported
;
1219 USHORT NumberVolumeLevels
;
1221 USHORT CurrentSpeed
;
1225 UCHAR SpecialParameters0
;
1226 /* UCHAR Reserved9 : 1;
1231 UCHAR Reserved10 : 2;*/
1233 USHORT MaximumWriteSpeedSupported
;
1234 USHORT CurrentWriteSpeed
;
1235 USHORT CopyManagementRevision
;
1236 UCHAR Reserved11
[2];
1238 } GET_CAPABILITIES_USER_OUT
, *PGET_CAPABILITIES_USER_OUT
;
1240 typedef struct _GET_CAPABILITIES_3_USER_OUT
{
1243 UCHAR Reserved1
: 1;
1247 UCHAR ReadCap
; // DevCap_*_read
1248 UCHAR WriteCap
; // DevCap_*_write
1249 UCHAR Capabilities0
;
1250 UCHAR Capabilities1
;
1251 UCHAR Capabilities2
;
1252 UCHAR Capabilities3
;
1253 USHORT MaximumSpeedSupported
;
1254 USHORT NumberVolumeLevels
;
1256 USHORT CurrentSpeed
;
1259 UCHAR SpecialParameters0
;
1261 USHORT MaximumWriteSpeedSupported
;
1262 USHORT CurrentWriteSpeed
;
1263 USHORT CopyManagementRevision
;
1264 UCHAR Reserved11
[2];
1270 UCHAR SpecialParameters1
;
1271 /* UCHAR RCS : 2; // rotation control selected
1272 UCHAR Reserved13 : 6; */
1274 USHORT CurrentWriteSpeed3
;
1275 USHORT LunWPerfDescriptorCount
;
1277 // LUN_WRITE_PERF_DESC_USER WritePerfDescs[0];
1279 } GET_CAPABILITIES_3_USER_OUT
, *PGET_CAPABILITIES_3_USER_OUT
;
1281 typedef struct _LUN_WRITE_PERF_DESC_USER
{
1284 #define LunWPerf_RotCtrl_Mask 0x07
1285 #define LunWPerf_RotCtrl_CLV 0x00
1286 #define LunWPerf_RotCtrl_CAV 0x01
1288 UCHAR RotationControl
;
1289 USHORT WriteSpeedSupported
; // kbps
1291 } LUN_WRITE_PERF_DESC_USER
, *PLUN_WRITE_PERF_DESC_USER
;
1293 //**********************************************************************************************
1295 typedef struct _SEND_OPC_INFO_USER_IN
{
1298 } SEND_OPC_INFO_USER_IN
, *PSEND_OPC_INFO_USER_IN
;
1300 typedef struct _SEND_OPC_INFO_HEADER_USER_IN
{
1302 USHORT OpcBlocksNumber
;
1303 } SEND_OPC_INFO_HEADER_USER_IN
, *PSEND_OPC_INFO_HEADER_USER_IN
;
1305 //**********************************************************************************************
1307 typedef struct _LL_READ_USER_IN
{
1309 #define ReadCd_BlkType_Mask 0x1c
1310 #define ReadCd_BlkType_Any (0x00<<2)
1311 #define ReadCd_BlkType_CDDA (0x01<<2)
1312 #define ReadCd_BlkType_M1 (0x02<<2)
1313 #define ReadCd_BlkType_M2FX (0x03<<2)
1314 #define ReadCd_BlkType_M2F1 (0x04<<2)
1315 #define ReadCd_BlkType_M2F2 (0x05<<2)
1317 UCHAR ExpectedBlkType
;
1319 ULONG LBA
; // negative value (-1) indicates tha (H)MSF must be used
1322 #define ReadCd_Error_Mask 0x0006
1323 #define ReadCd_Error_None 0x0000
1324 #define ReadCd_Error_C2 0x0002
1325 #define ReadCd_Error_C2ex 0x0004
1326 #define ReadCd_Include_EDC 0x0008
1327 #define ReadCd_Include_UsrData 0x0010
1328 #define ReadCd_Header_Mask 0x0060
1329 #define ReadCd_Header_None 0x0000
1330 #define ReadCd_Header_Hdr 0x0020
1331 #define ReadCd_Header_SubHdr 0x0040
1332 #define ReadCd_Header_AllHdr 0x0060
1333 #define ReadCd_Include_SyncData 0x0080
1334 #define ReadCd_SubChan_Mask 0x0700
1335 #define ReadCd_SubChan_None 0x0000
1336 #define ReadCd_SubChan_Raw 0x0100
1337 #define ReadCd_SubChan_Q 0x0200
1338 #define ReadCd_SubChan_PW 0x0400
1339 #define ReadCd_SubChan_All ReadCd_SubChan_Mask
1344 UCHAR Reserved2
: 1;
1345 UCHAR ErrorFlags
: 2;
1346 UCHAR IncludeEDC
: 1;
1347 UCHAR IncludeUserData
: 1;
1348 UCHAR HeaderCode
: 2;
1349 UCHAR IncludeSyncData
: 1;
1351 UCHAR SubChannelSelection
: 3;
1352 UCHAR Reserved3
: 5;
1357 CHAR Starting_MSF
[3];
1360 } LL_READ_USER_IN
, *PLL_READ_USER_IN
;
1362 //**********************************************************************************************
1364 typedef struct _GET_LAST_ERROR_USER_OUT
{
1368 UCHAR AdditionalSenseCode
;
1369 UCHAR AdditionalSenseCodeQualifier
;
1372 BOOLEAN RandomAccessMode
;
1373 LARGE_INTEGER MediaChangeTime
;
1374 ULONG MediaChangeCount
;
1376 } GET_LAST_ERROR_USER_OUT
, *PGET_LAST_ERROR_USER_OUT
;
1378 //**********************************************************************************************
1380 typedef enum _TRACK_MODE_TYPE
{
1384 } TRACK_MODE_TYPE
, *PTRACK_MODE_TYPE
;
1386 typedef struct _RAW_READ_USER_IN
{
1387 LARGE_INTEGER DiskOffset
;
1389 TRACK_MODE_TYPE TrackMode
;
1390 } RAW_READ_USER_IN
, *PRAW_READ_USER_IN
;
1392 //**********************************************************************************************
1394 typedef struct _PLAY_AUDIO_MSF_USER_IN
{
1395 UCHAR StartingMSF
[3];
1397 } PLAY_AUDIO_MSF_USER_IN
, *PPLAY_AUDIO_MSF_USER_IN
;
1399 //**********************************************************************************************
1401 #define AudioStatus_NotSupported 0x00
1402 #define AudioStatus_InProgress 0x11
1403 #define AudioStatus_Paused 0x12
1404 #define AudioStatus_PlayComplete 0x13
1405 #define AudioStatus_PlayError 0x14
1406 #define AudioStatus_NoStatus 0x15
1408 typedef struct _SUB_Q_HEADER
{
1411 UCHAR DataLength
[2];
1412 } SUB_Q_HEADER
, *PSUB_Q_HEADER
;
1414 typedef struct _SUB_Q_CURRENT_POSITION
{
1415 SUB_Q_HEADER Header
;
1421 UCHAR AbsoluteAddress
[4];
1422 UCHAR TrackRelativeAddress
[4];
1423 } SUB_Q_CURRENT_POSITION
, *PSUB_Q_CURRENT_POSITION
;
1425 typedef struct _SUB_Q_MEDIA_CATALOG_NUMBER
{
1426 SUB_Q_HEADER Header
;
1429 UCHAR Reserved1
: 7;
1431 UCHAR MediaCatalog
[15];
1432 } SUB_Q_MEDIA_CATALOG_NUMBER
, *PSUB_Q_MEDIA_CATALOG_NUMBER
;
1434 typedef struct _SUB_Q_TRACK_ISRC
{
1435 SUB_Q_HEADER Header
;
1440 UCHAR Reserved2
: 7;
1442 UCHAR TrackIsrc
[15];
1443 } SUB_Q_TRACK_ISRC
, *PSUB_Q_TRACK_ISRC
;
1445 typedef union _SUB_Q_CHANNEL_DATA_USER_OUT
{
1446 SUB_Q_CURRENT_POSITION CurrentPosition
;
1447 SUB_Q_MEDIA_CATALOG_NUMBER MediaCatalog
;
1448 SUB_Q_TRACK_ISRC TrackIsrc
;
1449 } SUB_Q_CHANNEL_DATA_USER_OUT
, *PSUB_Q_CHANNEL_DATA_USER_OUT
;
1451 #define IOCTL_CDROM_SUB_Q_CHANNEL 0x00
1452 #define IOCTL_CDROM_CURRENT_POSITION 0x01
1453 #define IOCTL_CDROM_MEDIA_CATALOG 0x02
1454 #define IOCTL_CDROM_TRACK_ISRC 0x03
1456 typedef struct _SUB_Q_CHANNEL_DATA_USER_IN
{
1459 } SUB_Q_CHANNEL_DATA_USER_IN
, *PSUB_Q_CHANNEL_DATA_USER_IN
;
1461 //**********************************************************************************************
1463 typedef struct _SEEK_AUDIO_MSF_USER_IN
{
1465 } SEEK_AUDIO_MSF_USER_IN
, *PSEEK_AUDIO_MSF_USER_IN
;
1467 //**********************************************************************************************
1469 typedef struct _AUDIO_CONTROL_USER_OUT
{
1471 USHORT LogicalBlocksPerSecond
;
1472 } AUDIO_CONTROL_USER_OUT
, *PAUDIO_CONTROL_USER_OUT
;
1474 //**********************************************************************************************
1476 typedef READ_TOC_TOC READ_TOC_USER_OUT
;
1477 typedef PREAD_TOC_TOC PREAD_TOC_USER_OUT
;
1479 typedef READ_TOC_SES GET_LAST_SESSION_USER_OUT
;
1480 typedef PREAD_TOC_SES PGET_LAST_SESSION_USER_OUT
;
1482 typedef READ_TOC_FULL_TOC READ_FULL_TOC_USER_OUT
;
1483 typedef PREAD_TOC_FULL_TOC PREAD_FULL_TOC_USER_OUT
;
1485 typedef READ_TOC_FULL_TOC READ_PMA_USER_OUT
;
1486 typedef PREAD_TOC_FULL_TOC PREAD_PMA_USER_OUT
;
1488 typedef READ_TOC_ATIP READ_ATIP_USER_OUT
;
1489 typedef PREAD_TOC_ATIP PREAD_ATIP_USER_OUT
;
1491 typedef READ_TOC_CD_TEXT READ_CD_TEXT_USER_OUT
;
1492 typedef PREAD_TOC_CD_TEXT PREAD_CD_TEXT_USER_OUT
;
1494 //**********************************************************************************************
1496 typedef struct _VOLUME_CONTROL
{
1497 UCHAR PortVolume
[4];
1498 } VOLUME_CONTROL
, *PVOLUME_CONTROL
;
1500 typedef VOLUME_CONTROL VOLUME_CONTROL_USER_IN
;
1501 typedef PVOLUME_CONTROL PVOLUME_CONTROL_USER_IN
;
1503 typedef VOLUME_CONTROL VOLUME_CONTROL_USER_OUT
;
1504 typedef PVOLUME_CONTROL PVOLUME_CONTROL_USER_OUT
;
1506 //**********************************************************************************************
1508 typedef struct _INIT_DEINIT_USER_IN
{
1509 BOOLEAN PassThrough
;
1510 BOOLEAN Reserved
; // For separate device (de)initialization
1511 } INIT_DEINIT_USER_IN
, *PINIT_DEINIT_USER_IN
;
1513 typedef INIT_DEINIT_USER_IN INIT_DEINIT_USER_OUT
;
1514 typedef PINIT_DEINIT_USER_IN PINIT_DEINIT_USER_OUT
;
1516 //**********************************************************************************************
1518 typedef struct _READ_SESSION_INFO_USER_IN
{
1521 } READ_SESSION_INFO_USER_IN
, *PREAD_SESSION_INFO_USER_IN
;
1523 typedef READ_TOC_SES READ_SESSION_INFO_USER_OUT
;
1524 typedef PREAD_TOC_SES PREAD_SESSION_INFO_USER_OUT
;
1526 //**********************************************************************************************
1528 typedef struct _READ_TOC_EX_USER_IN
{
1531 } READ_TOC_EX_USER_IN
, *PREAD_TOC_EX_USER_IN
;
1533 typedef READ_TOC_SES READ_TOC_EX_USER_OUT
;
1534 typedef PREAD_TOC_SES PREAD_TOC_EX_USER_OUT
;
1536 //**********************************************************************************************
1538 #define DefSession_LastAvailable 0xff
1540 typedef struct _SET_DEFAULT_SESSION_USER_IN
{
1542 } SET_DEFAULT_SESSION_USER_IN
, *PSET_DEFAULT_SESSION_USER_IN
;
1544 //**********************************************************************************************
1546 typedef struct _NOTIFY_MEDIA_CHANGE_USER_IN
{
1548 } NOTIFY_MEDIA_CHANGE_USER_IN
, *PNOTIFY_MEDIA_CHANGE_USER_IN
;
1550 //**********************************************************************************************
1552 typedef DISK_GEOMETRY GET_DRIVE_GEOMETRY_USER_OUT
;
1553 typedef PDISK_GEOMETRY PGET_DRIVE_GEOMETRY_USER_OUT
;
1555 //**********************************************************************************************
1557 typedef struct _GET_DEVICE_INFO_OLD_USER_OUT
{
1558 UCHAR WModes
[4][16];
1560 UCHAR SimulatedWModes
[4][16];
1563 INQUIRYDATA InquiryData
;
1564 ULONG Features2
[4]; // form GET_CONFIG 0 - 128
1565 } GET_DEVICE_INFO_OLD_USER_OUT
, *PGET_DEVICE_INFO_OLD_USER_OUT
;
1567 typedef struct _GET_DEVICE_INFO_USER_OUT
{
1570 UCHAR WModes
[4][16];
1572 UCHAR SimulatedWModes
[4][16];
1575 INQUIRYDATA InquiryData
;
1576 ULONG Features2
[4]; // from GET_CONFIG
1577 ULONG Features2ex
[64-4]; // from GET_CONFIG (reserved for higher values)
1578 ULONG WriteCaps
; // CDRW_DEV_CAPABILITY_xxx
1579 ULONG ReadCaps
; // CDRW_DEV_CAPABILITY_xxx
1580 } GET_DEVICE_INFO_USER_OUT
, *PGET_DEVICE_INFO_USER_OUT
;
1582 #define CDRW_DEV_CAPABILITY_TAG 0xCA10AB11
1584 #define WMODE_SUPPORTED 0x01
1585 #define WMODE_SUPPORTED_FP 0x02
1586 #define WMODE_SUPPORTED_VP 0x04
1587 #define WMODE_NOT_SUPPORTED 0xff
1588 #define WMODE_NOT_TESTED 0x00
1590 #define CDRW_FEATURE_OPC 0x00000001 // use OPC regardless of OPCn in DISK_INFO
1591 #define CDRW_FEATURE_EVENT 0x00000002
1592 #define CDRW_FEATURE_GET_CFG 0x00000004
1593 #define CDRW_FEATURE_NO_LOCK_REP 0x00000008 // device doesn't report tray lock state
1594 #define CDRW_FEATURE_SYNC_ON_WRITE 0x00000010 // device preferes Sync Cache after each Write
1595 #define CDRW_FEATURE_BAD_RW_SEEK 0x00000020 // seek error occures with status Illegal Sector Mode For This Track
1596 // on old CdRoms when they attempt to read outer sectors on FP formatted
1597 // disk. Workaround: perform sequence of seeks from lower address
1598 // to required with step about 0x800 blocks.
1599 #define CDRW_FEATURE_FP_ADDRESSING_PROBLEM 0x00000040
1600 #define CDRW_FEATURE_MRW_ADDRESSING_PROBLEM 0x00000080
1601 #define CDRW_FEATURE_FORCE_SYNC_ON_WRITE 0x00000100 // device requires Sync Cache after each Write
1602 #define CDRW_FEATURE_BAD_DVD_LAST_LBA 0x00000200 // device cannot determile LastLba on not closed DVD disks
1603 #define CDRW_FEATURE_FULL_BLANK_ON_FORMAT 0x00000400 // device cannot format disk until it is full-blanked
1604 #define CDRW_FEATURE_STREAMING 0x00000800 // device supports streaming read/write
1605 #define CDRW_FEATURE_FORCE_SYNC_BEFORE_READ 0x00001000 // device requires Sync Cache on Write -> Read state transition
1606 #define CDRW_FEATURE_CHANGER 0x80000000
1608 #define DEV_CAP_GET_PROFILE(arr, pf) \
1609 (((pf) > PFNUM_Max) ? 0 : (((arr)[(pf)/32] >> (pf)%32) & 1))
1611 #define CDRW_DEV_CAPABILITY_CDROM ((ULONG)1 << CdMediaClass_CDROM )
1612 #define CDRW_DEV_CAPABILITY_CDR ((ULONG)1 << CdMediaClass_CDR )
1613 #define CDRW_DEV_CAPABILITY_CDRW ((ULONG)1 << CdMediaClass_CDRW )
1614 #define CDRW_DEV_CAPABILITY_DVDROM ((ULONG)1 << CdMediaClass_DVDROM )
1615 #define CDRW_DEV_CAPABILITY_DVDRAM ((ULONG)1 << CdMediaClass_DVDRAM )
1616 #define CDRW_DEV_CAPABILITY_DVDR ((ULONG)1 << CdMediaClass_DVDR )
1617 #define CDRW_DEV_CAPABILITY_DVDRW ((ULONG)1 << CdMediaClass_DVDRW )
1618 #define CDRW_DEV_CAPABILITY_DVDpR ((ULONG)1 << CdMediaClass_DVDpR )
1619 #define CDRW_DEV_CAPABILITY_DVDpRW ((ULONG)1 << CdMediaClass_DVDpRW )
1620 #define CDRW_DEV_CAPABILITY_DDCDROM ((ULONG)1 << CdMediaClass_DDCDROM)
1621 #define CDRW_DEV_CAPABILITY_DDCDR ((ULONG)1 << CdMediaClass_DDCDR )
1622 #define CDRW_DEV_CAPABILITY_DDCDRW ((ULONG)1 << CdMediaClass_DDCDRW )
1624 //**********************************************************************************************
1626 typedef ULONG CHECK_VERIFY_USER_OUT
, *PCHECK_VERIFY_USER_OUT
;
1628 //**********************************************************************************************
1631 #ifndef EventStat_Class_OpChange
1632 #define EventStat_Class_OpChange 0x01
1633 #define EventStat_Class_PM 0x02
1634 #define EventStat_Class_Media 0x04
1635 #define EventStat_Class_DevBusy 0x06
1636 #endif // end EventStat_Class_OpChange
1639 typedef struct _GET_EVENT_USER_IN
{
1642 } GET_EVENT_USER_IN
, *PGET_EVENT_USER_IN
;
1644 typedef union _GET_EVENT_USER_OUT
{
1645 EVENT_STAT_OPERATIONAL_BLOCK Operational
;
1646 EVENT_STAT_PM_BLOCK PowerManagement
;
1647 EVENT_STAT_EXT_REQ_BLOCK ExternalReq
;
1648 EVENT_STAT_MEDIA_BLOCK MediaChange
;
1649 EVENT_STAT_DEV_BUSY_BLOCK DeviceBusy
;
1650 } GET_EVENT_USER_OUT
, *PGET_EVENT_USER_OUT
;
1652 //**********************************************************************************************
1655 //**********************************************************************************************
1657 typedef enum DVD_STRUCTURE_FORMAT
{
1658 DvdPhysicalDescriptor
,
1659 DvdCopyrightDescriptor
,
1660 DvdDiskKeyDescriptor
,
1662 DvdManufacturerDescriptor
,
1664 } DVD_STRUCTURE_FORMAT
, *PDVD_STRUCTURE_FORMAT
;
1666 typedef ULONG DVD_SESSION_ID
, *PDVD_SESSION_ID
;
1668 typedef struct _DVD_READ_STRUCTURE_USER_IN
{
1669 LARGE_INTEGER BlockByteOffset
;
1670 DVD_STRUCTURE_FORMAT Format
;
1671 DVD_SESSION_ID SessionId
;
1673 } DVD_READ_STRUCTURE_USER_IN
, *PDVD_READ_STRUCTURE_USER_IN
;
1675 typedef struct _DVD_READ_STRUCTURE_USER_OUT
{
1679 } DVD_READ_STRUCTURE_USER_OUT
, *PDVD_READ_STRUCTURE_USER_OUT
;
1681 //**********************************************************************************************
1683 typedef struct _DVD_START_SESSION_USER_OUT
{
1684 DVD_SESSION_ID SessionId
;
1685 } DVD_START_SESSION_USER_OUT
, *PDVD_START_SESSION_USER_OUT
;
1687 //**********************************************************************************************
1690 DvdChallengeKey
= 0x01,
1698 DvdInvalidateAGID
= 0x3f
1701 typedef struct _DVD_READ_KEY_USER_IN
{
1703 DVD_SESSION_ID SessionId
;
1704 DVD_KEY_TYPE KeyType
;
1708 LARGE_INTEGER TitleOffset
;
1710 // UCHAR KeyData[0];
1711 } DVD_READ_KEY_USER_IN
, *PDVD_READ_KEY_USER_IN
;
1713 typedef DVD_READ_KEY_USER_IN DVD_COPY_PROTECT_KEY
;
1714 typedef PDVD_READ_KEY_USER_IN PDVD_COPY_PROTECT_KEY
;
1716 typedef DVD_READ_KEY_USER_IN DVD_READ_KEY_USER_OUT
;
1717 typedef PDVD_READ_KEY_USER_IN PDVD_READ_KEY_USER_OUT
;
1719 //**********************************************************************************************
1721 typedef DVD_START_SESSION_USER_OUT DVD_END_SESSION_USER_IN
;
1722 typedef PDVD_START_SESSION_USER_OUT PDVD_END_SESSION_USER_IN
;
1724 //**********************************************************************************************
1726 typedef DVD_READ_KEY_USER_IN DVD_SEND_KEY_USER_IN
;
1727 typedef PDVD_READ_KEY_USER_IN PDVD_SEND_KEY_USER_IN
;
1729 typedef struct _DVD_SET_RPC_KEY
{
1730 UCHAR PreferredDriveRegionCode
;
1732 } DVD_SET_RPC_KEY
, * PDVD_SET_RPC_KEY
;
1734 //**********************************************************************************************
1736 // Predefined (Mt. Fuji) key sizes
1737 // Add sizeof(DVD_COPY_PROTECT_KEY) to get allocation size for
1738 // the full key structure
1740 #define DVD_CHALLENGE_KEY_LENGTH (12 + sizeof(DVD_COPY_PROTECT_KEY))
1741 #define DVD_BUS_KEY_LENGTH (8 + sizeof(DVD_COPY_PROTECT_KEY))
1742 #define DVD_TITLE_KEY_LENGTH (8 + sizeof(DVD_COPY_PROTECT_KEY))
1743 #define DVD_DISK_KEY_LENGTH (2048 + sizeof(DVD_COPY_PROTECT_KEY))
1744 #define DVD_RPC_KEY_LENGTH (sizeof(DVD_RPC_KEY) + sizeof(DVD_COPY_PROTECT_KEY))
1745 #define DVD_SET_RPC_KEY_LENGTH (sizeof(DVD_SET_RPC_KEY) + sizeof(DVD_COPY_PROTECT_KEY))
1746 #define DVD_ASF_LENGTH (sizeof(DVD_ASF) + sizeof(DVD_COPY_PROTECT_KEY))
1748 //**********************************************************************************************
1750 typedef struct _DISK_VERIFY_USER_IN
{
1751 LONGLONG StartingOffset
;
1753 } DISK_VERIFY_USER_IN
, *PDISK_VERIFY_USER_IN
;
1755 //**********************************************************************************************
1757 typedef struct _CDROM_DISK_DATA_USER_OUT
{
1761 } CDROM_DISK_DATA_USER_OUT
, *PCDROM_DISK_DATA_USER_OUT
;
1763 #define CDROM_DISK_AUDIO_TRACK (0x00000001)
1764 #define CDROM_DISK_DATA_TRACK (0x00000002)
1766 //**********************************************************************************************
1768 typedef struct _CDRW_RESET_DRIVER_USER_IN
{
1770 BOOLEAN Reserved
[3];
1772 } CDRW_RESET_DRIVER_USER_IN
, *PCDRW_RESET_DRIVER_USER_IN
;
1774 //**********************************************************************************************
1776 typedef struct _MediaTrackMap
{
1787 #define TrackMap_AllowCopyBit_variated 0x01
1788 #define TrackMap_CopyBit_variated 0x02
1789 #define TrackMap_Try_variation 0x04
1790 #define TrackMap_Use_variation 0x08
1791 #define TrackMap_FixFPAddressing 0x10
1792 #define TrackMap_FixMRWAddressing 0x20
1794 // are used only if FixFPAddressing is enabled
1795 ULONG TrackFPOffset
;
1796 ULONG PacketFPOffset
;
1798 } MediaTrackMap
, *PMediaTrackMap
;
1800 typedef struct _GET_DISK_LAYOUT_USER_OUT
{
1803 ULONG DiskLayoutFlags
;
1804 // Number of last session
1806 ULONG FirstTrackNum
;
1808 // First & Last LBA of the last session
1811 // Last writable LBA
1812 ULONG LastPossibleLBA
;
1813 // First writable LBA
1816 struct _MediaTrackMap
* TrackMap
;
1819 ULONG WriteBlockSize
;
1825 ULONG PhSerialNumber
;
1829 } GET_DISK_LAYOUT_USER_OUT
, *PGET_DISK_LAYOUT_USER_OUT
;
1831 #define DiskLayout_FLAGS_TRACKMAP (0x00002000)
1832 #define DiskLayout_FLAGS_RAW_DISK (0x00040000)
1834 //**********************************************************************************************
1836 // Error codes returned by IOCTL_CDRW_GEL_LAST_ERROR
1838 //#ifndef CDRW_ERR_NO_ERROR
1840 #define CDRW_ERR_NO_ERROR 0x0000
1841 #define CDRW_ERR_WRITE_IN_PROGRESS_BUSY 0x0001
1842 #define CDRW_ERR_FORMAT_IN_PROGRESS_BUSY 0x0002
1843 #define CDRW_ERR_CLOSE_IN_PROGRESS_BUSY 0x0003
1844 #define CDRW_ERR_BAD_ADDR_ALIGNMENT 0x0004
1845 #define CDRW_ERR_BAD_SIZE_ALIGNMENT 0x0005
1846 #define CDRW_ERR_STREAM_LOSS 0x0006
1847 #define CDRW_ERR_TEST_WRITE_UNSUPPORTED 0x0007
1848 #define CDRW_ERR_UNHANDLED_WRITE_TYPE 0x0008
1849 #define CDRW_ERR_CANT_ALLOC_TMP_BUFFER 0x0009
1850 #define CDRW_ERR_BUFFER_IS_FULL 0x000a
1851 #define CDRW_ERR_VERIFY_REQUIRED 0x000b
1852 #define CDRW_ERR_PLAY_IN_PROGRESS_BUSY 0x000c
1853 #define CDRW_ERR_TOO_LONG_BLOCK_TO_TRANSFER 0x000d
1854 #define CDRW_ERR_INWALID_WRITE_PARAMETERS 0x000e // use SET_WRITE_PARAMS properly
1855 #define CDRW_ERR_INVALID_IO_BUFFER_ADDRESS 0x000f
1856 #define CDRW_ERR_INVALID_INPUT_BUFFER_SIZE 0x0010
1857 #define CDRW_ERR_INVALID_OUTPUT_BUFFER_SIZE 0x0011
1858 #define CDRW_ERR_UNRECOGNIZED_MEDIA 0x0012
1859 #define CDRW_ERR_MEDIA_WRITE_PROTECTED 0x0013
1860 #define CDRW_ERR_NO_MEDIA 0x0014
1861 #define CDRW_ERR_TRAY_OPEN 0x0015
1862 #define CDRW_ERR_MEDIA_NOT_APPENDABLE 0x0016
1863 #define CDRW_ERR_INVALID_LBA 0x0017
1864 #define CDRW_ERR_INVALID_FIXED_PACKET_SIZE 0x0018
1865 #define CDRW_ERR_INVALID_WRITE_TYPE_FOR_MEDIA 0x0019
1866 #define CDRW_ERR_CUE_SHEET_REQUIRED 0x001a // you sould send cue sheet before SAO
1867 #define CDRW_ERR_CANT_DEINIT_IN_CLASS_MODE 0x001b // there is no underlayered driver
1868 #define CDRW_ERR_INVALID_FORMAT_UNIT_SETTINGS 0x001c // use SET_WRITE_PARAMS properly before
1869 // calling FormatUnit
1870 #define CDRW_ERR_UNHANDLED_FORMAT_UNIT_MODE 0x001d // this mode is not supported by
1871 // Workaround module
1872 #define CDRW_ERR_CANT_READ_BUFFER_CAPACITY 0x001e
1873 #define CDRW_ERR_DEVICE_WRITE_ERROR 0x001f
1874 #define CDRW_ERR_UNHANDLED_IOCTL 0x0020
1875 #define CDRW_ERR_UNHANDLED_FORMAT_WORKAROUND_MODE 0x0021 // check your Registry settings
1876 #define CDRW_ERR_DOOR_LOCKED_BUSY 0x0022
1877 #define CDRW_ERR_MAGIC_WORD_REQUIRED 0x0023
1878 #define CDRW_ERR_INVALID_SECTOR_MODE 0x0024
1879 #define CDRW_ERR_DVD_LICENSE_VIOLATION 0x0025
1880 #define CDRW_ERR_INVALID_DVD_KEY_TYPE 0x0026
1881 #define CDRW_ERR_INVALID_DVD_REGION_CODE 0x0027
1882 #define CDRW_ERR_PAGE_IS_NOT_SUPPORTED 0x0028
1883 #define CDRW_ERR_STD_FORMAT_REQUIRED 0x0029
1884 //#define CDRW_ERR_ 0x00
1885 //#define CDRW_ERR_ 0x00
1886 //#define CDRW_ERR_ 0x00
1887 //#define CDRW_ERR_ 0x00
1892 #define REG_TIMEOUT_NAME_USER ("TimeOutValue")
1893 #define REG_AUTORUN_NAME_USER ("Autorun")
1894 #define REG_LOADMODE_NAME_USER ("LoadMode")
1896 #define LOADMODE_CDRW_ONLY 0
1897 #define LOADMODE_ALWAYS 1
1898 #define LOADMODE_NEVER 2
1900 #define REG_PACKETSIZE_NAME_USER ("PacketSize") // Initial packet size (FP)
1902 #define PACKETSIZE_STREAM 0
1903 #define PACKETSIZE_UDF 32
1905 #ifndef WITHOUT_FORMATTER
1906 #define REG_FORMATUNIT_NAME_USER ("FormatUnitMode") // FORMAT_UNIT workaround mode
1908 #define FORMATUNIT_FP 0 // simulation via FP
1909 #define FORMATUNIT_STD 1
1910 #endif //WITHOUT_FORMATTER
1912 #define REG_R_SPLIT_SIZE_NAME_USER ("ReadSplitSize") // Read request spliting limit
1913 #define REG_W_SPLIT_SIZE_NAME_USER ("WriteSplitSize") // Write request spliting limit
1915 #define REG_CDR_SIMULATION_NAME_USER ("CdRSimulationMode") // Influence on READ_DISC_INFO
1916 // capability check on startup
1917 #define CDR_SIMULATION_CDROM 0
1918 #define CDR_SIMULATION_ALWAYS 1
1919 #define CDR_SIMULATION_NEVER 2
1921 #define REG_SPEEDMODE_NAME_USER ("SpeedDetectionMode")
1923 #define SPEEDMODE_ASSUME_OK 0
1924 #define SPEEDMODE_REREAD 1
1926 //#define REG_MAX_WRITE_SPEED_R_NAME_USER ("MaxWriteSpeedCDR")
1927 //#define REG_MAX_WRITE_SPEED_RW_NAME_USER ("MaxWriteSpeedCDRW")
1929 //#define REG_SIMULATION_TABLE_NAME_USER ("WModeSimulationTable") // via Raw
1931 #define REG_WMODE_SIMULATION_NAME_USER ("WModeSimulation") // via Raw
1932 #define WMODE_SIMULATION_ON 1
1933 #define WMODE_SIMULATION_OFF 0
1934 #define WMODE_ASSUME_OK 2
1936 #define REG_SYNC_PACKETS_NAME_USER ("SyncPacketsMode")
1937 #define SYNC_PACKETS_ALWAYS 0
1938 #define SYNC_PACKETS_RESET_DRV 1
1939 #define SYNC_PACKETS_NEVER 2
1940 #define SYNC_PACKETS_FP 3
1941 #define SYNC_PACKETS_DISABLED 4
1942 #define SYNC_PACKETS_VP_ONLY 5
1943 #define SYNC_PACKETS_BY_W_THROUGH 6
1945 #define REG_ASSURE_READY_NAME_USER ("AssureReadiness")
1946 #define ASSURE_READY_TEST_UNIT 0
1947 #define ASSURE_READY_DELAY_100 1
1948 #define ASSURE_READY_NONE 2
1950 #define REG_WAIT_PACKETS_NAME_USER ("WaitPackets")
1951 #define WAIT_PACKETS_ALWAYS 0
1952 #define WAIT_PACKETS_STREAM 1
1954 #define REG_BAD_RW_SEEK_NAME_USER ("BadRWSeek")
1956 #define REG_ALLOW_PACKET_ON_CDR_NAME_USER ("AllowPacketOnCdR")
1957 #define ALLOW_PACKET_ON_CDR_OFF 0
1958 #define ALLOW_PACKET_ON_CDR_ON 1
1960 #define REG_MAX_READY_RETRY_NAME_USER ("MaxReadyRetry")
1962 #define REG_BAD_DVD_READ_TRACK_INFO_NAME_USER ("DvdBadReadTrackInfo")
1963 #define REG_BAD_DVD_READ_DISC_INFO_NAME_USER ("DvdBadReadDiscInfo")
1964 #define REG_BAD_DVD_READ_CAPACITY_NAME_USER ("DvdBadReadCapacity")
1965 #define REG_BAD_DVD_LAST_LBA_NAME_USER ("DvdBadLastLba")
1966 #define REG_BAD_DVD_LAST_LBA_NAME_USER ("DvdBadLastLba")
1968 #define REG_FULL_BLANK_ON_FORMAT_NAME_USER ("FullEraseBeforeFormat")
1970 #define DEFAULT_LAST_LBA_FP_CD 276159
1971 #define DEFAULT_LAST_LBA_DVD 0x23053f
1972 #define DEFAULT_LAST_LBA_BD (25*1000*1000/2-1)
1977 #endif //__CDRW_PUBLIC_H__