[USETUP]
[reactos.git] / reactos / drivers / filesystems / udfs / CDRW / cdrw_usr.h
1 ////////////////////////////////////////////////////////////////////
2 // Copyright (C) Alexander Telyatnikov, Ivan Keliukh, Yegor Anchishkin, SKIF Software, 1999-2013. Kiev, Ukraine
3 // All rights reserved
4 // This file was released under the GPLv2 on June 2015.
5 ////////////////////////////////////////////////////////////////////
6 /*
7
8 Module Name:
9
10 cdrw_usr.h
11
12 Abstract:
13
14 This file defines the interface between CD-Writer's driver & user
15 applications.
16
17 Environment:
18
19 NT kernel mode or Win32 app
20 */
21
22 #ifndef __CDRW_PUBLIC_H__
23 #define __CDRW_PUBLIC_H__
24
25 #define CDRW_SIGNATURE_v1 "ALWA CD-R/W v1"
26
27 //#define CDRW_RESTRICT_ACCESS // require W-acces rights for some IOCTLs
28
29 #include "cdrw_hw.h"
30 //#include "ntdddisk.h"
31
32 #ifndef CTL_CODE
33 #pragma pack(push, 8)
34 #include "winioctl.h"
35 #pragma pack(pop)
36 #endif
37
38 #if defined(CDRW_EXPORTS) || defined(FileSys_EXPORTS)
39 #include "mountmgr.h"
40 #endif
41
42 #ifndef FILE_DEVICE_SECURE_OPEN
43 #define FILE_DEVICE_SECURE_OPEN 0x00000100
44 #endif //FILE_DEVICE_SECURE_OPEN
45
46 #pragma pack(push, 1)
47
48 #ifndef IRP_MJ_PNP
49 #define IRP_MJ_PNP IRP_MJ_PNP_POWER // Obsolete....
50 #endif //IRP_MJ_PNP
51
52 #ifndef FILE_DEVICE_CDRW
53 #define FILE_DEVICE_CDRW 0x00000999
54 #endif
55
56 #ifndef FILE_DEVICE_CD_ROM
57 #define FILE_DEVICE_CD_ROM 0x00000002
58 #endif //FILE_DEVICE_CD_ROM
59
60 #ifndef IOCTL_CDROM_BASE
61 #define IOCTL_CDROM_BASE FILE_DEVICE_CD_ROM
62 #endif //IOCTL_CDROM_BASE
63
64 #ifndef FILE_DEVICE_DVD
65 #define FILE_DEVICE_DVD 0x00000033
66 #endif //FILE_DEVICE_DVD
67
68 #ifndef IOCTL_DVD_BASE
69 #define IOCTL_DVD_BASE FILE_DEVICE_DVD
70 #endif //IOCTL_DVD_BASE
71
72 #ifndef FILE_DEVICE_DISK
73 #define FILE_DEVICE_DISK 0x00000007
74 #endif //FILE_DEVICE_DISK
75
76 #ifndef IOCTL_DISK_BASE
77 #define IOCTL_DISK_BASE FILE_DEVICE_DISK
78 #endif //IOCTL_DISK_BASE
79
80 #ifndef IOCTL_CDROM_UNLOAD_DRIVER
81 #define IOCTL_CDROM_UNLOAD_DRIVER CTL_CODE(IOCTL_CDROM_BASE, 0x0402, METHOD_BUFFERED, FILE_READ_ACCESS)
82
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)
96
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)
104
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)
107
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)
110
111 #endif //IOCTL_CDROM_UNLOAD_DRIVER
112
113 #ifdef CDRW_RESTRICT_ACCESS
114
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 )
119
120 #else //CDRW_RESTRICT_ACCESS
121
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 )
126
127 #endif //CDRW_RESTRICT_ACCESS
128
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)
181
182 #define IOCTL_CDRW_UNLOAD_DRIVER IOCTL_CDROM_UNLOAD_DRIVER
183
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
197
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
205
206 #ifndef IOCTL_DVD_READ_STRUCTURE
207 #define IOCTL_DVD_READ_STRUCTURE CTL_CODE(IOCTL_DVD_BASE, 0x0450, METHOD_BUFFERED, FILE_READ_ACCESS)
208
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
217
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)
224
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
234
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
238
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)
241
242 typedef enum _STORAGE_MEDIA_TYPE {
243 //
244 // Following are defined in ntdddisk.h in the MEDIA_TYPE enum
245 //
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
269 //
270
271 DDS_4mm = 0x20, // Tape - DAT DDS1,2,... (all vendors)
272 MiniQic, // Tape - miniQIC Tape
273 Travan, // Tape - Travan TR-1,2,3,...
274 QIC, // Tape - QIC
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;
328
329 #endif //IOCTL_STORAGE_GET_MEDIA_TYPES_EX
330
331
332 //**********************************************************************************************
333
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;
338
339 typedef struct _SET_CD_SPEED_EX_USER_IN {
340 ULONG ReadSpeed; // Kbyte/sec 176 = 1X
341 ULONG WriteSpeed; // Kbyte/sec
342 UCHAR RotCtrl;
343 UCHAR Reserved[3];
344 } SET_CD_SPEED_EX_USER_IN, *PSET_CD_SPEED_EX_USER_IN;
345
346 //**********************************************************************************************
347
348 typedef struct _SET_STREAMING_USER_IN {
349 union {
350 UCHAR Flags;
351 struct {
352 UCHAR RA : 1; // Random Access
353 UCHAR Exact : 1;
354 UCHAR RDD : 1; // Restore Defaults
355 UCHAR WRC : 2;
356 UCHAR Reserved0 : 3;
357 } Fields;
358 } Options;
359
360 UCHAR Reserved1[3];
361
362 ULONG StartLBA;
363 ULONG EndLBA;
364
365 ULONG ReadSize; // KBytes
366 ULONG ReadTime; // ms
367
368 ULONG WriteSize; // KBytes
369 ULONG WriteTime; // ms
370 } SET_STREAMING_USER_IN, *PSET_STREAMING_USER_IN;
371
372 //**********************************************************************************************
373
374 /*
375 #ifndef SyncCache_RELADR
376 #define SyncCache_RELADR 0x01
377 #define SyncCache_Immed 0x02
378 #endif //SyncCache_RELADR
379 */
380
381 typedef struct _SYNC_CACHE_USER_IN {
382 union {
383 UCHAR Flags;
384 struct {
385 UCHAR RELADR : 1;
386 UCHAR Immed : 1;
387 UCHAR Reserved0 : 6;
388 } Fields;
389 } Byte1;
390 ULONG LBA;
391 USHORT NumOfBlocks;
392 } SYNC_CACHE_USER_IN, *PSYNC_CACHE_USER_IN;
393
394 //**********************************************************************************************
395
396 typedef struct _BUFFER_CAPACITY_BLOCK_USER_OUT {
397 UCHAR Reserved0[4];
398 ULONG BufferLength;
399 ULONG BlankBufferLength;
400 ULONG WriteStatus;
401 BOOLEAN LostStreaming;
402 ULONG MaximumPhysicalPages;
403 ULONG MaximumTransferLength;
404 ULONG ActualMaximumTransferLength;
405 } BUFFER_CAPACITY_BLOCK_USER_OUT, *PBUFFER_CAPACITY_BLOCK_USER_OUT;
406
407 //**********************************************************************************************
408
409 typedef struct _TRACK_INFO_BLOCK_USER_OUT {
410 USHORT DataLength;
411 UCHAR _TrackNum;
412 UCHAR _SesNum;
413 UCHAR Reserved0;
414
415 union {
416 UCHAR Flags;
417 struct {
418 UCHAR TrackMode : 4;
419 UCHAR Copy : 1;
420 UCHAR Damage : 1;
421 UCHAR Reserved1 : 2;
422 } Fields;
423 } TrackParam;
424
425 union {
426 UCHAR Flags;
427 struct {
428 UCHAR DataMode : 4;
429 UCHAR FP : 1;
430 UCHAR Packet : 1;
431 UCHAR Blank : 1;
432 UCHAR RT : 1;
433 } Fields;
434 } DataParam;
435
436 UCHAR NWA_V;
437 ULONG TrackStartLBA;
438 ULONG NextWriteLBA;
439 ULONG FreeBlocks;
440 ULONG FixPacketSize;
441 ULONG TrackLength;
442
443 // MMC-3
444
445 ULONG LastRecordedAddr;
446 UCHAR _TrackNum2; // MSB
447 UCHAR _SesNum2; // MSB
448 UCHAR Reserved2[2];
449
450 // MMC-5
451
452 ULONG ReadCompatLBA;
453
454 // Additional
455
456 UCHAR TrackStartMSF[3];
457 UCHAR NextWriteMSF[3];
458 ULONG TrackNum;
459 ULONG SesNum;
460
461 } TRACK_INFO_BLOCK_USER_OUT, *PTRACK_INFO_BLOCK_USER_OUT;
462
463 //**********************************************************************************************
464
465 typedef struct _TRACK_INFO_BLOCK_USER_IN {
466 BOOLEAN Track;
467 ULONG LBA_TrkNum;
468 } TRACK_INFO_BLOCK_USER_IN, *PTRACK_INFO_BLOCK_USER_IN;
469
470 //**********************************************************************************************
471
472 typedef READ_CAPACITY_DATA READ_CAPACITY_USER_OUT;
473 typedef PREAD_CAPACITY_DATA PREAD_CAPACITY_USER_OUT;
474
475 //**********************************************************************************************
476
477 typedef struct _GET_SIGNATURE_USER_OUT {
478 ULONG MagicDword;
479 USHORT VersiomMajor ;
480 USHORT VersiomMinor ;
481 USHORT VersiomId ; // alfa/beta/...
482 USHORT Reserved;
483 UCHAR VendorId[32];
484 } GET_SIGNATURE_USER_OUT, *PGET_SIGNATURE_USER_OUT;
485
486 //**********************************************************************************************
487
488 /*
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
500 */
501
502 typedef struct _BLANK_MEDIA_USER_IN {
503 union {
504 UCHAR Flags;
505 ULONG Reserved;
506 struct {
507 UCHAR BlankType : 3;
508 UCHAR Reserved0 : 1;
509 UCHAR Immed : 1;
510 UCHAR Reserved1 : 3;
511 } Fields;
512 } Byte1;
513 ULONG StartAddr_TrkNum;
514 } BLANK_MEDIA_USER_IN, *PBLANK_MEDIA_USER_IN;
515
516 //**********************************************************************************************
517
518 typedef struct _RESERVE_TRACK_USER_IN {
519 ULONG Size;
520 } RESERVE_TRACK_USER_IN, *PRESERVE_TRACK_USER_IN;
521
522 #define RESERVE_TRACK_EX_SIZE 0x0
523 #define RESERVE_TRACK_EX_START_LBA 0x1
524 #define RESERVE_TRACK_EX_RMZ 0x2
525
526 typedef struct _RESERVE_TRACK_EX_USER_IN {
527 ULONG Flags;
528 union {
529 ULONG Size;
530 ULONG StartLBA;
531 };
532 } RESERVE_TRACK_EX_USER_IN, *PRESERVE_TRACK_EX_USER_IN;
533
534 //**********************************************************************************************
535
536 typedef struct _LL_WRITE_USER_IN {
537 union {
538 UCHAR Flags;
539 ULONG Reserved;
540 struct {
541 UCHAR RELADR : 1;
542 UCHAR Reserved0 : 2;
543 UCHAR FUA : 1;
544 UCHAR DPO : 1;
545 UCHAR Reserved1 : 3;
546 } Fields;
547 } Flags;
548 ULONG LBA;
549 USHORT NumOfBlocks;
550 UCHAR Reserved1[2];
551 } LL_WRITE_USER_IN, *PLL_WRITE_USER_IN;
552
553 //**********************************************************************************************
554
555 //#ifndef WITHOUT_FORMATTER
556
557 /*
558 #ifndef FormatDesc_Grow
559 #define FormatDesc_Grow 0x40
560 #define FormatDesc_Ses 0x80
561 #endif
562 */
563
564 #define FORMAT_UNIT_FORCE_STD_MODE 0x80000000
565 #define FORMAT_UNIT_FORCE_FULL_FMT 0x40000000
566 #define FORMAT_UNIT_RESTART_MRW 0x01000000
567
568 typedef struct _FORMAT_CDRW_PARAMETERS_USER_IN {
569 union {
570 UCHAR Flags;
571 ULONG FlagsEx;
572 struct {
573 UCHAR Reserved0: 6;
574 UCHAR Grow: 1;
575 UCHAR Ses: 1;
576 } Fields;
577 } Flags;
578 LONG BlockCount;
579 } FORMAT_CDRW_PARAMETERS_USER_IN, *PFORMAT_CDRW_PARAMETERS_USER_IN;
580
581 //#endif //WITHOUT_FORMATTER
582
583 //**********************************************************************************************
584
585 /*
586 #ifndef CloseTrkSes_Immed
587 #define CloseTrkSes_Immed 0x01
588
589 #define CloseTrkSes_Trk 0x01
590 #define CloseTrkSes_Ses 0x02
591
592 #define CloseTrkSes_LastTrkSes 0xff
593 #endif
594 */
595
596 typedef struct _CLOSE_TRK_SES_USER_IN {
597 union {
598 UCHAR Flags;
599 struct {
600 UCHAR Immed : 1;
601 UCHAR Reserved0 : 7;
602 } Fields;
603 } Byte1;
604 union {
605 UCHAR Flags;
606 struct {
607 UCHAR Track : 1;
608 UCHAR Session : 1;
609 UCHAR Reserved0 : 6;
610 } Fields;
611 } Byte2;
612 UCHAR TrackNum;
613 } CLOSE_TRK_SES_USER_IN, *PCLOSE_TRK_SES_USER_IN;
614
615 //**********************************************************************************************
616
617 typedef struct _PREVENT_MEDIA_REMOVAL_USER_IN {
618 BOOLEAN PreventMediaRemoval;
619 } PREVENT_MEDIA_REMOVAL_USER_IN, *PPREVENT_MEDIA_REMOVAL_USER_IN;
620
621 //**********************************************************************************************
622
623 typedef struct _SET_RANDOM_ACCESS_USER_IN {
624 BOOLEAN RandomAccessMode;
625 } SET_RANDOM_ACCESS_USER_IN, *PSET_RANDOM_ACCESS_USER_IN;
626
627 //**********************************************************************************************
628
629 /*
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
635
636 #define DiscInfo_Ses_Mask 0x0C
637 #define DiscInfo_Ses_Empty 0x00
638 #define DiscInfo_Ses_Incomplete 0x04
639 #define DiscInfo_Ses_Complete 0x0C
640
641 #define DiscInfo_Disk_Erasable 0x10
642
643 #define DiscInfo_URU 0x10
644 #define DiscInfo_DBC_V 0x20
645 #define DiscInfo_DID_V 0x40
646
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 ;)
651
652 #endif
653 */
654
655 typedef struct _DISC_STATUS_INFO_USER_OUT {
656 UCHAR ErrorCode;
657 UCHAR SenseKey;
658 UCHAR AdditionalSenseCode;
659 UCHAR AdditionalSenseCodeQualifier;
660 UCHAR SrbStatus;
661 BOOLEAN RandomAccessMode;
662 BOOLEAN CUE_sent;
663 UCHAR Flags;
664 LARGE_INTEGER MediaChangeTime;
665
666 UCHAR LastSesLeadInMSF[4];
667 UCHAR LastSesLeadOutMSF[4];
668
669 ULONG NumOfSes;
670 ULONG FirstTrackNumLastSes;
671 ULONG LastTrackNumLastSes;
672 ULONG Reserved1; // this is used to align data
673
674 } DISC_STATUS_INFO_USER_OUT, *PDISC_STATUS_INFO_USER_OUT;
675
676 #define DiscStatus_Formattable 0x01
677
678 typedef struct _DISC_INFO_BLOCK_USER_OUT { //
679
680 DISC_STATUS_INFO_USER_OUT Status;
681
682 USHORT DataLength;
683
684 union {
685 UCHAR Flags;
686 struct {
687 UCHAR DiscStat : 2;
688 UCHAR LastSesStat : 2;
689 UCHAR Erasable : 1;
690 UCHAR Reserved0: 3;
691 } Fields;
692 } DiscStat;
693
694 UCHAR FirstTrackNum;
695 UCHAR NumOfSes;
696 UCHAR FirstTrackNumLastSes;
697 UCHAR LastTrackNumLastSes;
698
699 union {
700 UCHAR Flags;
701 struct {
702 UCHAR Reserved1: 5;
703 UCHAR URU : 1;
704 UCHAR DBC_V : 1; // 0
705 UCHAR DID_V : 1;
706 } Fields;
707 } Flags;
708
709 UCHAR DiskType;
710 UCHAR NumOfSes2; // MSB MMC-3
711 UCHAR FirstTrackNumLastSes2; // MSB MMC-3
712 UCHAR LastTrackNumLastSes2; // MSB MMC-3
713 UCHAR DiskId [4];
714 ULONG LastSesLeadInLBA;
715 ULONG LastSesLeadOutLBA;
716 UCHAR DiskBarCode [8];
717 UCHAR Reserved3;
718 UCHAR OPCNum;
719 } DISC_INFO_BLOCK_USER_OUT, *PDISC_INFO_BLOCK_USER_OUT;
720
721 //**********************************************************************************************
722
723 typedef struct _TEST_UNIT_READY_USER_IN {
724 ULONG MaxReadyRetry;
725 } TEST_UNIT_READY_USER_IN, *PTEST_UNIT_READY_USER_IN;
726
727 typedef struct _TEST_UNIT_READY_USER_OUT {
728 UCHAR ErrorCode;
729 UCHAR SenseKey;
730 UCHAR AdditionalSenseCode;
731 UCHAR AdditionalSenseCodeQualifier;
732 } TEST_UNIT_READY_USER_OUT, *PTEST_UNIT_READY_USER_OUT;
733
734 //**********************************************************************************************
735
736 /*
737 #ifndef MediaType_Unknown
738
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
748
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
758
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
768
769 #define MediaType_UnknownSize_Unknown 0x30
770
771 #define MediaType_NoDiscPresent 0x70
772 #define MediaType_DoorOpen 0x71
773
774 #endif
775 */
776
777 typedef struct _GET_MEDIA_TYPE_USER_OUT {
778 UCHAR MediaType;
779 } GET_MEDIA_TYPE_USER_OUT, *PGET_MEDIA_TYPE_USER_OUT;
780
781 typedef struct _GET_MEDIA_TYPE_EX_USER_OUT {
782 UCHAR OldStyleMediaType; // see GET_MEDIA_TYPE_USER_OUT
783 UCHAR MediaClass;
784 UCHAR MediaSize;
785 UCHAR DataType;
786 UCHAR MediaClassEx;
787 UCHAR DataClassEx;
788 UCHAR CapFlags;
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;
792
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
815
816 #define CdMediaClass_Max CdMediaClass_HD_DVDRW
817
818 #define CdMediaSize_Unknown 0
819 #define CdMediaSize_120mm 1
820 #define CdMediaSize_80mm 2
821
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
828
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
836
837 #define CdDataClassEx_ROM 0x00
838 #define CdDataClassEx_R 0x01
839 #define CdDataClassEx_RW 0x02
840 #define CdDataClassEx_Unknown 0xff
841
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
848
849 #define CdrwMediaClassEx_IsRAM(MediaClassEx) ( \
850 ((MediaClassEx) == CdMediaClass_DVDRAM) || \
851 ((MediaClassEx) == CdMediaClass_BDRE) || \
852 ((MediaClassEx) == CdMediaClass_HD_DVDRAM) )
853
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 \
861 )
862
863 //**********************************************************************************************
864
865 /*
866 #ifndef MAX_PAGE_SIZE
867 #define MAX_PAGE_SIZE 0x100
868 #endif
869 */
870
871 typedef struct _MODE_SENSE_USER_IN {
872 union {
873 UCHAR Byte;
874 struct {
875 UCHAR PageCode : 6;
876 UCHAR Reserved0: 1;
877 UCHAR PageSavable : 1;
878 } Fields;
879 } PageCode;
880 } MODE_SENSE_USER_IN, *PMODE_SENSE_USER_IN;
881
882 typedef struct _MODE_SENSE_USER_OUT {
883 MODE_PARAMETER_HEADER Header;
884 } MODE_SENSE_USER_OUT, *PMODE_SENSE_USER_OUT;
885
886 //**********************************************************************************************
887
888 typedef struct _MODE_SELECT_USER_IN {
889 MODE_PARAMETER_HEADER Header;
890 } MODE_SELECT_USER_IN, *PMODE_SELECT_USER_IN;
891
892 //**********************************************************************************************
893
894 typedef struct _MODE_WRITE_PARAMS_PAGE_USER { // 0x05
895 UCHAR PageCode : 6;
896 UCHAR Reserved0: 1;
897 UCHAR PageSavable : 1;
898
899 UCHAR PageLength; // 0x32
900
901 /*
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
911 #endif
912 */
913
914 union {
915 UCHAR Flags;
916 struct {
917 UCHAR WriteType: 4; // 1
918 UCHAR TestWrite: 1;
919 UCHAR LS_V: 1;
920 UCHAR BUFF: 1;
921 UCHAR Reserved1: 1;
922 } Fields;
923 } Byte2;
924
925 /*
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
941 #endif
942 */
943
944 union {
945 UCHAR Flags;
946 struct {
947 UCHAR TrackMode: 4; // 4
948 UCHAR Copy : 1; // 0
949 UCHAR FP : 1; // 0
950 UCHAR Multisession: 2; // 11
951 } Fields;
952 } Byte3;
953
954 /*
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
967 #endif
968 */
969
970 union {
971 UCHAR Flags;
972 struct {
973 UCHAR DataBlockType: 4; // 8
974 UCHAR Reserved2: 4;
975 } Fields;
976 } Byte4;
977
978 UCHAR LinkSize;
979 UCHAR Reserved3;
980
981 union {
982 UCHAR Flags;
983 struct {
984 UCHAR HostAppCode : 6; // 0
985 UCHAR Reserved4: 2;
986 } Fields;
987 } Byte7;
988
989 /*
990 #ifndef WParam_SesFmt_CdRom
991 #define WParam_SesFmt_CdRom 0x00
992 #define WParam_SesFmt_CdI 0x10
993 #define WParam_SesFmt_CdRomXa 0x20
994 #endif
995 */
996
997 UCHAR SesFmt; // 0
998 UCHAR Reserved5;
999 ULONG PacketSize; // 0
1000 USHORT AudioPause; // 150
1001
1002 UCHAR Reserved6: 7;
1003 UCHAR MCVAL : 1;
1004
1005 UCHAR N[13];
1006 UCHAR Zero;
1007 UCHAR AFRAME;
1008
1009 UCHAR Reserved7: 7;
1010 UCHAR TCVAL : 1;
1011
1012 UCHAR I[12];
1013 UCHAR Zero_2;
1014 UCHAR AFRAME_2;
1015 UCHAR Reserved8;
1016
1017 struct {
1018 union {
1019 UCHAR MSF[3];
1020 struct _SubHdrParams1 {
1021 UCHAR FileNum;
1022 UCHAR ChannelNum;
1023
1024 /*
1025 #define WParam_SubHdr_SubMode0 0x00
1026 #define WParam_SubHdr_SubMode1 0x08
1027 */
1028
1029 UCHAR SubMode;
1030 } Params1;
1031 } Params;
1032
1033 /*
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
1047 */
1048
1049 union {
1050 UCHAR Flags;
1051 struct {
1052 UCHAR Mode : 2;
1053 UCHAR Reserved : 3;
1054 UCHAR Format : 3;
1055 } Fields;
1056 } Mode;
1057 } SubHeader;
1058 } MODE_WRITE_PARAMS_PAGE_USER, *PMODE_WRITE_PARAMS_PAGE_USER;
1059
1060 typedef MODE_WRITE_PARAMS_PAGE_USER GET_WRITE_MODE_USER_OUT;
1061 typedef PMODE_WRITE_PARAMS_PAGE_USER PGET_WRITE_MODE_USER_OUT;
1062
1063 typedef MODE_WRITE_PARAMS_PAGE_USER SET_WRITE_MODE_USER_IN;
1064 typedef PMODE_WRITE_PARAMS_PAGE_USER PSET_WRITE_MODE_USER_IN;
1065
1066 //**********************************************************************************************
1067
1068 #ifndef WITHOUT_FORMATTER
1069
1070 typedef MODE_MRW_PAGE GET_MRW_MODE_USER_OUT;
1071 typedef PMODE_MRW_PAGE PGET_MRW_MODE_USER_OUT;
1072
1073 typedef MODE_MRW_PAGE SET_MRW_MODE_USER_IN;
1074 typedef PMODE_MRW_PAGE PSET_MRW_MODE_USER_IN;
1075
1076 #endif //WITHOUT_FORMATTER
1077
1078 //**********************************************************************************************
1079
1080 typedef struct _SET_READ_AHEAD_USER_IN {
1081 ULONG TriggerLBA;
1082 ULONG ReadAheadLBA;
1083 } SET_READ_AHEAD_USER_IN, *PSET_READ_AHEAD_USER_IN;
1084
1085 //**********************************************************************************************
1086
1087 typedef struct _GET_CAPABILITIES_USER_OUT {
1088 UCHAR PageCode : 6;
1089 UCHAR Reserved1 : 1;
1090 UCHAR PSBit : 1;
1091
1092 UCHAR PageLength;
1093
1094 /*
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
1103 */
1104
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
1108 UCHAR method2 : 1;
1109 UCHAR dvd_rom : 1;
1110 UCHAR dvd_r_read : 1;
1111 UCHAR dvd_ram_read : 1;
1112 UCHAR Reserved2 : 2;*/
1113
1114 /*
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
1122 */
1123
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;*/
1132
1133 /*
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
1143 */
1144
1145 UCHAR Capabilities0;
1146 /* UCHAR audio_play : 1;
1147 UCHAR composite : 1;
1148 UCHAR digport1 : 1;
1149 UCHAR digport2 : 1;
1150 UCHAR mode2_form1 : 1;
1151 UCHAR mode2_form2 : 1;
1152 UCHAR multisession : 1;
1153 UCHAR Reserved4 : 1;*/
1154
1155 /*
1156 #ifndef DevCap_cdda
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
1166 */
1167
1168 UCHAR Capabilities1;
1169 /* UCHAR cdda : 1;
1170 UCHAR cdda_accurate : 1;
1171 UCHAR rw_supported : 1;
1172 UCHAR rw_corr : 1;
1173 UCHAR c2_pointers : 1;
1174 UCHAR isrc : 1;
1175 UCHAR upc : 1;
1176 UCHAR Reserved5 : 1;*/
1177
1178 /*
1179 #ifndef DevCap_lock
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
1191 */
1192
1193 UCHAR Capabilities2;
1194 /* UCHAR lock : 1;
1195 UCHAR lock_state : 1;
1196 UCHAR prevent_jumper : 1;
1197 UCHAR eject : 1;
1198 UCHAR Reserved6 : 1;
1199 UCHAR mechtype : 3;*/
1200
1201 /*
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
1210 */
1211
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;*/
1218
1219 USHORT MaximumSpeedSupported;
1220 USHORT NumberVolumeLevels;
1221 USHORT BufferSize;
1222 USHORT CurrentSpeed;
1223
1224 UCHAR Reserved8;
1225
1226 UCHAR SpecialParameters0;
1227 /* UCHAR Reserved9 : 1;
1228 UCHAR BCK : 1;
1229 UCHAR RCK : 1;
1230 UCHAR LSBF : 1;
1231 UCHAR Length : 2;
1232 UCHAR Reserved10 : 2;*/
1233
1234 USHORT MaximumWriteSpeedSupported;
1235 USHORT CurrentWriteSpeed;
1236 USHORT CopyManagementRevision;
1237 UCHAR Reserved11[2];
1238
1239 } GET_CAPABILITIES_USER_OUT, *PGET_CAPABILITIES_USER_OUT;
1240
1241 typedef struct _GET_CAPABILITIES_3_USER_OUT {
1242
1243 UCHAR PageCode : 6;
1244 UCHAR Reserved1 : 1;
1245 UCHAR PSBit : 1;
1246
1247 UCHAR PageLength;
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;
1256 USHORT BufferSize;
1257 USHORT CurrentSpeed;
1258
1259 UCHAR Reserved8;
1260 UCHAR SpecialParameters0;
1261
1262 USHORT MaximumWriteSpeedSupported;
1263 USHORT CurrentWriteSpeed;
1264 USHORT CopyManagementRevision;
1265 UCHAR Reserved11[2];
1266
1267 // MMC 3
1268
1269 UCHAR Reserved12;
1270
1271 UCHAR SpecialParameters1;
1272 /* UCHAR RCS : 2; // rotation control selected
1273 UCHAR Reserved13 : 6; */
1274
1275 USHORT CurrentWriteSpeed3;
1276 USHORT LunWPerfDescriptorCount;
1277
1278 // LUN_WRITE_PERF_DESC_USER WritePerfDescs[0];
1279
1280 } GET_CAPABILITIES_3_USER_OUT, *PGET_CAPABILITIES_3_USER_OUT;
1281
1282 typedef struct _LUN_WRITE_PERF_DESC_USER {
1283 UCHAR Reserved;
1284
1285 #define LunWPerf_RotCtrl_Mask 0x07
1286 #define LunWPerf_RotCtrl_CLV 0x00
1287 #define LunWPerf_RotCtrl_CAV 0x01
1288
1289 UCHAR RotationControl;
1290 USHORT WriteSpeedSupported; // kbps
1291
1292 } LUN_WRITE_PERF_DESC_USER, *PLUN_WRITE_PERF_DESC_USER;
1293
1294 //**********************************************************************************************
1295
1296 typedef struct _SEND_OPC_INFO_USER_IN {
1297 USHORT Speed;
1298 UCHAR OpcValue[6];
1299 } SEND_OPC_INFO_USER_IN, *PSEND_OPC_INFO_USER_IN;
1300
1301 typedef struct _SEND_OPC_INFO_HEADER_USER_IN {
1302 BOOLEAN DoOpc;
1303 USHORT OpcBlocksNumber;
1304 } SEND_OPC_INFO_HEADER_USER_IN, *PSEND_OPC_INFO_HEADER_USER_IN;
1305
1306 //**********************************************************************************************
1307
1308 typedef struct _LL_READ_USER_IN {
1309
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)
1317
1318 UCHAR ExpectedBlkType;
1319
1320 ULONG LBA; // negative value (-1) indicates tha (H)MSF must be used
1321 ULONG NumOfBlocks;
1322
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
1341
1342 union {
1343 USHORT Flags;
1344 struct {
1345 UCHAR Reserved2 : 1;
1346 UCHAR ErrorFlags : 2;
1347 UCHAR IncludeEDC : 1;
1348 UCHAR IncludeUserData : 1;
1349 UCHAR HeaderCode : 2;
1350 UCHAR IncludeSyncData : 1;
1351
1352 UCHAR SubChannelSelection : 3;
1353 UCHAR Reserved3 : 5;
1354 } Fields;
1355 } Flags;
1356
1357 BOOLEAN UseMFS;
1358 CHAR Starting_MSF[3];
1359 CHAR Ending_MSF[3];
1360
1361 } LL_READ_USER_IN, *PLL_READ_USER_IN;
1362
1363 //**********************************************************************************************
1364
1365 typedef struct _GET_LAST_ERROR_USER_OUT {
1366
1367 UCHAR ErrorCode;
1368 UCHAR SenseKey;
1369 UCHAR AdditionalSenseCode;
1370 UCHAR AdditionalSenseCodeQualifier;
1371 UCHAR SrbStatus;
1372 ULONG LastError;
1373 BOOLEAN RandomAccessMode;
1374 LARGE_INTEGER MediaChangeTime;
1375 ULONG MediaChangeCount;
1376
1377 } GET_LAST_ERROR_USER_OUT, *PGET_LAST_ERROR_USER_OUT;
1378
1379 //**********************************************************************************************
1380
1381 typedef enum _TRACK_MODE_TYPE {
1382 YellowMode2,
1383 XAForm2,
1384 CDDA
1385 } TRACK_MODE_TYPE, *PTRACK_MODE_TYPE;
1386
1387 typedef struct _RAW_READ_USER_IN {
1388 LARGE_INTEGER DiskOffset;
1389 ULONG SectorCount;
1390 TRACK_MODE_TYPE TrackMode;
1391 } RAW_READ_USER_IN, *PRAW_READ_USER_IN;
1392
1393 //**********************************************************************************************
1394
1395 typedef struct _PLAY_AUDIO_MSF_USER_IN {
1396 UCHAR StartingMSF[3];
1397 UCHAR EndingMSF[3];
1398 } PLAY_AUDIO_MSF_USER_IN, *PPLAY_AUDIO_MSF_USER_IN;
1399
1400 //**********************************************************************************************
1401
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
1408
1409 typedef struct _SUB_Q_HEADER {
1410 UCHAR Reserved;
1411 UCHAR AudioStatus;
1412 UCHAR DataLength[2];
1413 } SUB_Q_HEADER, *PSUB_Q_HEADER;
1414
1415 typedef struct _SUB_Q_CURRENT_POSITION {
1416 SUB_Q_HEADER Header;
1417 UCHAR FormatCode;
1418 UCHAR Control : 4;
1419 UCHAR ADR : 4;
1420 UCHAR TrackNumber;
1421 UCHAR IndexNumber;
1422 UCHAR AbsoluteAddress[4];
1423 UCHAR TrackRelativeAddress[4];
1424 } SUB_Q_CURRENT_POSITION, *PSUB_Q_CURRENT_POSITION;
1425
1426 typedef struct _SUB_Q_MEDIA_CATALOG_NUMBER {
1427 SUB_Q_HEADER Header;
1428 UCHAR FormatCode;
1429 UCHAR Reserved[3];
1430 UCHAR Reserved1 : 7;
1431 UCHAR Mcval : 1;
1432 UCHAR MediaCatalog[15];
1433 } SUB_Q_MEDIA_CATALOG_NUMBER, *PSUB_Q_MEDIA_CATALOG_NUMBER;
1434
1435 typedef struct _SUB_Q_TRACK_ISRC {
1436 SUB_Q_HEADER Header;
1437 UCHAR FormatCode;
1438 UCHAR Reserved0;
1439 UCHAR Track;
1440 UCHAR Reserved1;
1441 UCHAR Reserved2 : 7;
1442 UCHAR Tcval : 1;
1443 UCHAR TrackIsrc[15];
1444 } SUB_Q_TRACK_ISRC, *PSUB_Q_TRACK_ISRC;
1445
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;
1451
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
1456
1457 typedef struct _SUB_Q_CHANNEL_DATA_USER_IN {
1458 UCHAR Format;
1459 UCHAR Track;
1460 } SUB_Q_CHANNEL_DATA_USER_IN, *PSUB_Q_CHANNEL_DATA_USER_IN;
1461
1462 //**********************************************************************************************
1463
1464 typedef struct _SEEK_AUDIO_MSF_USER_IN {
1465 UCHAR MSF[3];
1466 } SEEK_AUDIO_MSF_USER_IN, *PSEEK_AUDIO_MSF_USER_IN;
1467
1468 //**********************************************************************************************
1469
1470 typedef struct _AUDIO_CONTROL_USER_OUT {
1471 UCHAR LbaFormat;
1472 USHORT LogicalBlocksPerSecond;
1473 } AUDIO_CONTROL_USER_OUT, *PAUDIO_CONTROL_USER_OUT;
1474
1475 //**********************************************************************************************
1476
1477 typedef READ_TOC_TOC READ_TOC_USER_OUT;
1478 typedef PREAD_TOC_TOC PREAD_TOC_USER_OUT;
1479
1480 typedef READ_TOC_SES GET_LAST_SESSION_USER_OUT;
1481 typedef PREAD_TOC_SES PGET_LAST_SESSION_USER_OUT;
1482
1483 typedef READ_TOC_FULL_TOC READ_FULL_TOC_USER_OUT;
1484 typedef PREAD_TOC_FULL_TOC PREAD_FULL_TOC_USER_OUT;
1485
1486 typedef READ_TOC_FULL_TOC READ_PMA_USER_OUT;
1487 typedef PREAD_TOC_FULL_TOC PREAD_PMA_USER_OUT;
1488
1489 typedef READ_TOC_ATIP READ_ATIP_USER_OUT;
1490 typedef PREAD_TOC_ATIP PREAD_ATIP_USER_OUT;
1491
1492 typedef READ_TOC_CD_TEXT READ_CD_TEXT_USER_OUT;
1493 typedef PREAD_TOC_CD_TEXT PREAD_CD_TEXT_USER_OUT;
1494
1495 //**********************************************************************************************
1496
1497 typedef struct _VOLUME_CONTROL {
1498 UCHAR PortVolume[4];
1499 } VOLUME_CONTROL, *PVOLUME_CONTROL;
1500
1501 typedef VOLUME_CONTROL VOLUME_CONTROL_USER_IN;
1502 typedef PVOLUME_CONTROL PVOLUME_CONTROL_USER_IN;
1503
1504 typedef VOLUME_CONTROL VOLUME_CONTROL_USER_OUT;
1505 typedef PVOLUME_CONTROL PVOLUME_CONTROL_USER_OUT;
1506
1507 //**********************************************************************************************
1508
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;
1513
1514 typedef INIT_DEINIT_USER_IN INIT_DEINIT_USER_OUT;
1515 typedef PINIT_DEINIT_USER_IN PINIT_DEINIT_USER_OUT;
1516
1517 //**********************************************************************************************
1518
1519 typedef struct _READ_SESSION_INFO_USER_IN {
1520 BOOLEAN UseLBA;
1521 UCHAR Session;
1522 } READ_SESSION_INFO_USER_IN, *PREAD_SESSION_INFO_USER_IN;
1523
1524 typedef READ_TOC_SES READ_SESSION_INFO_USER_OUT;
1525 typedef PREAD_TOC_SES PREAD_SESSION_INFO_USER_OUT;
1526
1527 //**********************************************************************************************
1528
1529 typedef struct _READ_TOC_EX_USER_IN {
1530 BOOLEAN UseLBA;
1531 UCHAR Track;
1532 } READ_TOC_EX_USER_IN, *PREAD_TOC_EX_USER_IN;
1533
1534 typedef READ_TOC_SES READ_TOC_EX_USER_OUT;
1535 typedef PREAD_TOC_SES PREAD_TOC_EX_USER_OUT;
1536
1537 //**********************************************************************************************
1538
1539 #define DefSession_LastAvailable 0xff
1540
1541 typedef struct _SET_DEFAULT_SESSION_USER_IN {
1542 UCHAR LastSes;
1543 } SET_DEFAULT_SESSION_USER_IN, *PSET_DEFAULT_SESSION_USER_IN;
1544
1545 //**********************************************************************************************
1546
1547 typedef struct _NOTIFY_MEDIA_CHANGE_USER_IN {
1548 BOOLEAN Autorun;
1549 } NOTIFY_MEDIA_CHANGE_USER_IN, *PNOTIFY_MEDIA_CHANGE_USER_IN;
1550
1551 //**********************************************************************************************
1552
1553 typedef DISK_GEOMETRY GET_DRIVE_GEOMETRY_USER_OUT;
1554 typedef PDISK_GEOMETRY PGET_DRIVE_GEOMETRY_USER_OUT;
1555
1556 //**********************************************************************************************
1557
1558 typedef struct _GET_DEVICE_INFO_OLD_USER_OUT {
1559 UCHAR WModes [4][16];
1560 UCHAR VendorId[25];
1561 UCHAR SimulatedWModes [4][16];
1562 ULONG DeviceNumber;
1563 ULONG Features;
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;
1567
1568 typedef struct _GET_DEVICE_INFO_USER_OUT {
1569 ULONG Tag;
1570 ULONG Length;
1571 UCHAR WModes [4][16];
1572 UCHAR VendorId[25];
1573 UCHAR SimulatedWModes [4][16];
1574 ULONG DeviceNumber;
1575 ULONG Features;
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;
1582
1583 #define CDRW_DEV_CAPABILITY_TAG 0xCA10AB11
1584
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
1590
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
1608
1609 #define DEV_CAP_GET_PROFILE(arr, pf) \
1610 (((pf) > PFNUM_Max) ? 0 : (((arr)[(pf)/32] >> (pf)%32) & 1))
1611
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 )
1624
1625 //**********************************************************************************************
1626
1627 typedef ULONG CHECK_VERIFY_USER_OUT, *PCHECK_VERIFY_USER_OUT;
1628
1629 //**********************************************************************************************
1630
1631 /*
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
1638 */
1639
1640 typedef struct _GET_EVENT_USER_IN {
1641 UCHAR EventClass;
1642 BOOLEAN Immed;
1643 } GET_EVENT_USER_IN, *PGET_EVENT_USER_IN;
1644
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;
1652
1653 //**********************************************************************************************
1654
1655
1656 //**********************************************************************************************
1657
1658 typedef enum DVD_STRUCTURE_FORMAT {
1659 DvdPhysicalDescriptor,
1660 DvdCopyrightDescriptor,
1661 DvdDiskKeyDescriptor,
1662 DvdBCADescriptor,
1663 DvdManufacturerDescriptor,
1664 DvdMaxDescriptor
1665 } DVD_STRUCTURE_FORMAT, *PDVD_STRUCTURE_FORMAT;
1666
1667 typedef ULONG DVD_SESSION_ID, *PDVD_SESSION_ID;
1668
1669 typedef struct _DVD_READ_STRUCTURE_USER_IN {
1670 LARGE_INTEGER BlockByteOffset;
1671 DVD_STRUCTURE_FORMAT Format;
1672 DVD_SESSION_ID SessionId;
1673 UCHAR LayerNumber;
1674 } DVD_READ_STRUCTURE_USER_IN, *PDVD_READ_STRUCTURE_USER_IN;
1675
1676 typedef struct _DVD_READ_STRUCTURE_USER_OUT {
1677 USHORT Length;
1678 UCHAR Reserved[2];
1679 // UCHAR Data[0];
1680 } DVD_READ_STRUCTURE_USER_OUT, *PDVD_READ_STRUCTURE_USER_OUT;
1681
1682 //**********************************************************************************************
1683
1684 typedef struct _DVD_START_SESSION_USER_OUT {
1685 DVD_SESSION_ID SessionId;
1686 } DVD_START_SESSION_USER_OUT, *PDVD_START_SESSION_USER_OUT;
1687
1688 //**********************************************************************************************
1689
1690 typedef enum {
1691 DvdChallengeKey = 0x01,
1692 DvdBusKey1,
1693 DvdBusKey2,
1694 DvdTitleKey,
1695 DvdAsf,
1696 DvdSetRpcKey = 0x6,
1697 DvdGetRpcKey = 0x8,
1698 DvdDiskKey = 0x80,
1699 DvdInvalidateAGID = 0x3f
1700 } DVD_KEY_TYPE;
1701
1702 typedef struct _DVD_READ_KEY_USER_IN {
1703 ULONG KeyLength;
1704 DVD_SESSION_ID SessionId;
1705 DVD_KEY_TYPE KeyType;
1706 ULONG KeyFlags;
1707 union {
1708 HANDLE FileHandle;
1709 LARGE_INTEGER TitleOffset;
1710 } Parameters;
1711 // UCHAR KeyData[0];
1712 } DVD_READ_KEY_USER_IN, *PDVD_READ_KEY_USER_IN;
1713
1714 typedef DVD_READ_KEY_USER_IN DVD_COPY_PROTECT_KEY;
1715 typedef PDVD_READ_KEY_USER_IN PDVD_COPY_PROTECT_KEY;
1716
1717 typedef DVD_READ_KEY_USER_IN DVD_READ_KEY_USER_OUT;
1718 typedef PDVD_READ_KEY_USER_IN PDVD_READ_KEY_USER_OUT;
1719
1720 //**********************************************************************************************
1721
1722 typedef DVD_START_SESSION_USER_OUT DVD_END_SESSION_USER_IN;
1723 typedef PDVD_START_SESSION_USER_OUT PDVD_END_SESSION_USER_IN;
1724
1725 //**********************************************************************************************
1726
1727 typedef DVD_READ_KEY_USER_IN DVD_SEND_KEY_USER_IN;
1728 typedef PDVD_READ_KEY_USER_IN PDVD_SEND_KEY_USER_IN;
1729
1730 typedef struct _DVD_SET_RPC_KEY {
1731 UCHAR PreferredDriveRegionCode;
1732 UCHAR Reserved[3];
1733 } DVD_SET_RPC_KEY, * PDVD_SET_RPC_KEY;
1734
1735 //**********************************************************************************************
1736
1737 // Predefined (Mt. Fuji) key sizes
1738 // Add sizeof(DVD_COPY_PROTECT_KEY) to get allocation size for
1739 // the full key structure
1740
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))
1748
1749 //**********************************************************************************************
1750
1751 typedef struct _DISK_VERIFY_USER_IN {
1752 LONGLONG StartingOffset;
1753 ULONG Length;
1754 } DISK_VERIFY_USER_IN, *PDISK_VERIFY_USER_IN;
1755
1756 //**********************************************************************************************
1757
1758 typedef struct _CDROM_DISK_DATA_USER_OUT {
1759
1760 ULONG DiskData;
1761
1762 } CDROM_DISK_DATA_USER_OUT, *PCDROM_DISK_DATA_USER_OUT;
1763
1764 #define CDROM_DISK_AUDIO_TRACK (0x00000001)
1765 #define CDROM_DISK_DATA_TRACK (0x00000002)
1766
1767 //**********************************************************************************************
1768
1769 typedef struct _CDRW_RESET_DRIVER_USER_IN {
1770 BOOLEAN UnlockTray;
1771 BOOLEAN Reserved[3];
1772 ULONG MagicWord;
1773 } CDRW_RESET_DRIVER_USER_IN, *PCDRW_RESET_DRIVER_USER_IN;
1774
1775 //**********************************************************************************************
1776
1777 typedef struct _MediaTrackMap {
1778 ULONG FirstLba;
1779 ULONG LastLba;
1780 ULONG NWA;
1781 ULONG PacketSize;
1782 ULONG Session;
1783 UCHAR TrackParam;
1784 UCHAR DataParam;
1785 UCHAR NWA_V;
1786
1787 UCHAR Flags;
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
1794
1795 // are used only if FixFPAddressing is enabled
1796 ULONG TrackFPOffset;
1797 ULONG PacketFPOffset;
1798
1799 } MediaTrackMap, *PMediaTrackMap;
1800
1801 typedef struct _GET_DISK_LAYOUT_USER_OUT {
1802 ULONG Tag;
1803 ULONG Length;
1804 ULONG DiskLayoutFlags;
1805 // Number of last session
1806 ULONG LastSession;
1807 ULONG FirstTrackNum;
1808 ULONG LastTrackNum;
1809 // First & Last LBA of the last session
1810 ULONG FirstLBA;
1811 ULONG LastLBA;
1812 // Last writable LBA
1813 ULONG LastPossibleLBA;
1814 // First writable LBA
1815 ULONG NWA;
1816 // sector type map
1817 struct _MediaTrackMap* TrackMap;
1818 //
1819 ULONG BlockSize;
1820 ULONG WriteBlockSize;
1821 // disk state
1822 BOOLEAN FP_disc;
1823 UCHAR OPCNum;
1824 UCHAR MediaClassEx;
1825 UCHAR DiscStat;
1826 ULONG PhSerialNumber;
1827 UCHAR PhErasable;
1828 UCHAR PhDiskType;
1829 UCHAR MRWStatus;
1830 } GET_DISK_LAYOUT_USER_OUT, *PGET_DISK_LAYOUT_USER_OUT;
1831
1832 #define DiskLayout_FLAGS_TRACKMAP (0x00002000)
1833 #define DiskLayout_FLAGS_RAW_DISK (0x00040000)
1834
1835 //**********************************************************************************************
1836
1837 // Error codes returned by IOCTL_CDRW_GEL_LAST_ERROR
1838
1839 //#ifndef CDRW_ERR_NO_ERROR
1840
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
1889
1890 //#endif
1891
1892 // Registry keys
1893 #define REG_TIMEOUT_NAME_USER ("TimeOutValue")
1894 #define REG_AUTORUN_NAME_USER ("Autorun")
1895 #define REG_LOADMODE_NAME_USER ("LoadMode")
1896
1897 #define LOADMODE_CDRW_ONLY 0
1898 #define LOADMODE_ALWAYS 1
1899 #define LOADMODE_NEVER 2
1900
1901 #define REG_PACKETSIZE_NAME_USER ("PacketSize") // Initial packet size (FP)
1902
1903 #define PACKETSIZE_STREAM 0
1904 #define PACKETSIZE_UDF 32
1905
1906 #ifndef WITHOUT_FORMATTER
1907 #define REG_FORMATUNIT_NAME_USER ("FormatUnitMode") // FORMAT_UNIT workaround mode
1908
1909 #define FORMATUNIT_FP 0 // simulation via FP
1910 #define FORMATUNIT_STD 1
1911 #endif //WITHOUT_FORMATTER
1912
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
1915
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
1921
1922 #define REG_SPEEDMODE_NAME_USER ("SpeedDetectionMode")
1923
1924 #define SPEEDMODE_ASSUME_OK 0
1925 #define SPEEDMODE_REREAD 1
1926
1927 //#define REG_MAX_WRITE_SPEED_R_NAME_USER ("MaxWriteSpeedCDR")
1928 //#define REG_MAX_WRITE_SPEED_RW_NAME_USER ("MaxWriteSpeedCDRW")
1929
1930 //#define REG_SIMULATION_TABLE_NAME_USER ("WModeSimulationTable") // via Raw
1931
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
1936
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
1945
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
1950
1951 #define REG_WAIT_PACKETS_NAME_USER ("WaitPackets")
1952 #define WAIT_PACKETS_ALWAYS 0
1953 #define WAIT_PACKETS_STREAM 1
1954
1955 #define REG_BAD_RW_SEEK_NAME_USER ("BadRWSeek")
1956
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
1960
1961 #define REG_MAX_READY_RETRY_NAME_USER ("MaxReadyRetry")
1962
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")
1968
1969 #define REG_FULL_BLANK_ON_FORMAT_NAME_USER ("FullEraseBeforeFormat")
1970
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)
1974
1975
1976 #pragma pack(pop)
1977
1978 #endif //__CDRW_PUBLIC_H__