1 /* 2 * scsi.h 3 * 4 * SCSI port and class interface. 5 * 6 * This file is part of the w32api package. 7 * 8 * Contributors: 9 * Created by Casper S. Hornstrup <chorns (at) users.sourceforge.net> 10 * 11 * THIS SOFTWARE IS NOT COPYRIGHTED 12 * 13 * This source code is offered for use in the public domain. You may 14 * use, modify or distribute it freely. 15 * 16 * This code is distributed in the hope that it will be useful but 17 * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY 18 * DISCLAIMED. This includes but is not limited to warranties of 19 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 20 * 21 */ 22 23 #ifndef _NTSCSI_ 24 #define _NTSCSI_ 25 26 #ifdef __cplusplus 27 extern "C" { 28 #endif 29 30 #ifndef _NTSCSI_USER_MODE_ 31 #include "srb.h" 32 #endif 33 34 #define NOTIFICATION_OPERATIONAL_CHANGE_CLASS_MASK 0x02 35 #define NOTIFICATION_POWER_MANAGEMENT_CLASS_MASK 0x04 36 #define NOTIFICATION_EXTERNAL_REQUEST_CLASS_MASK 0x08 37 #define NOTIFICATION_MEDIA_STATUS_CLASS_MASK 0x10 38 #define NOTIFICATION_MULTI_HOST_CLASS_MASK 0x20 39 #define NOTIFICATION_DEVICE_BUSY_CLASS_MASK 0x40 40 41 42 #define NOTIFICATION_NO_CLASS_EVENTS 0x0 43 #define NOTIFICATION_OPERATIONAL_CHANGE_CLASS_EVENTS 0x1 44 #define NOTIFICATION_POWER_MANAGEMENT_CLASS_EVENTS 0x2 45 #define NOTIFICATION_EXTERNAL_REQUEST_CLASS_EVENTS 0x3 46 #define NOTIFICATION_MEDIA_STATUS_CLASS_EVENTS 0x4 47 #define NOTIFICATION_MULTI_HOST_CLASS_EVENTS 0x5 48 #define NOTIFICATION_DEVICE_BUSY_CLASS_EVENTS 0x6 49 50 #define NOTIFICATION_OPERATIONAL_EVENT_NO_CHANGE 0x0 51 #define NOTIFICATION_OPERATIONAL_EVENT_CHANGE_REQUESTED 0x1 52 #define NOTIFICATION_OPERATIONAL_EVENT_CHANGE_OCCURRED 0x2 53 54 #define NOTIFICATION_OPERATIONAL_STATUS_AVAILABLE 0x0 55 #define NOTIFICATION_OPERATIONAL_STATUS_TEMPORARY_BUSY 0x1 56 #define NOTIFICATION_OPERATIONAL_STATUS_EXTENDED_BUSY 0x2 57 58 #define NOTIFICATION_OPERATIONAL_OPCODE_NONE 0x0 59 #define NOTIFICATION_OPERATIONAL_OPCODE_FEATURE_CHANGE 0x1 60 #define NOTIFICATION_OPERATIONAL_OPCODE_FEATURE_ADDED 0x2 61 #define NOTIFICATION_OPERATIONAL_OPCODE_UNIT_RESET 0x3 62 #define NOTIFICATION_OPERATIONAL_OPCODE_FIRMWARE_CHANGED 0x4 63 #define NOTIFICATION_OPERATIONAL_OPCODE_INQUIRY_CHANGED 0x5 64 65 #define NOTIFICATION_POWER_EVENT_NO_CHANGE 0x0 66 #define NOTIFICATION_POWER_EVENT_CHANGE_SUCCEEDED 0x1 67 #define NOTIFICATION_POWER_EVENT_CHANGE_FAILED 0x2 68 69 #define NOTIFICATION_POWER_STATUS_ACTIVE 0x1 70 #define NOTIFICATION_POWER_STATUS_IDLE 0x2 71 #define NOTIFICATION_POWER_STATUS_STANDBY 0x3 72 #define NOTIFICATION_POWER_STATUS_SLEEP 0x4 73 74 #define NOTIFICATION_MEDIA_EVENT_NO_EVENT 0x0 75 #define NOTIFICATION_EXTERNAL_EVENT_NO_CHANGE 0x0 76 #define NOTIFICATION_EXTERNAL_EVENT_BUTTON_DOWN 0x1 77 #define NOTIFICATION_EXTERNAL_EVENT_BUTTON_UP 0x2 78 #define NOTIFICATION_EXTERNAL_EVENT_EXTERNAL 0x3 79 80 #define NOTIFICATION_EXTERNAL_STATUS_READY 0x0 81 #define NOTIFICATION_EXTERNAL_STATUS_PREVENT 0x1 82 83 #define NOTIFICATION_EXTERNAL_REQUEST_NONE 0x0000 84 #define NOTIFICATION_EXTERNAL_REQUEST_QUEUE_OVERRUN 0x0001 85 #define NOTIFICATION_EXTERNAL_REQUEST_PLAY 0x0101 86 #define NOTIFICATION_EXTERNAL_REQUEST_REWIND_BACK 0x0102 87 #define NOTIFICATION_EXTERNAL_REQUEST_FAST_FORWARD 0x0103 88 #define NOTIFICATION_EXTERNAL_REQUEST_PAUSE 0x0104 89 #define NOTIFICATION_EXTERNAL_REQUEST_STOP 0x0106 90 #define NOTIFICATION_EXTERNAL_REQUEST_ASCII_LOW 0x0200 91 #define NOTIFICATION_EXTERNAL_REQUEST_ASCII_HIGH 0x02ff 92 93 #define NOTIFICATION_MEDIA_EVENT_NO_CHANGE 0x0 94 #define NOTIFICATION_MEDIA_EVENT_EJECT_REQUEST 0x1 95 #define NOTIFICATION_MEDIA_EVENT_NEW_MEDIA 0x2 96 #define NOTIFICATION_MEDIA_EVENT_MEDIA_REMOVAL 0x3 97 #define NOTIFICATION_MEDIA_EVENT_MEDIA_CHANGE 0x4 98 99 #define NOTIFICATION_BUSY_EVENT_NO_EVENT 0x0 100 #define NOTIFICATION_MULTI_HOST_EVENT_NO_CHANGE 0x0 101 #define NOTIFICATION_MULTI_HOST_EVENT_CONTROL_REQUEST 0x1 102 #define NOTIFICATION_MULTI_HOST_EVENT_CONTROL_GRANT 0x2 103 #define NOTIFICATION_MULTI_HOST_EVENT_CONTROL_RELEASE 0x3 104 105 #define NOTIFICATION_MULTI_HOST_STATUS_READY 0x0 106 #define NOTIFICATION_MULTI_HOST_STATUS_PREVENT 0x1 107 108 #define NOTIFICATION_MULTI_HOST_PRIORITY_NO_REQUESTS 0x0 109 #define NOTIFICATION_MULTI_HOST_PRIORITY_LOW 0x1 110 #define NOTIFICATION_MULTI_HOST_PRIORITY_MEDIUM 0x2 111 #define NOTIFICATION_MULTI_HOST_PRIORITY_HIGH 0x3 112 113 #define NOTIFICATION_BUSY_EVENT_NO_EVENT 0x0 114 #define NOTIFICATION_BUSY_EVENT_NO_CHANGE 0x0 115 #define NOTIFICATION_BUSY_EVENT_BUSY 0x1 116 117 #define NOTIFICATION_BUSY_STATUS_NO_EVENT 0x0 118 #define NOTIFICATION_BUSY_STATUS_POWER 0x1 119 #define NOTIFICATION_BUSY_STATUS_IMMEDIATE 0x2 120 #define NOTIFICATION_BUSY_STATUS_DEFERRED 0x3 121 122 #define DVD_FORMAT_LEAD_IN 0x00 123 #define DVD_FORMAT_COPYRIGHT 0x01 124 #define DVD_FORMAT_DISK_KEY 0x02 125 #define DVD_FORMAT_BCA 0x03 126 #define DVD_FORMAT_MANUFACTURING 0x04 127 128 #define DVD_REPORT_AGID 0x00 129 #define DVD_CHALLENGE_KEY 0x01 130 #define DVD_KEY_1 0x02 131 #define DVD_KEY_2 0x03 132 #define DVD_TITLE_KEY 0x04 133 #define DVD_REPORT_ASF 0x05 134 #define DVD_INVALIDATE_AGID 0x3F 135 136 #define BLANK_FULL 0x0 137 #define BLANK_MINIMAL 0x1 138 #define BLANK_TRACK 0x2 139 #define BLANK_UNRESERVE_TRACK 0x3 140 #define BLANK_TAIL 0x4 141 #define BLANK_UNCLOSE_SESSION 0x5 142 #define BLANK_SESSION 0x6 143 144 #define CD_EXPECTED_SECTOR_ANY 0x0 145 #define CD_EXPECTED_SECTOR_CDDA 0x1 146 #define CD_EXPECTED_SECTOR_MODE1 0x2 147 #define CD_EXPECTED_SECTOR_MODE2 0x3 148 #define CD_EXPECTED_SECTOR_MODE2_FORM1 0x4 149 #define CD_EXPECTED_SECTOR_MODE2_FORM2 0x5 150 151 #define DISK_STATUS_EMPTY 0x00 152 #define DISK_STATUS_INCOMPLETE 0x01 153 #define DISK_STATUS_COMPLETE 0x02 154 #define DISK_STATUS_OTHERS 0x03 155 156 #define LAST_SESSION_EMPTY 0x00 157 #define LAST_SESSION_INCOMPLETE 0x01 158 #define LAST_SESSION_RESERVED_DAMAGED 0x02 159 #define LAST_SESSION_COMPLETE 0x03 160 161 #define DISK_TYPE_CDDA 0x00 162 #define DISK_TYPE_CDI 0x10 163 #define DISK_TYPE_XA 0x20 164 #define DISK_TYPE_UNDEFINED 0xFF 165 166 #define DISC_BGFORMAT_STATE_NONE 0x0 167 #define DISC_BGFORMAT_STATE_INCOMPLETE 0x1 168 #define DISC_BGFORMAT_STATE_RUNNING 0x2 169 #define DISC_BGFORMAT_STATE_COMPLETE 0x3 170 171 #define DATA_BLOCK_MODE0 0x0 172 #define DATA_BLOCK_MODE1 0x1 173 #define DATA_BLOCK_MODE2 0x2 174 175 /* READ_TOC formats */ 176 #define READ_TOC_FORMAT_TOC 0x00 177 #define READ_TOC_FORMAT_SESSION 0x01 178 #define READ_TOC_FORMAT_FULL_TOC 0x02 179 #define READ_TOC_FORMAT_PMA 0x03 180 #define READ_TOC_FORMAT_ATIP 0x04 181 182 #define CDB6GENERIC_LENGTH 6 183 #define CDB10GENERIC_LENGTH 10 184 #define CDB12GENERIC_LENGTH 12 185 186 #define SETBITON 1 187 #define SETBITOFF 0 188 189 /* Mode Sense/Select page constants */ 190 #define MODE_PAGE_VENDOR_SPECIFIC 0x00 191 #define MODE_PAGE_ERROR_RECOVERY 0x01 192 #define MODE_PAGE_DISCONNECT 0x02 193 #define MODE_PAGE_FORMAT_DEVICE 0x03 194 #define MODE_PAGE_MRW 0x03 195 #define MODE_PAGE_RIGID_GEOMETRY 0x04 196 #define MODE_PAGE_FLEXIBILE 0x05 197 #define MODE_PAGE_WRITE_PARAMETERS 0x05 198 #define MODE_PAGE_VERIFY_ERROR 0x07 199 #define MODE_PAGE_CACHING 0x08 200 #define MODE_PAGE_PERIPHERAL 0x09 201 #define MODE_PAGE_CONTROL 0x0A 202 #define MODE_PAGE_MEDIUM_TYPES 0x0B 203 #define MODE_PAGE_NOTCH_PARTITION 0x0C 204 #define MODE_PAGE_CD_AUDIO_CONTROL 0x0E 205 #define MODE_PAGE_DATA_COMPRESS 0x0F 206 #define MODE_PAGE_DEVICE_CONFIG 0x10 207 #define MODE_PAGE_XOR_CONTROL 0x10 208 #define MODE_PAGE_MEDIUM_PARTITION 0x11 209 #define MODE_PAGE_ENCLOSURE_SERVICES_MANAGEMENT 0x14 210 #define MODE_PAGE_EXTENDED 0x15 211 #define MODE_PAGE_EXTENDED_DEVICE_SPECIFIC 0x16 212 #define MODE_PAGE_CDVD_FEATURE_SET 0x18 213 #define MODE_PAGE_PROTOCOL_SPECIFIC_LUN 0x18 214 #define MODE_PAGE_PROTOCOL_SPECIFIC_PORT 0x19 215 #define MODE_PAGE_POWER_CONDITION 0x1A 216 #define MODE_PAGE_LUN_MAPPING 0x1B 217 #define MODE_PAGE_FAULT_REPORTING 0x1C 218 #define MODE_PAGE_CDVD_INACTIVITY 0x1D 219 #define MODE_PAGE_ELEMENT_ADDRESS 0x1D 220 #define MODE_PAGE_TRANSPORT_GEOMETRY 0x1E 221 #define MODE_PAGE_DEVICE_CAPABILITIES 0x1F 222 #define MODE_PAGE_CAPABILITIES 0x2A 223 224 #define MODE_SENSE_RETURN_ALL 0x3f 225 226 #define MODE_SENSE_CURRENT_VALUES 0x00 227 #define MODE_SENSE_CHANGEABLE_VALUES 0x40 228 #define MODE_SENSE_DEFAULT_VAULES 0x80 229 #define MODE_SENSE_SAVED_VALUES 0xc0 230 231 /* SCSI CDB operation codes */ 232 #define SCSIOP_TEST_UNIT_READY 0x00 233 #define SCSIOP_REZERO_UNIT 0x01 234 #define SCSIOP_REWIND 0x01 235 #define SCSIOP_REQUEST_BLOCK_ADDR 0x02 236 #define SCSIOP_REQUEST_SENSE 0x03 237 #define SCSIOP_FORMAT_UNIT 0x04 238 #define SCSIOP_READ_BLOCK_LIMITS 0x05 239 #define SCSIOP_REASSIGN_BLOCKS 0x07 240 #define SCSIOP_INIT_ELEMENT_STATUS 0x07 241 #define SCSIOP_READ6 0x08 242 #define SCSIOP_RECEIVE 0x08 243 #define SCSIOP_WRITE6 0x0A 244 #define SCSIOP_PRINT 0x0A 245 #define SCSIOP_SEND 0x0A 246 #define SCSIOP_SEEK6 0x0B 247 #define SCSIOP_TRACK_SELECT 0x0B 248 #define SCSIOP_SLEW_PRINT 0x0B 249 #define SCSIOP_SET_CAPACITY 0x0B 250 #define SCSIOP_SEEK_BLOCK 0x0C 251 #define SCSIOP_PARTITION 0x0D 252 #define SCSIOP_READ_REVERSE 0x0F 253 #define SCSIOP_WRITE_FILEMARKS 0x10 254 #define SCSIOP_FLUSH_BUFFER 0x10 255 #define SCSIOP_SPACE 0x11 256 #define SCSIOP_INQUIRY 0x12 257 #define SCSIOP_VERIFY6 0x13 258 #define SCSIOP_RECOVER_BUF_DATA 0x14 259 #define SCSIOP_MODE_SELECT 0x15 260 #define SCSIOP_RESERVE_UNIT 0x16 261 #define SCSIOP_RELEASE_UNIT 0x17 262 #define SCSIOP_COPY 0x18 263 #define SCSIOP_ERASE 0x19 264 #define SCSIOP_MODE_SENSE 0x1A 265 #define SCSIOP_START_STOP_UNIT 0x1B 266 #define SCSIOP_STOP_PRINT 0x1B 267 #define SCSIOP_LOAD_UNLOAD 0x1B 268 #define SCSIOP_RECEIVE_DIAGNOSTIC 0x1C 269 #define SCSIOP_SEND_DIAGNOSTIC 0x1D 270 #define SCSIOP_MEDIUM_REMOVAL 0x1E 271 272 #define SCSIOP_READ_FORMATTED_CAPACITY 0x23 273 #define SCSIOP_READ_CAPACITY 0x25 274 #define SCSIOP_READ 0x28 275 #define SCSIOP_WRITE 0x2A 276 #define SCSIOP_SEEK 0x2B 277 #define SCSIOP_LOCATE 0x2B 278 #define SCSIOP_POSITION_TO_ELEMENT 0x2B 279 #define SCSIOP_WRITE_VERIFY 0x2E 280 #define SCSIOP_VERIFY 0x2F 281 #define SCSIOP_SEARCH_DATA_HIGH 0x30 282 #define SCSIOP_SEARCH_DATA_EQUAL 0x31 283 #define SCSIOP_SEARCH_DATA_LOW 0x32 284 #define SCSIOP_SET_LIMITS 0x33 285 #define SCSIOP_READ_POSITION 0x34 286 #define SCSIOP_SYNCHRONIZE_CACHE 0x35 287 #define SCSIOP_COMPARE 0x39 288 #define SCSIOP_COPY_COMPARE 0x3A 289 #define SCSIOP_WRITE_DATA_BUFF 0x3B 290 #define SCSIOP_READ_DATA_BUFF 0x3C 291 #define SCSIOP_WRITE_LONG 0x3F 292 #define SCSIOP_CHANGE_DEFINITION 0x40 293 #define SCSIOP_WRITE_SAME 0x41 294 #define SCSIOP_READ_SUB_CHANNEL 0x42 295 #define SCSIOP_READ_TOC 0x43 296 #define SCSIOP_READ_HEADER 0x44 297 #define SCSIOP_REPORT_DENSITY_SUPPORT 0x44 298 #define SCSIOP_PLAY_AUDIO 0x45 299 #define SCSIOP_GET_CONFIGURATION 0x46 300 #define SCSIOP_PLAY_AUDIO_MSF 0x47 301 #define SCSIOP_PLAY_TRACK_INDEX 0x48 302 #define SCSIOP_PLAY_TRACK_RELATIVE 0x49 303 #define SCSIOP_GET_EVENT_STATUS 0x4A 304 #define SCSIOP_PAUSE_RESUME 0x4B 305 #define SCSIOP_LOG_SELECT 0x4C 306 #define SCSIOP_LOG_SENSE 0x4D 307 #define SCSIOP_STOP_PLAY_SCAN 0x4E 308 #define SCSIOP_XDWRITE 0x50 309 #define SCSIOP_XPWRITE 0x51 310 #define SCSIOP_READ_DISK_INFORMATION 0x51 311 #define SCSIOP_READ_DISC_INFORMATION 0x51 312 #define SCSIOP_READ_TRACK_INFORMATION 0x52 313 #define SCSIOP_XDWRITE_READ 0x53 314 #define SCSIOP_RESERVE_TRACK_RZONE 0x53 315 #define SCSIOP_SEND_OPC_INFORMATION 0x54 316 #define SCSIOP_MODE_SELECT10 0x55 317 #define SCSIOP_RESERVE_UNIT10 0x56 318 #define SCSIOP_RESERVE_ELEMENT 0x56 319 #define SCSIOP_RELEASE_UNIT10 0x57 320 #define SCSIOP_RELEASE_ELEMENT 0x57 321 #define SCSIOP_REPAIR_TRACK 0x58 322 #define SCSIOP_MODE_SENSE10 0x5A 323 #define SCSIOP_CLOSE_TRACK_SESSION 0x5B 324 #define SCSIOP_READ_BUFFER_CAPACITY 0x5C 325 #define SCSIOP_SEND_CUE_SHEET 0x5D 326 #define SCSIOP_PERSISTENT_RESERVE_IN 0x5E 327 #define SCSIOP_PERSISTENT_RESERVE_OUT 0x5F 328 329 #define SCSIOP_REPORT_LUNS 0xA0 330 #define SCSIOP_BLANK 0xA1 331 #define SCSIOP_ATA_PASSTHROUGH12 0xA1 332 #define SCSIOP_SEND_EVENT 0xA2 333 #define SCSIOP_SEND_KEY 0xA3 334 #define SCSIOP_MAINTENANCE_IN 0xA3 335 #define SCSIOP_REPORT_KEY 0xA4 336 #define SCSIOP_MAINTENANCE_OUT 0xA4 337 #define SCSIOP_MOVE_MEDIUM 0xA5 338 #define SCSIOP_LOAD_UNLOAD_SLOT 0xA6 339 #define SCSIOP_EXCHANGE_MEDIUM 0xA6 340 #define SCSIOP_SET_READ_AHEAD 0xA7 341 #define SCSIOP_MOVE_MEDIUM_ATTACHED 0xA7 342 #define SCSIOP_READ12 0xA8 343 #define SCSIOP_GET_MESSAGE 0xA8 344 #define SCSIOP_SERVICE_ACTION_OUT12 0xA9 345 #define SCSIOP_WRITE12 0xAA 346 #define SCSIOP_SEND_MESSAGE 0xAB 347 #define SCSIOP_SERVICE_ACTION_IN12 0xAB 348 #define SCSIOP_GET_PERFORMANCE 0xAC 349 #define SCSIOP_READ_DVD_STRUCTURE 0xAD 350 #define SCSIOP_WRITE_VERIFY12 0xAE 351 #define SCSIOP_VERIFY12 0xAF 352 #define SCSIOP_SEARCH_DATA_HIGH12 0xB0 353 #define SCSIOP_SEARCH_DATA_EQUAL12 0xB1 354 #define SCSIOP_SEARCH_DATA_LOW12 0xB2 355 #define SCSIOP_SET_LIMITS12 0xB3 356 #define SCSIOP_READ_ELEMENT_STATUS_ATTACHED 0xB4 357 #define SCSIOP_REQUEST_VOL_ELEMENT 0xB5 358 #define SCSIOP_SEND_VOLUME_TAG 0xB6 359 #define SCSIOP_SET_STREAMING 0xB6 360 #define SCSIOP_READ_DEFECT_DATA 0xB7 361 #define SCSIOP_READ_ELEMENT_STATUS 0xB8 362 #define SCSIOP_READ_CD_MSF 0xB9 363 #define SCSIOP_SCAN_CD 0xBA 364 #define SCSIOP_REDUNDANCY_GROUP_IN 0xBA 365 #define SCSIOP_SET_CD_SPEED 0xBB 366 #define SCSIOP_REDUNDANCY_GROUP_OUT 0xBB 367 #define SCSIOP_PLAY_CD 0xBC 368 #define SCSIOP_SPARE_IN 0xBC 369 #define SCSIOP_MECHANISM_STATUS 0xBD 370 #define SCSIOP_SPARE_OUT 0xBD 371 #define SCSIOP_READ_CD 0xBE 372 #define SCSIOP_VOLUME_SET_IN 0xBE 373 #define SCSIOP_SEND_DVD_STRUCTURE 0xBF 374 #define SCSIOP_VOLUME_SET_OUT 0xBF 375 #define SCSIOP_INIT_ELEMENT_RANGE 0xE7 376 377 #define SCSIOP_XDWRITE_EXTENDED16 0x80 378 #define SCSIOP_WRITE_FILEMARKS16 0x80 379 #define SCSIOP_REBUILD16 0x81 380 #define SCSIOP_READ_REVERSE16 0x81 381 #define SCSIOP_REGENERATE16 0x82 382 #define SCSIOP_EXTENDED_COPY 0x83 383 #define SCSIOP_RECEIVE_COPY_RESULTS 0x84 384 #define SCSIOP_ATA_PASSTHROUGH16 0x85 385 #define SCSIOP_ACCESS_CONTROL_IN 0x86 386 #define SCSIOP_ACCESS_CONTROL_OUT 0x87 387 #define SCSIOP_READ16 0x88 388 #define SCSIOP_WRITE16 0x8A 389 #define SCSIOP_READ_ATTRIBUTES 0x8C 390 #define SCSIOP_WRITE_ATTRIBUTES 0x8D 391 #define SCSIOP_WRITE_VERIFY16 0x8E 392 #define SCSIOP_VERIFY16 0x8F 393 #define SCSIOP_PREFETCH16 0x90 394 #define SCSIOP_SYNCHRONIZE_CACHE16 0x91 395 #define SCSIOP_SPACE16 0x91 396 #define SCSIOP_LOCK_UNLOCK_CACHE16 0x92 397 #define SCSIOP_LOCATE16 0x92 398 #define SCSIOP_WRITE_SAME16 0x93 399 #define SCSIOP_ERASE16 0x93 400 #define SCSIOP_READ_CAPACITY16 0x9E 401 #define SCSIOP_SERVICE_ACTION_IN16 0x9E 402 #define SCSIOP_SERVICE_ACTION_OUT16 0x9F 403 404 #define CDB_RETURN_ON_COMPLETION 0 405 #define CDB_RETURN_IMMEDIATE 1 406 407 #define CDB_FORCE_MEDIA_ACCESS 0x08 408 409 #define SCSIOP_DENON_EJECT_DISC 0xE6 410 #define SCSIOP_DENON_STOP_AUDIO 0xE7 411 #define SCSIOP_DENON_PLAY_AUDIO 0xE8 412 #define SCSIOP_DENON_READ_TOC 0xE9 413 #define SCSIOP_DENON_READ_SUBCODE 0xEB 414 415 #define SCSIMESS_ABORT 0x06 416 #define SCSIMESS_ABORT_WITH_TAG 0x0D 417 #define SCSIMESS_BUS_DEVICE_RESET 0X0C 418 #define SCSIMESS_CLEAR_QUEUE 0X0E 419 #define SCSIMESS_COMMAND_COMPLETE 0X00 420 #define SCSIMESS_DISCONNECT 0X04 421 #define SCSIMESS_EXTENDED_MESSAGE 0X01 422 #define SCSIMESS_IDENTIFY 0X80 423 #define SCSIMESS_IDENTIFY_WITH_DISCON 0XC0 424 #define SCSIMESS_IGNORE_WIDE_RESIDUE 0X23 425 #define SCSIMESS_INITIATE_RECOVERY 0X0F 426 #define SCSIMESS_INIT_DETECTED_ERROR 0X05 427 #define SCSIMESS_LINK_CMD_COMP 0X0A 428 #define SCSIMESS_LINK_CMD_COMP_W_FLAG 0X0B 429 #define SCSIMESS_MESS_PARITY_ERROR 0X09 430 #define SCSIMESS_MESSAGE_REJECT 0X07 431 #define SCSIMESS_NO_OPERATION 0X08 432 #define SCSIMESS_HEAD_OF_QUEUE_TAG 0X21 433 #define SCSIMESS_ORDERED_QUEUE_TAG 0X22 434 #define SCSIMESS_SIMPLE_QUEUE_TAG 0X20 435 #define SCSIMESS_RELEASE_RECOVERY 0X10 436 #define SCSIMESS_RESTORE_POINTERS 0X03 437 #define SCSIMESS_SAVE_DATA_POINTER 0X02 438 #define SCSIMESS_TERMINATE_IO_PROCESS 0X11 439 440 #define SCSIMESS_MODIFY_DATA_POINTER 0X00 441 #define SCSIMESS_SYNCHRONOUS_DATA_REQ 0X01 442 #define SCSIMESS_WIDE_DATA_REQUEST 0X03 443 444 #define SCSIMESS_MODIFY_DATA_LENGTH 5 445 #define SCSIMESS_SYNCH_DATA_LENGTH 3 446 #define SCSIMESS_WIDE_DATA_LENGTH 2 447 448 #define CDB_INQUIRY_EVPD 0x01 449 450 #define LUN0_FORMAT_SAVING_DEFECT_LIST 0 451 #define USE_DEFAULTMSB 0 452 #define USE_DEFAULTLSB 0 453 454 #define START_UNIT_CODE 0x01 455 #define STOP_UNIT_CODE 0x00 456 457 /* INQUIRYDATA.DeviceType constants */ 458 #define DIRECT_ACCESS_DEVICE 0x00 459 #define SEQUENTIAL_ACCESS_DEVICE 0x01 460 #define PRINTER_DEVICE 0x02 461 #define PROCESSOR_DEVICE 0x03 462 #define WRITE_ONCE_READ_MULTIPLE_DEVICE 0x04 463 #define READ_ONLY_DIRECT_ACCESS_DEVICE 0x05 464 #define SCANNER_DEVICE 0x06 465 #define OPTICAL_DEVICE 0x07 466 #define MEDIUM_CHANGER 0x08 467 #define COMMUNICATION_DEVICE 0x09 468 #define ARRAY_CONTROLLER_DEVICE 0x0C 469 #define SCSI_ENCLOSURE_DEVICE 0x0D 470 #define REDUCED_BLOCK_DEVICE 0x0E 471 #define OPTICAL_CARD_READER_WRITER_DEVICE 0x0F 472 #define BRIDGE_CONTROLLER_DEVICE 0x10 473 #define OBJECT_BASED_STORAGE_DEVICE 0x11 474 #define LOGICAL_UNIT_NOT_PRESENT_DEVICE 0x7F 475 476 #define DEVICE_QUALIFIER_ACTIVE 0x00 477 #define DEVICE_QUALIFIER_NOT_ACTIVE 0x01 478 #define DEVICE_QUALIFIER_NOT_SUPPORTED 0x03 479 480 /* INQUIRYDATA.DeviceTypeQualifier constants */ 481 #define DEVICE_CONNECTED 0x00 482 483 #define SCSISTAT_GOOD 0x00 484 #define SCSISTAT_CHECK_CONDITION 0x02 485 #define SCSISTAT_CONDITION_MET 0x04 486 #define SCSISTAT_BUSY 0x08 487 #define SCSISTAT_INTERMEDIATE 0x10 488 #define SCSISTAT_INTERMEDIATE_COND_MET 0x14 489 #define SCSISTAT_RESERVATION_CONFLICT 0x18 490 #define SCSISTAT_COMMAND_TERMINATED 0x22 491 #define SCSISTAT_QUEUE_FULL 0x28 492 493 #define VPD_MAX_BUFFER_SIZE 0xff 494 495 #define VPD_SUPPORTED_PAGES 0x00 496 #define VPD_SERIAL_NUMBER 0x80 497 #define VPD_DEVICE_IDENTIFIERS 0x83 498 #define VPD_MEDIA_SERIAL_NUMBER 0x84 499 #define VPD_SOFTWARE_INTERFACE_IDENTIFIERS 0x84 500 #define VPD_NETWORK_MANAGEMENT_ADDRESSES 0x85 501 #define VPD_EXTENDED_INQUIRY_DATA 0x86 502 #define VPD_MODE_PAGE_POLICY 0x87 503 #define VPD_SCSI_PORTS 0x88 504 505 #define RESERVATION_ACTION_READ_KEYS 0x00 506 #define RESERVATION_ACTION_READ_RESERVATIONS 0x01 507 508 #define RESERVATION_ACTION_REGISTER 0x00 509 #define RESERVATION_ACTION_RESERVE 0x01 510 #define RESERVATION_ACTION_RELEASE 0x02 511 #define RESERVATION_ACTION_CLEAR 0x03 512 #define RESERVATION_ACTION_PREEMPT 0x04 513 #define RESERVATION_ACTION_PREEMPT_ABORT 0x05 514 #define RESERVATION_ACTION_REGISTER_IGNORE_EXISTING 0x06 515 516 #define RESERVATION_SCOPE_LU 0x00 517 #define RESERVATION_SCOPE_ELEMENT 0x02 518 519 #define RESERVATION_TYPE_WRITE_EXCLUSIVE 0x01 520 #define RESERVATION_TYPE_EXCLUSIVE 0x03 521 #define RESERVATION_TYPE_WRITE_EXCLUSIVE_REGISTRANTS 0x05 522 #define RESERVATION_TYPE_EXCLUSIVE_REGISTRANTS 0x06 523 524 #define SENSE_BUFFER_SIZE 18 525 526 #define MAX_SENSE_BUFFER_SIZE 255 527 528 #define MAX_ADDITIONAL_SENSE_BYTES (MAX_SENSE_BUFFER_SIZE - SENSE_BUFFER_SIZE) 529 530 /* Sense codes */ 531 #define SCSI_SENSE_NO_SENSE 0x00 532 #define SCSI_SENSE_RECOVERED_ERROR 0x01 533 #define SCSI_SENSE_NOT_READY 0x02 534 #define SCSI_SENSE_MEDIUM_ERROR 0x03 535 #define SCSI_SENSE_HARDWARE_ERROR 0x04 536 #define SCSI_SENSE_ILLEGAL_REQUEST 0x05 537 #define SCSI_SENSE_UNIT_ATTENTION 0x06 538 #define SCSI_SENSE_DATA_PROTECT 0x07 539 #define SCSI_SENSE_BLANK_CHECK 0x08 540 #define SCSI_SENSE_UNIQUE 0x09 541 #define SCSI_SENSE_COPY_ABORTED 0x0A 542 #define SCSI_SENSE_ABORTED_COMMAND 0x0B 543 #define SCSI_SENSE_EQUAL 0x0C 544 #define SCSI_SENSE_VOL_OVERFLOW 0x0D 545 #define SCSI_SENSE_MISCOMPARE 0x0E 546 #define SCSI_SENSE_RESERVED 0x0F 547 548 /* Additional tape bit */ 549 #define SCSI_ILLEGAL_LENGTH 0x20 550 #define SCSI_EOM 0x40 551 #define SCSI_FILE_MARK 0x80 552 553 /* Additional Sense codes */ 554 #define SCSI_ADSENSE_NO_SENSE 0x00 555 #define SCSI_ADSENSE_NO_SEEK_COMPLETE 0x02 556 #define SCSI_ADSENSE_LUN_NOT_READY 0x04 557 #define SCSI_ADSENSE_LUN_COMMUNICATION 0x08 558 #define SCSI_ADSENSE_WRITE_ERROR 0x0C 559 #define SCSI_ADSENSE_TRACK_ERROR 0x14 560 #define SCSI_ADSENSE_SEEK_ERROR 0x15 561 #define SCSI_ADSENSE_REC_DATA_NOECC 0x17 562 #define SCSI_ADSENSE_REC_DATA_ECC 0x18 563 #define SCSI_ADSENSE_PARAMETER_LIST_LENGTH 0x1A 564 #define SCSI_ADSENSE_ILLEGAL_COMMAND 0x20 565 #define SCSI_ADSENSE_ILLEGAL_BLOCK 0x21 566 #define SCSI_ADSENSE_INVALID_CDB 0x24 567 #define SCSI_ADSENSE_INVALID_LUN 0x25 568 #define SCSI_ADSENSE_INVALID_FIELD_PARAMETER_LIST 0x26 569 #define SCSI_ADSENSE_WRITE_PROTECT 0x27 570 #define SCSI_ADSENSE_MEDIUM_CHANGED 0x28 571 #define SCSI_ADSENSE_BUS_RESET 0x29 572 #define SCSI_ADSENSE_PARAMETERS_CHANGED 0x2A 573 #define SCSI_ADSENSE_INSUFFICIENT_TIME_FOR_OPERATION 0x2E 574 #define SCSI_ADSENSE_INVALID_MEDIA 0x30 575 #define SCSI_ADSENSE_NO_MEDIA_IN_DEVICE 0x3a 576 #define SCSI_ADSENSE_POSITION_ERROR 0x3b 577 #define SCSI_ADSENSE_OPERATING_CONDITIONS_CHANGED 0x3f 578 #define SCSI_ADSENSE_OPERATOR_REQUEST 0x5a 579 #define SCSI_ADSENSE_FAILURE_PREDICTION_THRESHOLD_EXCEEDED 0x5d 580 #define SCSI_ADSENSE_ILLEGAL_MODE_FOR_THIS_TRACK 0x64 581 #define SCSI_ADSENSE_COPY_PROTECTION_FAILURE 0x6f 582 #define SCSI_ADSENSE_POWER_CALIBRATION_ERROR 0x73 583 #define SCSI_ADSENSE_VENDOR_UNIQUE 0x80 584 #define SCSI_ADSENSE_MUSIC_AREA 0xA0 585 #define SCSI_ADSENSE_DATA_AREA 0xA1 586 #define SCSI_ADSENSE_VOLUME_OVERFLOW 0xA7 587 588 #define SCSI_ADWRITE_PROTECT SCSI_ADSENSE_WRITE_PROTECT 589 #define SCSI_FAILURE_PREDICTION_THRESHOLD_EXCEEDED SCSI_ADSENSE_FAILURE_PREDICTION_THRESHOLD_EXCEEDED 590 591 #define SCSI_SENSEQ_CAUSE_NOT_REPORTABLE 0x00 592 #define SCSI_SENSEQ_BECOMING_READY 0x01 593 #define SCSI_SENSEQ_INIT_COMMAND_REQUIRED 0x02 594 #define SCSI_SENSEQ_MANUAL_INTERVENTION_REQUIRED 0x03 595 #define SCSI_SENSEQ_FORMAT_IN_PROGRESS 0x04 596 #define SCSI_SENSEQ_REBUILD_IN_PROGRESS 0x05 597 #define SCSI_SENSEQ_RECALCULATION_IN_PROGRESS 0x06 598 #define SCSI_SENSEQ_OPERATION_IN_PROGRESS 0x07 599 #define SCSI_SENSEQ_LONG_WRITE_IN_PROGRESS 0x08 600 #define SCSI_SENSEQ_LOSS_OF_STREAMING 0x09 601 #define SCSI_SENSEQ_PADDING_BLOCKS_ADDED 0x0A 602 603 #define SCSI_SENSEQ_COMM_FAILURE 0x00 604 #define SCSI_SENSEQ_COMM_TIMEOUT 0x01 605 #define SCSI_SENSEQ_COMM_PARITY_ERROR 0x02 606 #define SCSI_SESNEQ_COMM_CRC_ERROR 0x03 607 #define SCSI_SENSEQ_UNREACHABLE_TARGET 0x04 608 609 #define SCSI_SENSEQ_FILEMARK_DETECTED 0x01 610 #define SCSI_SENSEQ_END_OF_MEDIA_DETECTED 0x02 611 #define SCSI_SENSEQ_SETMARK_DETECTED 0x03 612 #define SCSI_SENSEQ_BEGINNING_OF_MEDIA_DETECTED 0x04 613 614 #define SCSI_SENSEQ_ILLEGAL_ELEMENT_ADDR 0x01 615 616 #define SCSI_SENSEQ_DESTINATION_FULL 0x0d 617 #define SCSI_SENSEQ_SOURCE_EMPTY 0x0e 618 619 #define SCSI_SENSEQ_INCOMPATIBLE_MEDIA_INSTALLED 0x00 620 #define SCSI_SENSEQ_UNKNOWN_FORMAT 0x01 621 #define SCSI_SENSEQ_INCOMPATIBLE_FORMAT 0x02 622 #define SCSI_SENSEQ_CLEANING_CARTRIDGE_INSTALLED 0x03 623 624 #define SCSI_SENSEQ_TARGET_OPERATING_CONDITIONS_CHANGED 0x00 625 #define SCSI_SENSEQ_MICROCODE_CHANGED 0x01 626 #define SCSI_SENSEQ_OPERATING_DEFINITION_CHANGED 0x02 627 #define SCSI_SENSEQ_INQUIRY_DATA_CHANGED 0x03 628 #define SCSI_SENSEQ_COMPONENT_DEVICE_ATTACHED 0x04 629 #define SCSI_SENSEQ_DEVICE_IDENTIFIER_CHANGED 0x05 630 #define SCSI_SENSEQ_REDUNDANCY_GROUP_MODIFIED 0x06 631 #define SCSI_SENSEQ_REDUNDANCY_GROUP_DELETED 0x07 632 #define SCSI_SENSEQ_SPARE_MODIFIED 0x08 633 #define SCSI_SENSEQ_SPARE_DELETED 0x09 634 #define SCSI_SENSEQ_VOLUME_SET_MODIFIED 0x0A 635 #define SCSI_SENSEQ_VOLUME_SET_DELETED 0x0B 636 #define SCSI_SENSEQ_VOLUME_SET_DEASSIGNED 0x0C 637 #define SCSI_SENSEQ_VOLUME_SET_REASSIGNED 0x0D 638 #define SCSI_SENSEQ_REPORTED_LUNS_DATA_CHANGED 0x0E 639 #define SCSI_SENSEQ_ECHO_BUFFER_OVERWRITTEN 0x0F 640 #define SCSI_SENSEQ_MEDIUM_LOADABLE 0x10 641 #define SCSI_SENSEQ_MEDIUM_AUXILIARY_MEMORY_ACCESSIBLE 0x11 642 643 #define SCSI_SENSEQ_STATE_CHANGE_INPUT 0x00 644 #define SCSI_SENSEQ_MEDIUM_REMOVAL 0x01 645 #define SCSI_SENSEQ_WRITE_PROTECT_ENABLE 0x02 646 #define SCSI_SENSEQ_WRITE_PROTECT_DISABLE 0x03 647 648 #define SCSI_SENSEQ_AUTHENTICATION_FAILURE 0x00 649 #define SCSI_SENSEQ_KEY_NOT_PRESENT 0x01 650 #define SCSI_SENSEQ_KEY_NOT_ESTABLISHED 0x02 651 #define SCSI_SENSEQ_READ_OF_SCRAMBLED_SECTOR_WITHOUT_AUTHENTICATION 0x03 652 #define SCSI_SENSEQ_MEDIA_CODE_MISMATCHED_TO_LOGICAL_UNIT 0x04 653 #define SCSI_SENSEQ_LOGICAL_UNIT_RESET_COUNT_ERROR 0x05 654 655 #define SCSI_SENSEQ_POWER_CALIBRATION_AREA_ALMOST_FULL 0x01 656 #define SCSI_SENSEQ_POWER_CALIBRATION_AREA_FULL 0x02 657 #define SCSI_SENSEQ_POWER_CALIBRATION_AREA_ERROR 0x03 658 #define SCSI_SENSEQ_PMA_RMA_UPDATE_FAILURE 0x04 659 #define SCSI_SENSEQ_PMA_RMA_IS_FULL 0x05 660 #define SCSI_SENSEQ_PMA_RMA_ALMOST_FULL 0x06 661 662 #define FILE_DEVICE_SCSI 0x0000001b 663 664 #define IOCTL_SCSI_EXECUTE_IN ((FILE_DEVICE_SCSI << 16) + 0x0011) 665 #define IOCTL_SCSI_EXECUTE_OUT ((FILE_DEVICE_SCSI << 16) + 0x0012) 666 #define IOCTL_SCSI_EXECUTE_NONE ((FILE_DEVICE_SCSI << 16) + 0x0013) 667 668 /* SMART support in ATAPI */ 669 #define IOCTL_SCSI_MINIPORT_SMART_VERSION ((FILE_DEVICE_SCSI << 16) + 0x0500) 670 #define IOCTL_SCSI_MINIPORT_IDENTIFY ((FILE_DEVICE_SCSI << 16) + 0x0501) 671 #define IOCTL_SCSI_MINIPORT_READ_SMART_ATTRIBS ((FILE_DEVICE_SCSI << 16) + 0x0502) 672 #define IOCTL_SCSI_MINIPORT_READ_SMART_THRESHOLDS ((FILE_DEVICE_SCSI << 16) + 0x0503) 673 #define IOCTL_SCSI_MINIPORT_ENABLE_SMART ((FILE_DEVICE_SCSI << 16) + 0x0504) 674 #define IOCTL_SCSI_MINIPORT_DISABLE_SMART ((FILE_DEVICE_SCSI << 16) + 0x0505) 675 #define IOCTL_SCSI_MINIPORT_RETURN_STATUS ((FILE_DEVICE_SCSI << 16) + 0x0506) 676 #define IOCTL_SCSI_MINIPORT_ENABLE_DISABLE_AUTOSAVE ((FILE_DEVICE_SCSI << 16) + 0x0507) 677 #define IOCTL_SCSI_MINIPORT_SAVE_ATTRIBUTE_VALUES ((FILE_DEVICE_SCSI << 16) + 0x0508) 678 #define IOCTL_SCSI_MINIPORT_EXECUTE_OFFLINE_DIAGS ((FILE_DEVICE_SCSI << 16) + 0x0509) 679 #define IOCTL_SCSI_MINIPORT_ENABLE_DISABLE_AUTO_OFFLINE ((FILE_DEVICE_SCSI << 16) + 0x050a) 680 #define IOCTL_SCSI_MINIPORT_READ_SMART_LOG ((FILE_DEVICE_SCSI << 16) + 0x050b) 681 #define IOCTL_SCSI_MINIPORT_WRITE_SMART_LOG ((FILE_DEVICE_SCSI << 16) + 0x050c) 682 683 /* CLUSTER support */ 684 #define IOCTL_SCSI_MINIPORT_NOT_QUORUM_CAPABLE ((FILE_DEVICE_SCSI << 16) + 0x0520) 685 #define IOCTL_SCSI_MINIPORT_NOT_CLUSTER_CAPABLE ((FILE_DEVICE_SCSI << 16) + 0x0521) 686 687 #define MODE_FD_SINGLE_SIDE 0x01 688 #define MODE_FD_DOUBLE_SIDE 0x02 689 #define MODE_FD_MAXIMUM_TYPE 0x1E 690 #define MODE_DSP_FUA_SUPPORTED 0x10 691 #define MODE_DSP_WRITE_PROTECT 0x80 692 693 #define CDDA_CHANNEL_MUTED 0x0 694 #define CDDA_CHANNEL_ZERO 0x1 695 #define CDDA_CHANNEL_ONE 0x2 696 #define CDDA_CHANNEL_TWO 0x4 697 #define CDDA_CHANNEL_THREE 0x8 698 699 #define CDVD_LMT_CADDY 0 700 #define CDVD_LMT_TRAY 1 701 #define CDVD_LMT_POPUP 2 702 #define CDVD_LMT_RESERVED1 3 703 #define CDVD_LMT_CHANGER_INDIVIDUAL 4 704 #define CDVD_LMT_CHANGER_CARTRIDGE 5 705 #define CDVD_LMT_RESERVED2 6 706 #define CDVD_LMT_RESERVED3 7 707 708 #define LOADING_MECHANISM_CADDY 0x00 709 #define LOADING_MECHANISM_TRAY 0x01 710 #define LOADING_MECHANISM_POPUP 0x02 711 #define LOADING_MECHANISM_INDIVIDUAL_CHANGER 0x04 712 #define LOADING_MECHANISM_CARTRIDGE_CHANGER 0x05 713 714 #define MODE_BLOCK_DESC_LENGTH 8 715 #define MODE_HEADER_LENGTH 4 716 #define MODE_HEADER_LENGTH10 8 717 718 /* CDROM audio control */ 719 #define CDB_AUDIO_PAUSE 0x00 720 #define CDB_AUDIO_RESUME 0x01 721 #define CDB_DEVICE_START 0x11 722 #define CDB_DEVICE_STOP 0x10 723 #define CDB_EJECT_MEDIA 0x10 724 #define CDB_LOAD_MEDIA 0x01 725 #define CDB_SUBCHANNEL_HEADER 0x00 726 #define CDB_SUBCHANNEL_BLOCK 0x01 727 728 #define CDROM_AUDIO_CONTROL_PAGE 0x0E 729 #define MODE_SELECT_IMMEDIATE 0x04 730 #define MODE_SELECT_PFBIT 0x10 731 732 #define CDB_USE_MSF 0x01 733 734 /* Multisession CDROMs */ 735 #define GET_LAST_SESSION 0x01 736 #define GET_SESSION_DATA 0x02 737 738 typedef union _CDB { 739 struct _CDB6GENERIC { 740 UCHAR OperationCode; 741 UCHAR Immediate:1; 742 UCHAR CommandUniqueBits:4; 743 UCHAR LogicalUnitNumber:3; 744 UCHAR CommandUniqueBytes[3]; 745 UCHAR Link:1; 746 UCHAR Flag:1; 747 UCHAR Reserved:4; 748 UCHAR VendorUnique:2; 749 } CDB6GENERIC, *PCDB6GENERIC; 750 struct _CDB6READWRITE { 751 UCHAR OperationCode; 752 UCHAR LogicalBlockMsb1:5; 753 UCHAR LogicalUnitNumber:3; 754 UCHAR LogicalBlockMsb0; 755 UCHAR LogicalBlockLsb; 756 UCHAR TransferBlocks; 757 UCHAR Control; 758 } CDB6READWRITE, *PCDB6READWRITE; 759 struct _CDB6INQUIRY { 760 UCHAR OperationCode; 761 UCHAR Reserved1:5; 762 UCHAR LogicalUnitNumber:3; 763 UCHAR PageCode; 764 UCHAR IReserved; 765 UCHAR AllocationLength; 766 UCHAR Control; 767 } CDB6INQUIRY, *PCDB6INQUIRY; 768 struct _CDB6INQUIRY3 { 769 UCHAR OperationCode; 770 UCHAR EnableVitalProductData:1; 771 UCHAR CommandSupportData:1; 772 UCHAR Reserved1:6; 773 UCHAR PageCode; 774 UCHAR Reserved2; 775 UCHAR AllocationLength; 776 UCHAR Control; 777 } CDB6INQUIRY3, *PCDB6INQUIRY3; 778 struct _CDB6VERIFY { 779 UCHAR OperationCode; 780 UCHAR Fixed:1; 781 UCHAR ByteCompare:1; 782 UCHAR Immediate:1; 783 UCHAR Reserved:2; 784 UCHAR LogicalUnitNumber:3; 785 UCHAR VerificationLength[3]; 786 UCHAR Control; 787 } CDB6VERIFY, *PCDB6VERIFY; 788 struct _CDB6FORMAT { 789 UCHAR OperationCode; 790 UCHAR FormatControl:5; 791 UCHAR LogicalUnitNumber:3; 792 UCHAR FReserved1; 793 UCHAR InterleaveMsb; 794 UCHAR InterleaveLsb; 795 UCHAR FReserved2; 796 } CDB6FORMAT, *PCDB6FORMAT; 797 struct _CDB10 { 798 UCHAR OperationCode; 799 UCHAR RelativeAddress:1; 800 UCHAR Reserved1:2; 801 UCHAR ForceUnitAccess:1; 802 UCHAR DisablePageOut:1; 803 UCHAR LogicalUnitNumber:3; 804 UCHAR LogicalBlockByte0; 805 UCHAR LogicalBlockByte1; 806 UCHAR LogicalBlockByte2; 807 UCHAR LogicalBlockByte3; 808 UCHAR Reserved2; 809 UCHAR TransferBlocksMsb; 810 UCHAR TransferBlocksLsb; 811 UCHAR Control; 812 } CDB10, *PCDB10; 813 struct _CDB12 { 814 UCHAR OperationCode; 815 UCHAR RelativeAddress:1; 816 UCHAR Reserved1:2; 817 UCHAR ForceUnitAccess:1; 818 UCHAR DisablePageOut:1; 819 UCHAR LogicalUnitNumber:3; 820 UCHAR LogicalBlock[4]; 821 UCHAR TransferLength[4]; 822 UCHAR Reserved2; 823 UCHAR Control; 824 } CDB12, *PCDB12; 825 struct _CDB16 { 826 UCHAR OperationCode; 827 UCHAR Reserved1:3; 828 UCHAR ForceUnitAccess:1; 829 UCHAR DisablePageOut:1; 830 UCHAR Protection:3; 831 UCHAR LogicalBlock[8]; 832 UCHAR TransferLength[4]; 833 UCHAR Reserved2; 834 UCHAR Control; 835 } CDB16, *PCDB16; 836 struct _PAUSE_RESUME { 837 UCHAR OperationCode; 838 UCHAR Reserved1:5; 839 UCHAR LogicalUnitNumber:3; 840 UCHAR Reserved2[6]; 841 UCHAR Action; 842 UCHAR Control; 843 } PAUSE_RESUME, *PPAUSE_RESUME; 844 struct _READ_TOC { 845 UCHAR OperationCode; 846 UCHAR Reserved0:1; 847 UCHAR Msf:1; 848 UCHAR Reserved1:3; 849 UCHAR LogicalUnitNumber:3; 850 UCHAR Format2:4; 851 UCHAR Reserved2:4; 852 UCHAR Reserved3[3]; 853 UCHAR StartingTrack; 854 UCHAR AllocationLength[2]; 855 UCHAR Control:6; 856 UCHAR Format:2; 857 } READ_TOC, *PREAD_TOC; 858 struct _READ_DISK_INFORMATION { 859 UCHAR OperationCode; 860 UCHAR Reserved1:5; 861 UCHAR Lun:3; 862 UCHAR Reserved2[5]; 863 UCHAR AllocationLength[2]; 864 UCHAR Control; 865 } READ_DISK_INFORMATION, *PREAD_DISK_INFORMATION; 866 struct _READ_TRACK_INFORMATION { 867 UCHAR OperationCode; 868 UCHAR Track:1; 869 UCHAR Reserved1:3; 870 UCHAR Reserved2:1; 871 UCHAR Lun:3; 872 UCHAR BlockAddress[4]; 873 UCHAR Reserved3; 874 UCHAR AllocationLength[2]; 875 UCHAR Control; 876 } READ_TRACK_INFORMATION, *PREAD_TRACK_INFORMATION; 877 struct _RESERVE_TRACK_RZONE { 878 UCHAR OperationCode; 879 UCHAR Reserved1[4]; 880 UCHAR ReservationSize[4]; 881 UCHAR Control; 882 } RESERVE_TRACK_RZONE, *PRESERVE_TRACK_RZONE; 883 struct _SEND_OPC_INFORMATION { 884 UCHAR OperationCode; 885 UCHAR DoOpc:1; 886 UCHAR Reserved1:7; 887 UCHAR Exclude0:1; 888 UCHAR Exclude1:1; 889 UCHAR Reserved2:6; 890 UCHAR Reserved3[4]; 891 UCHAR ParameterListLength[2]; 892 UCHAR Reserved4; 893 } SEND_OPC_INFORMATION, *PSEND_OPC_INFORMATION; 894 struct _REPAIR_TRACK { 895 UCHAR OperationCode; 896 UCHAR Immediate:1; 897 UCHAR Reserved1:7; 898 UCHAR Reserved2[2]; 899 UCHAR TrackNumber[2]; 900 UCHAR Reserved3[3]; 901 UCHAR Control; 902 } REPAIR_TRACK, *PREPAIR_TRACK; 903 struct _CLOSE_TRACK { 904 UCHAR OperationCode; 905 UCHAR Immediate:1; 906 UCHAR Reserved1:7; 907 UCHAR Track:1; 908 UCHAR Session:1; 909 UCHAR Reserved2:6; 910 UCHAR Reserved3; 911 UCHAR TrackNumber[2]; 912 UCHAR Reserved4[3]; 913 UCHAR Control; 914 } CLOSE_TRACK, *PCLOSE_TRACK; 915 struct _READ_BUFFER_CAPACITY { 916 UCHAR OperationCode; 917 UCHAR BlockInfo:1; 918 UCHAR Reserved1:7; 919 UCHAR Reserved2[5]; 920 UCHAR AllocationLength[2]; 921 UCHAR Control; 922 } READ_BUFFER_CAPACITY, *PREAD_BUFFER_CAPACITY; 923 struct _SEND_CUE_SHEET { 924 UCHAR OperationCode; 925 UCHAR Reserved[5]; 926 UCHAR CueSheetSize[3]; 927 UCHAR Control; 928 } SEND_CUE_SHEET, *PSEND_CUE_SHEET; 929 struct _READ_HEADER { 930 UCHAR OperationCode; 931 UCHAR Reserved1:1; 932 UCHAR Msf:1; 933 UCHAR Reserved2:3; 934 UCHAR Lun:3; 935 UCHAR LogicalBlockAddress[4]; 936 UCHAR Reserved3; 937 UCHAR AllocationLength[2]; 938 UCHAR Control; 939 } READ_HEADER, *PREAD_HEADER; 940 struct _PLAY_AUDIO { 941 UCHAR OperationCode; 942 UCHAR Reserved1:5; 943 UCHAR LogicalUnitNumber:3; 944 UCHAR StartingBlockAddress[4]; 945 UCHAR Reserved2; 946 UCHAR PlayLength[2]; 947 UCHAR Control; 948 } PLAY_AUDIO, *PPLAY_AUDIO; 949 struct _PLAY_AUDIO_MSF { 950 UCHAR OperationCode; 951 UCHAR Reserved1:5; 952 UCHAR LogicalUnitNumber:3; 953 UCHAR Reserved2; 954 UCHAR StartingM; 955 UCHAR StartingS; 956 UCHAR StartingF; 957 UCHAR EndingM; 958 UCHAR EndingS; 959 UCHAR EndingF; 960 UCHAR Control; 961 } PLAY_AUDIO_MSF, *PPLAY_AUDIO_MSF; 962 struct _BLANK_MEDIA { 963 UCHAR OperationCode; 964 UCHAR BlankType:3; 965 UCHAR Reserved1:1; 966 UCHAR Immediate:1; 967 UCHAR Reserved2:3; 968 UCHAR AddressOrTrack[4]; 969 UCHAR Reserved3[5]; 970 UCHAR Control; 971 } BLANK_MEDIA, *PBLANK_MEDIA; 972 struct _PLAY_CD { 973 UCHAR OperationCode; 974 UCHAR Reserved1:1; 975 UCHAR CMSF:1; 976 UCHAR ExpectedSectorType:3; 977 UCHAR Lun:3; 978 _ANONYMOUS_UNION union { 979 struct _LBA { 980 UCHAR StartingBlockAddress[4]; 981 UCHAR PlayLength[4]; 982 } LBA; 983 struct _MSF { 984 UCHAR Reserved1; 985 UCHAR StartingM; 986 UCHAR StartingS; 987 UCHAR StartingF; 988 UCHAR EndingM; 989 UCHAR EndingS; 990 UCHAR EndingF; 991 UCHAR Reserved2; 992 } MSF; 993 } DUMMYUNIONNAME; 994 UCHAR Audio:1; 995 UCHAR Composite:1; 996 UCHAR Port1:1; 997 UCHAR Port2:1; 998 UCHAR Reserved2:3; 999 UCHAR Speed:1; 1000 UCHAR Control; 1001 } PLAY_CD, *PPLAY_CD; 1002 struct _SCAN_CD { 1003 UCHAR OperationCode; 1004 UCHAR RelativeAddress:1; 1005 UCHAR Reserved1:3; 1006 UCHAR Direct:1; 1007 UCHAR Lun:3; 1008 UCHAR StartingAddress[4]; 1009 UCHAR Reserved2[3]; 1010 UCHAR Reserved3:6; 1011 UCHAR Type:2; 1012 UCHAR Reserved4; 1013 UCHAR Control; 1014 } SCAN_CD, *PSCAN_CD; 1015 struct _STOP_PLAY_SCAN { 1016 UCHAR OperationCode; 1017 UCHAR Reserved1:5; 1018 UCHAR Lun:3; 1019 UCHAR Reserved2[7]; 1020 UCHAR Control; 1021 } STOP_PLAY_SCAN, *PSTOP_PLAY_SCAN; 1022 struct _SUBCHANNEL { 1023 UCHAR OperationCode; 1024 UCHAR Reserved0:1; 1025 UCHAR Msf:1; 1026 UCHAR Reserved1:3; 1027 UCHAR LogicalUnitNumber:3; 1028 UCHAR Reserved2:6; 1029 UCHAR SubQ:1; 1030 UCHAR Reserved3:1; 1031 UCHAR Format; 1032 UCHAR Reserved4[2]; 1033 UCHAR TrackNumber; 1034 UCHAR AllocationLength[2]; 1035 UCHAR Control; 1036 } SUBCHANNEL, *PSUBCHANNEL; 1037 struct _READ_CD { 1038 UCHAR OperationCode; 1039 UCHAR RelativeAddress:1; 1040 UCHAR Reserved0:1; 1041 UCHAR ExpectedSectorType:3; 1042 UCHAR Lun:3; 1043 UCHAR StartingLBA[4]; 1044 UCHAR TransferBlocks[3]; 1045 UCHAR Reserved2:1; 1046 UCHAR ErrorFlags:2; 1047 UCHAR IncludeEDC:1; 1048 UCHAR IncludeUserData:1; 1049 UCHAR HeaderCode:2; 1050 UCHAR IncludeSyncData:1; 1051 UCHAR SubChannelSelection:3; 1052 UCHAR Reserved3:5; 1053 UCHAR Control; 1054 } READ_CD, *PREAD_CD; 1055 struct _READ_CD_MSF { 1056 UCHAR OperationCode; 1057 UCHAR RelativeAddress:1; 1058 UCHAR Reserved1:1; 1059 UCHAR ExpectedSectorType:3; 1060 UCHAR Lun:3; 1061 UCHAR Reserved2; 1062 UCHAR StartingM; 1063 UCHAR StartingS; 1064 UCHAR StartingF; 1065 UCHAR EndingM; 1066 UCHAR EndingS; 1067 UCHAR EndingF; 1068 UCHAR Reserved3; 1069 UCHAR Reserved4:1; 1070 UCHAR ErrorFlags:2; 1071 UCHAR IncludeEDC:1; 1072 UCHAR IncludeUserData:1; 1073 UCHAR HeaderCode:2; 1074 UCHAR IncludeSyncData:1; 1075 UCHAR SubChannelSelection:3; 1076 UCHAR Reserved5:5; 1077 UCHAR Control; 1078 } READ_CD_MSF, *PREAD_CD_MSF; 1079 struct _PLXTR_READ_CDDA { 1080 UCHAR OperationCode; 1081 UCHAR Reserved0:5; 1082 UCHAR LogicalUnitNumber:3; 1083 UCHAR LogicalBlockByte0; 1084 UCHAR LogicalBlockByte1; 1085 UCHAR LogicalBlockByte2; 1086 UCHAR LogicalBlockByte3; 1087 UCHAR TransferBlockByte0; 1088 UCHAR TransferBlockByte1; 1089 UCHAR TransferBlockByte2; 1090 UCHAR TransferBlockByte3; 1091 UCHAR SubCode; 1092 UCHAR Control; 1093 } PLXTR_READ_CDDA, *PPLXTR_READ_CDDA; 1094 struct _NEC_READ_CDDA { 1095 UCHAR OperationCode; 1096 UCHAR Reserved0; 1097 UCHAR LogicalBlockByte0; 1098 UCHAR LogicalBlockByte1; 1099 UCHAR LogicalBlockByte2; 1100 UCHAR LogicalBlockByte3; 1101 UCHAR Reserved1; 1102 UCHAR TransferBlockByte0; 1103 UCHAR TransferBlockByte1; 1104 UCHAR Control; 1105 } NEC_READ_CDDA, *PNEC_READ_CDDA; 1106 struct _MODE_SENSE { 1107 UCHAR OperationCode; 1108 UCHAR Reserved1:3; 1109 UCHAR Dbd:1; 1110 UCHAR Reserved2:1; 1111 UCHAR LogicalUnitNumber:3; 1112 UCHAR PageCode:6; 1113 UCHAR Pc:2; 1114 UCHAR Reserved3; 1115 UCHAR AllocationLength; 1116 UCHAR Control; 1117 } MODE_SENSE, *PMODE_SENSE; 1118 struct _MODE_SENSE10 { 1119 UCHAR OperationCode; 1120 UCHAR Reserved1:3; 1121 UCHAR Dbd:1; 1122 UCHAR Reserved2:1; 1123 UCHAR LogicalUnitNumber:3; 1124 UCHAR PageCode:6; 1125 UCHAR Pc:2; 1126 UCHAR Reserved3[4]; 1127 UCHAR AllocationLength[2]; 1128 UCHAR Control; 1129 } MODE_SENSE10, *PMODE_SENSE10; 1130 struct _MODE_SELECT { 1131 UCHAR OperationCode; 1132 UCHAR SPBit:1; 1133 UCHAR Reserved1:3; 1134 UCHAR PFBit:1; 1135 UCHAR LogicalUnitNumber:3; 1136 UCHAR Reserved2[2]; 1137 UCHAR ParameterListLength; 1138 UCHAR Control; 1139 } MODE_SELECT, *PMODE_SELECT; 1140 struct _MODE_SELECT10 { 1141 UCHAR OperationCode; 1142 UCHAR SPBit:1; 1143 UCHAR Reserved1:3; 1144 UCHAR PFBit:1; 1145 UCHAR LogicalUnitNumber:3; 1146 UCHAR Reserved2[5]; 1147 UCHAR ParameterListLength[2]; 1148 UCHAR Control; 1149 } MODE_SELECT10, *PMODE_SELECT10; 1150 struct _LOCATE { 1151 UCHAR OperationCode; 1152 UCHAR Immediate:1; 1153 UCHAR CPBit:1; 1154 UCHAR BTBit:1; 1155 UCHAR Reserved1:2; 1156 UCHAR LogicalUnitNumber:3; 1157 UCHAR Reserved3; 1158 UCHAR LogicalBlockAddress[4]; 1159 UCHAR Reserved4; 1160 UCHAR Partition; 1161 UCHAR Control; 1162 } LOCATE, *PLOCATE; 1163 struct _LOGSENSE { 1164 UCHAR OperationCode; 1165 UCHAR SPBit:1; 1166 UCHAR PPCBit:1; 1167 UCHAR Reserved1:3; 1168 UCHAR LogicalUnitNumber:3; 1169 UCHAR PageCode:6; 1170 UCHAR PCBit:2; 1171 UCHAR Reserved2; 1172 UCHAR Reserved3; 1173 UCHAR ParameterPointer[2]; 1174 UCHAR AllocationLength[2]; 1175 UCHAR Control; 1176 } LOGSENSE, *PLOGSENSE; 1177 struct _LOGSELECT { 1178 UCHAR OperationCode; 1179 UCHAR SPBit:1; 1180 UCHAR PCRBit:1; 1181 UCHAR Reserved1:3; 1182 UCHAR LogicalUnitNumber:3; 1183 UCHAR Reserved:6; 1184 UCHAR PCBit:2; 1185 UCHAR Reserved2[4]; 1186 UCHAR ParameterListLength[2]; 1187 UCHAR Control; 1188 } LOGSELECT, *PLOGSELECT; 1189 struct _PRINT { 1190 UCHAR OperationCode; 1191 UCHAR Reserved:5; 1192 UCHAR LogicalUnitNumber:3; 1193 UCHAR TransferLength[3]; 1194 UCHAR Control; 1195 } PRINT, *PPRINT; 1196 struct _SEEK { 1197 UCHAR OperationCode; 1198 UCHAR Reserved1:5; 1199 UCHAR LogicalUnitNumber:3; 1200 UCHAR LogicalBlockAddress[4]; 1201 UCHAR Reserved2[3]; 1202 UCHAR Control; 1203 } SEEK, *PSEEK; 1204 struct _ERASE { 1205 UCHAR OperationCode; 1206 UCHAR Long:1; 1207 UCHAR Immediate:1; 1208 UCHAR Reserved1:3; 1209 UCHAR LogicalUnitNumber:3; 1210 UCHAR Reserved2[3]; 1211 UCHAR Control; 1212 } ERASE, *PERASE; 1213 struct _START_STOP { 1214 UCHAR OperationCode; 1215 UCHAR Immediate:1; 1216 UCHAR Reserved1:4; 1217 UCHAR LogicalUnitNumber:3; 1218 UCHAR Reserved2[2]; 1219 UCHAR Start:1; 1220 UCHAR LoadEject:1; 1221 UCHAR Reserved3:6; 1222 UCHAR Control; 1223 } START_STOP, *PSTART_STOP; 1224 struct _MEDIA_REMOVAL { 1225 UCHAR OperationCode; 1226 UCHAR Reserved1:5; 1227 UCHAR LogicalUnitNumber:3; 1228 UCHAR Reserved2[2]; 1229 UCHAR Prevent:1; 1230 UCHAR Persistant:1; 1231 UCHAR Reserved3:6; 1232 UCHAR Control; 1233 } MEDIA_REMOVAL, *PMEDIA_REMOVAL; 1234 struct _SEEK_BLOCK { 1235 UCHAR OperationCode; 1236 UCHAR Immediate:1; 1237 UCHAR Reserved1:7; 1238 UCHAR BlockAddress[3]; 1239 UCHAR Link:1; 1240 UCHAR Flag:1; 1241 UCHAR Reserved2:4; 1242 UCHAR VendorUnique:2; 1243 } SEEK_BLOCK, *PSEEK_BLOCK; 1244 struct _REQUEST_BLOCK_ADDRESS { 1245 UCHAR OperationCode; 1246 UCHAR Reserved1[3]; 1247 UCHAR AllocationLength; 1248 UCHAR Link:1; 1249 UCHAR Flag:1; 1250 UCHAR Reserved2:4; 1251 UCHAR VendorUnique:2; 1252 } REQUEST_BLOCK_ADDRESS, *PREQUEST_BLOCK_ADDRESS; 1253 struct _PARTITION { 1254 UCHAR OperationCode; 1255 UCHAR Immediate:1; 1256 UCHAR Sel:1; 1257 UCHAR PartitionSelect:6; 1258 UCHAR Reserved1[3]; 1259 UCHAR Control; 1260 } PARTITION, *PPARTITION; 1261 struct _WRITE_TAPE_MARKS { 1262 UCHAR OperationCode; 1263 UCHAR Immediate:1; 1264 UCHAR WriteSetMarks:1; 1265 UCHAR Reserved:3; 1266 UCHAR LogicalUnitNumber:3; 1267 UCHAR TransferLength[3]; 1268 UCHAR Control; 1269 } WRITE_TAPE_MARKS, *PWRITE_TAPE_MARKS; 1270 struct _SPACE_TAPE_MARKS { 1271 UCHAR OperationCode; 1272 UCHAR Code:3; 1273 UCHAR Reserved:2; 1274 UCHAR LogicalUnitNumber:3; 1275 UCHAR NumMarksMSB; 1276 UCHAR NumMarks; 1277 UCHAR NumMarksLSB; 1278 union { 1279 UCHAR value; 1280 struct { 1281 UCHAR Link:1; 1282 UCHAR Flag:1; 1283 UCHAR Reserved:4; 1284 UCHAR VendorUnique:2; 1285 } Fields; 1286 } Byte6; 1287 } SPACE_TAPE_MARKS, *PSPACE_TAPE_MARKS; 1288 struct _READ_POSITION { 1289 UCHAR Operation; 1290 UCHAR BlockType:1; 1291 UCHAR Reserved1:4; 1292 UCHAR Lun:3; 1293 UCHAR Reserved2[7]; 1294 UCHAR Control; 1295 } READ_POSITION, *PREAD_POSITION; 1296 struct _CDB6READWRITETAPE { 1297 UCHAR OperationCode; 1298 UCHAR VendorSpecific:5; 1299 UCHAR Reserved:3; 1300 UCHAR TransferLenMSB; 1301 UCHAR TransferLen; 1302 UCHAR TransferLenLSB; 1303 UCHAR Link:1; 1304 UCHAR Flag:1; 1305 UCHAR Reserved1:4; 1306 UCHAR VendorUnique:2; 1307 } CDB6READWRITETAPE, *PCDB6READWRITETAPE; 1308 struct _INIT_ELEMENT_STATUS { 1309 UCHAR OperationCode; 1310 UCHAR Reserved1:5; 1311 UCHAR LogicalUnitNubmer:3; 1312 UCHAR Reserved2[3]; 1313 UCHAR Reserved3:7; 1314 UCHAR NoBarCode:1; 1315 } INIT_ELEMENT_STATUS, *PINIT_ELEMENT_STATUS; 1316 struct _INITIALIZE_ELEMENT_RANGE { 1317 UCHAR OperationCode; 1318 UCHAR Range:1; 1319 UCHAR Reserved1:4; 1320 UCHAR LogicalUnitNubmer:3; 1321 UCHAR FirstElementAddress[2]; 1322 UCHAR Reserved2[2]; 1323 UCHAR NumberOfElements[2]; 1324 UCHAR Reserved3; 1325 UCHAR Reserved4:7; 1326 UCHAR NoBarCode:1; 1327 } INITIALIZE_ELEMENT_RANGE, *PINITIALIZE_ELEMENT_RANGE; 1328 struct _POSITION_TO_ELEMENT { 1329 UCHAR OperationCode; 1330 UCHAR Reserved1:5; 1331 UCHAR LogicalUnitNumber:3; 1332 UCHAR TransportElementAddress[2]; 1333 UCHAR DestinationElementAddress[2]; 1334 UCHAR Reserved2[2]; 1335 UCHAR Flip:1; 1336 UCHAR Reserved3:7; 1337 UCHAR Control; 1338 } POSITION_TO_ELEMENT, *PPOSITION_TO_ELEMENT; 1339 struct _MOVE_MEDIUM { 1340 UCHAR OperationCode; 1341 UCHAR Reserved1:5; 1342 UCHAR LogicalUnitNumber:3; 1343 UCHAR TransportElementAddress[2]; 1344 UCHAR SourceElementAddress[2]; 1345 UCHAR DestinationElementAddress[2]; 1346 UCHAR Reserved2[2]; 1347 UCHAR Flip:1; 1348 UCHAR Reserved3:7; 1349 UCHAR Control; 1350 } MOVE_MEDIUM, *PMOVE_MEDIUM; 1351 struct _EXCHANGE_MEDIUM { 1352 UCHAR OperationCode; 1353 UCHAR Reserved1:5; 1354 UCHAR LogicalUnitNumber:3; 1355 UCHAR TransportElementAddress[2]; 1356 UCHAR SourceElementAddress[2]; 1357 UCHAR Destination1ElementAddress[2]; 1358 UCHAR Destination2ElementAddress[2]; 1359 UCHAR Flip1:1; 1360 UCHAR Flip2:1; 1361 UCHAR Reserved3:6; 1362 UCHAR Control; 1363 } EXCHANGE_MEDIUM, *PEXCHANGE_MEDIUM; 1364 struct _READ_ELEMENT_STATUS { 1365 UCHAR OperationCode; 1366 UCHAR ElementType:4; 1367 UCHAR VolTag:1; 1368 UCHAR LogicalUnitNumber:3; 1369 UCHAR StartingElementAddress[2]; 1370 UCHAR NumberOfElements[2]; 1371 UCHAR Reserved1; 1372 UCHAR AllocationLength[3]; 1373 UCHAR Reserved2; 1374 UCHAR Control; 1375 } READ_ELEMENT_STATUS, *PREAD_ELEMENT_STATUS; 1376 struct _SEND_VOLUME_TAG { 1377 UCHAR OperationCode; 1378 UCHAR ElementType:4; 1379 UCHAR Reserved1:1; 1380 UCHAR LogicalUnitNumber:3; 1381 UCHAR StartingElementAddress[2]; 1382 UCHAR Reserved2; 1383 UCHAR ActionCode:5; 1384 UCHAR Reserved3:3; 1385 UCHAR Reserved4[2]; 1386 UCHAR ParameterListLength[2]; 1387 UCHAR Reserved5; 1388 UCHAR Control; 1389 } SEND_VOLUME_TAG, *PSEND_VOLUME_TAG; 1390 struct _REQUEST_VOLUME_ELEMENT_ADDRESS { 1391 UCHAR OperationCode; 1392 UCHAR ElementType:4; 1393 UCHAR VolTag:1; 1394 UCHAR LogicalUnitNumber:3; 1395 UCHAR StartingElementAddress[2]; 1396 UCHAR NumberElements[2]; 1397 UCHAR Reserved1; 1398 UCHAR AllocationLength[3]; 1399 UCHAR Reserved2; 1400 UCHAR Control; 1401 } REQUEST_VOLUME_ELEMENT_ADDRESS, *PREQUEST_VOLUME_ELEMENT_ADDRESS; 1402 struct _LOAD_UNLOAD { 1403 UCHAR OperationCode; 1404 UCHAR Immediate:1; 1405 UCHAR Reserved1:4; 1406 UCHAR Lun:3; 1407 UCHAR Reserved2[2]; 1408 UCHAR Start:1; 1409 UCHAR LoadEject:1; 1410 UCHAR Reserved3:6; 1411 UCHAR Reserved4[3]; 1412 UCHAR Slot; 1413 UCHAR Reserved5[3]; 1414 } LOAD_UNLOAD, *PLOAD_UNLOAD; 1415 struct _MECH_STATUS { 1416 UCHAR OperationCode; 1417 UCHAR Reserved:5; 1418 UCHAR Lun:3; 1419 UCHAR Reserved1[6]; 1420 UCHAR AllocationLength[2]; 1421 UCHAR Reserved2[1]; 1422 UCHAR Control; 1423 } MECH_STATUS, *PMECH_STATUS; 1424 struct _SYNCHRONIZE_CACHE10 { 1425 UCHAR OperationCode; 1426 UCHAR RelAddr:1; 1427 UCHAR Immediate:1; 1428 UCHAR Reserved:3; 1429 UCHAR Lun:3; 1430 UCHAR LogicalBlockAddress[4]; 1431 UCHAR Reserved2; 1432 UCHAR BlockCount[2]; 1433 UCHAR Control; 1434 } SYNCHRONIZE_CACHE10, *PSYNCHRONIZE_CACHE10; 1435 struct _GET_EVENT_STATUS_NOTIFICATION { 1436 UCHAR OperationCode; 1437 UCHAR Immediate:1; 1438 UCHAR Reserved:4; 1439 UCHAR Lun:3; 1440 UCHAR Reserved2[2]; 1441 UCHAR NotificationClassRequest; 1442 UCHAR Reserved3[2]; 1443 UCHAR EventListLength[2]; 1444 UCHAR Control; 1445 } GET_EVENT_STATUS_NOTIFICATION, *PGET_EVENT_STATUS_NOTIFICATION; 1446 struct _GET_PERFORMANCE { 1447 UCHAR OperationCode; 1448 UCHAR Except:2; 1449 UCHAR Write:1; 1450 UCHAR Tolerance:2; 1451 UCHAR Reserved0:3; 1452 UCHAR StartingLBA[4]; 1453 UCHAR Reserved1[2]; 1454 UCHAR MaximumNumberOfDescriptors[2]; 1455 UCHAR Type; 1456 UCHAR Control; 1457 } GET_PERFORMANCE; 1458 struct _READ_DVD_STRUCTURE { 1459 UCHAR OperationCode; 1460 UCHAR Reserved1:5; 1461 UCHAR Lun:3; 1462 UCHAR RMDBlockNumber[4]; 1463 UCHAR LayerNumber; 1464 UCHAR Format; 1465 UCHAR AllocationLength[2]; 1466 UCHAR Reserved3:6; 1467 UCHAR AGID:2; 1468 UCHAR Control; 1469 } READ_DVD_STRUCTURE, *PREAD_DVD_STRUCTURE; 1470 struct _SET_STREAMING { 1471 UCHAR OperationCode; 1472 UCHAR Reserved[8]; 1473 UCHAR ParameterListLength[2]; 1474 UCHAR Control; 1475 } SET_STREAMING; 1476 struct _SEND_DVD_STRUCTURE { 1477 UCHAR OperationCode; 1478 UCHAR Reserved1:5; 1479 UCHAR Lun:3; 1480 UCHAR Reserved2[5]; 1481 UCHAR Format; 1482 UCHAR ParameterListLength[2]; 1483 UCHAR Reserved3; 1484 UCHAR Control; 1485 } SEND_DVD_STRUCTURE, *PSEND_DVD_STRUCTURE; 1486 struct _SEND_KEY { 1487 UCHAR OperationCode; 1488 UCHAR Reserved1:5; 1489 UCHAR Lun:3; 1490 UCHAR Reserved2[6]; 1491 UCHAR ParameterListLength[2]; 1492 UCHAR KeyFormat:6; 1493 UCHAR AGID:2; 1494 UCHAR Control; 1495 } SEND_KEY, *PSEND_KEY; 1496 struct _REPORT_KEY { 1497 UCHAR OperationCode; 1498 UCHAR Reserved1:5; 1499 UCHAR Lun:3; 1500 UCHAR LogicalBlockAddress[4]; 1501 UCHAR Reserved2[2]; 1502 UCHAR AllocationLength[2]; 1503 UCHAR KeyFormat:6; 1504 UCHAR AGID:2; 1505 UCHAR Control; 1506 } REPORT_KEY, *PREPORT_KEY; 1507 struct _SET_READ_AHEAD { 1508 UCHAR OperationCode; 1509 UCHAR Reserved1:5; 1510 UCHAR Lun:3; 1511 UCHAR TriggerLBA[4]; 1512 UCHAR ReadAheadLBA[4]; 1513 UCHAR Reserved2; 1514 UCHAR Control; 1515 } SET_READ_AHEAD, *PSET_READ_AHEAD; 1516 struct _READ_FORMATTED_CAPACITIES { 1517 UCHAR OperationCode; 1518 UCHAR Reserved1:5; 1519 UCHAR Lun:3; 1520 UCHAR Reserved2[5]; 1521 UCHAR AllocationLength[2]; 1522 UCHAR Control; 1523 } READ_FORMATTED_CAPACITIES, *PREAD_FORMATTED_CAPACITIES; 1524 struct _REPORT_LUNS { 1525 UCHAR OperationCode; 1526 UCHAR Reserved1[5]; 1527 UCHAR AllocationLength[4]; 1528 UCHAR Reserved2[1]; 1529 UCHAR Control; 1530 } REPORT_LUNS, *PREPORT_LUNS; 1531 struct _PERSISTENT_RESERVE_IN { 1532 UCHAR OperationCode; 1533 UCHAR ServiceAction:5; 1534 UCHAR Reserved1:3; 1535 UCHAR Reserved2[5]; 1536 UCHAR AllocationLength[2]; 1537 UCHAR Control; 1538 } PERSISTENT_RESERVE_IN, *PPERSISTENT_RESERVE_IN; 1539 struct _PERSISTENT_RESERVE_OUT { 1540 UCHAR OperationCode; 1541 UCHAR ServiceAction:5; 1542 UCHAR Reserved1:3; 1543 UCHAR Type:4; 1544 UCHAR Scope:4; 1545 UCHAR Reserved2[4]; 1546 UCHAR ParameterListLength[2]; 1547 UCHAR Control; 1548 } PERSISTENT_RESERVE_OUT, *PPERSISTENT_RESERVE_OUT; 1549 struct _GET_CONFIGURATION { 1550 UCHAR OperationCode; 1551 UCHAR RequestType:1; 1552 UCHAR Reserved1:7; 1553 UCHAR StartingFeature[2]; 1554 UCHAR Reserved2[3]; 1555 UCHAR AllocationLength[2]; 1556 UCHAR Control; 1557 } GET_CONFIGURATION, *PGET_CONFIGURATION; 1558 struct _SET_CD_SPEED { 1559 UCHAR OperationCode; 1560 _ANONYMOUS_UNION union { 1561 UCHAR Reserved1; 1562 _ANONYMOUS_STRUCT struct { 1563 UCHAR RotationControl:2; 1564 UCHAR Reserved3:6; 1565 } DUMMYSTRUCTNAME; 1566 } DUMMYUNIONNAME; 1567 UCHAR ReadSpeed[2]; 1568 UCHAR WriteSpeed[2]; 1569 UCHAR Reserved2[5]; 1570 UCHAR Control; 1571 } SET_CD_SPEED, *PSET_CD_SPEED; 1572 struct _READ12 { 1573 UCHAR OperationCode; 1574 UCHAR RelativeAddress:1; 1575 UCHAR Reserved1:2; 1576 UCHAR ForceUnitAccess:1; 1577 UCHAR DisablePageOut:1; 1578 UCHAR LogicalUnitNumber:3; 1579 UCHAR LogicalBlock[4]; 1580 UCHAR TransferLength[4]; 1581 UCHAR Reserved2:7; 1582 UCHAR Streaming:1; 1583 UCHAR Control; 1584 } READ12; 1585 struct _WRITE12 { 1586 UCHAR OperationCode; 1587 UCHAR RelativeAddress:1; 1588 UCHAR Reserved1:1; 1589 UCHAR EBP:1; 1590 UCHAR ForceUnitAccess:1; 1591 UCHAR DisablePageOut:1; 1592 UCHAR LogicalUnitNumber:3; 1593 UCHAR LogicalBlock[4]; 1594 UCHAR TransferLength[4]; 1595 UCHAR Reserved2:7; 1596 UCHAR Streaming:1; 1597 UCHAR Control; 1598 } WRITE12; 1599 struct _READ16 { 1600 UCHAR OperationCode; 1601 UCHAR Reserved1:3; 1602 UCHAR ForceUnitAccess:1; 1603 UCHAR DisablePageOut:1; 1604 UCHAR ReadProtect:3; 1605 UCHAR LogicalBlock[8]; 1606 UCHAR TransferLength[4]; 1607 UCHAR Reserved2:7; 1608 UCHAR Streaming:1; 1609 UCHAR Control; 1610 } READ16; 1611 struct _WRITE16 { 1612 UCHAR OperationCode; 1613 UCHAR Reserved1:3; 1614 UCHAR ForceUnitAccess:1; 1615 UCHAR DisablePageOut:1; 1616 UCHAR WriteProtect:3; 1617 UCHAR LogicalBlock[8]; 1618 UCHAR TransferLength[4]; 1619 UCHAR Reserved2:7; 1620 UCHAR Streaming:1; 1621 UCHAR Control; 1622 } WRITE16; 1623 struct _VERIFY16 { 1624 UCHAR OperationCode; 1625 UCHAR Reserved1:1; 1626 UCHAR ByteCheck:1; 1627 UCHAR BlockVerify:1; 1628 UCHAR Reserved2: 1; 1629 UCHAR DisablePageOut:1; 1630 UCHAR VerifyProtect:3; 1631 UCHAR LogicalBlock[8]; 1632 UCHAR VerificationLength[4]; 1633 UCHAR Reserved3:7; 1634 UCHAR Streaming:1; 1635 UCHAR Control; 1636 } VERIFY16; 1637 struct _SYNCHRONIZE_CACHE16 { 1638 UCHAR OperationCode; 1639 UCHAR Reserved1:1; 1640 UCHAR Immediate:1; 1641 UCHAR Reserved2:6; 1642 UCHAR LogicalBlock[8]; 1643 UCHAR BlockCount[4]; 1644 UCHAR Reserved3; 1645 UCHAR Control; 1646 } SYNCHRONIZE_CACHE16; 1647 struct _READ_CAPACITY16 { 1648 UCHAR OperationCode; 1649 UCHAR ServiceAction:5; 1650 UCHAR Reserved1:3; 1651 UCHAR LogicalBlock[8]; 1652 UCHAR BlockCount[4]; 1653 UCHAR PMI:1; 1654 UCHAR Reserved2:7; 1655 UCHAR Control; 1656 } READ_CAPACITY16; 1657 ULONG AsUlong[4]; 1658 UCHAR AsByte[16]; 1659 } CDB, *PCDB; 1660 1661 typedef struct _NOTIFICATION_EVENT_STATUS_HEADER { 1662 UCHAR EventDataLength[2]; 1663 UCHAR NotificationClass:3; 1664 UCHAR Reserved:4; 1665 UCHAR NEA:1; 1666 UCHAR SupportedEventClasses; 1667 UCHAR ClassEventData[0]; 1668 } NOTIFICATION_EVENT_STATUS_HEADER, *PNOTIFICATION_EVENT_STATUS_HEADER; 1669 1670 typedef struct _NOTIFICATION_OPERATIONAL_STATUS { 1671 UCHAR OperationalEvent:4; 1672 UCHAR Reserved1:4; 1673 UCHAR OperationalStatus:4; 1674 UCHAR Reserved2:3; 1675 UCHAR PersistentPrevented:1; 1676 UCHAR Operation[2]; 1677 } NOTIFICATION_OPERATIONAL_STATUS, *PNOTIFICATION_OPERATIONAL_STATUS; 1678 1679 typedef struct _NOTIFICATION_POWER_STATUS { 1680 UCHAR PowerEvent:4; 1681 UCHAR Reserved:4; 1682 UCHAR PowerStatus; 1683 UCHAR Reserved2[2]; 1684 } NOTIFICATION_POWER_STATUS, *PNOTIFICATION_POWER_STATUS; 1685 1686 typedef struct _NOTIFICATION_EXTERNAL_STATUS { 1687 UCHAR ExternalEvent:4; 1688 UCHAR Reserved1:4; 1689 UCHAR ExternalStatus:4; 1690 UCHAR Reserved2:3; 1691 UCHAR PersistentPrevented:1; 1692 UCHAR Request[2]; 1693 } NOTIFICATION_EXTERNAL_STATUS, *PNOTIFICATION_EXTERNAL_STATUS; 1694 1695 typedef struct _NOTIFICATION_MEDIA_STATUS { 1696 UCHAR MediaEvent:4; 1697 UCHAR Reserved:4; 1698 _ANONYMOUS_UNION union { 1699 UCHAR PowerStatus; 1700 UCHAR MediaStatus; 1701 _ANONYMOUS_STRUCT struct { 1702 UCHAR DoorTrayOpen:1; 1703 UCHAR MediaPresent:1; 1704 UCHAR ReservedX:6; 1705 } DUMMYSTRUCTNAME; 1706 } DUMMYUNIONNAME; 1707 UCHAR StartSlot; 1708 UCHAR EndSlot; 1709 } NOTIFICATION_MEDIA_STATUS, *PNOTIFICATION_MEDIA_STATUS; 1710 1711 typedef struct _NOTIFICATION_MULTI_HOST_STATUS { 1712 UCHAR MultiHostEvent:4; 1713 UCHAR Reserved1:4; 1714 UCHAR MultiHostStatus:4; 1715 UCHAR Reserved2:3; 1716 UCHAR PersistentPrevented:1; 1717 UCHAR Priority[2]; 1718 } NOTIFICATION_MULTI_HOST_STATUS, *PNOTIFICATION_MULTI_HOST_STATUS; 1719 1720 typedef struct _NOTIFICATION_BUSY_STATUS { 1721 UCHAR DeviceBusyEvent:4; 1722 UCHAR Reserved:4; 1723 UCHAR DeviceBusyStatus; 1724 UCHAR Time[2]; 1725 } NOTIFICATION_BUSY_STATUS, *PNOTIFICATION_BUSY_STATUS; 1726 1727 typedef struct _READ_DVD_STRUCTURES_HEADER { 1728 UCHAR Length[2]; 1729 UCHAR Reserved[2]; 1730 UCHAR Data[0]; 1731 } READ_DVD_STRUCTURES_HEADER, *PREAD_DVD_STRUCTURES_HEADER; 1732 1733 typedef struct _CDVD_KEY_HEADER { 1734 UCHAR DataLength[2]; 1735 UCHAR Reserved[2]; 1736 UCHAR Data[0]; 1737 } CDVD_KEY_HEADER, *PCDVD_KEY_HEADER; 1738 1739 typedef struct _CDVD_REPORT_AGID_DATA { 1740 UCHAR Reserved1[3]; 1741 UCHAR Reserved2:6; 1742 UCHAR AGID:2; 1743 } CDVD_REPORT_AGID_DATA, *PCDVD_REPORT_AGID_DATA; 1744 1745 typedef struct _CDVD_CHALLENGE_KEY_DATA { 1746 UCHAR ChallengeKeyValue[10]; 1747 UCHAR Reserved[2]; 1748 } CDVD_CHALLENGE_KEY_DATA, *PCDVD_CHALLENGE_KEY_DATA; 1749 1750 typedef struct _CDVD_KEY_DATA { 1751 UCHAR Key[5]; 1752 UCHAR Reserved[3]; 1753 } CDVD_KEY_DATA, *PCDVD_KEY_DATA; 1754 1755 typedef struct _CDVD_REPORT_ASF_DATA { 1756 UCHAR Reserved1[3]; 1757 UCHAR Success:1; 1758 UCHAR Reserved2:7; 1759 } CDVD_REPORT_ASF_DATA, *PCDVD_REPORT_ASF_DATA; 1760 1761 typedef struct _CDVD_TITLE_KEY_HEADER { 1762 UCHAR DataLength[2]; 1763 UCHAR Reserved1[1]; 1764 UCHAR Reserved2:3; 1765 UCHAR CGMS:2; 1766 UCHAR CP_SEC:1; 1767 UCHAR CPM:1; 1768 UCHAR Zero:1; 1769 CDVD_KEY_DATA TitleKey; 1770 } CDVD_TITLE_KEY_HEADER, *PCDVD_TITLE_KEY_HEADER; 1771 1772 typedef struct _FORMAT_DESCRIPTOR { 1773 UCHAR NumberOfBlocks[4]; 1774 UCHAR FormatSubType:2; 1775 UCHAR FormatType:6; 1776 UCHAR BlockLength[3]; 1777 } FORMAT_DESCRIPTOR, *PFORMAT_DESCRIPTOR; 1778 1779 typedef struct _FORMAT_LIST_HEADER { 1780 UCHAR Reserved; 1781 UCHAR VendorSpecific:1; 1782 UCHAR Immediate:1; 1783 UCHAR TryOut:1; 1784 UCHAR IP:1; 1785 UCHAR STPF:1; 1786 UCHAR DCRT:1; 1787 UCHAR DPRY:1; 1788 UCHAR FOV:1; 1789 UCHAR FormatDescriptorLength[2]; 1790 FORMAT_DESCRIPTOR Descriptors[0]; 1791 } FORMAT_LIST_HEADER, *PFORMAT_LIST_HEADER; 1792 1793 typedef struct _FORMATTED_CAPACITY_DESCRIPTOR { 1794 UCHAR NumberOfBlocks[4]; 1795 UCHAR Maximum:1; 1796 UCHAR Valid:1; 1797 UCHAR FormatType:6; 1798 UCHAR BlockLength[3]; 1799 } FORMATTED_CAPACITY_DESCRIPTOR, *PFORMATTED_CAPACITY_DESCRIPTOR; 1800 1801 typedef struct _FORMATTED_CAPACITY_LIST { 1802 UCHAR Reserved[3]; 1803 UCHAR CapacityListLength; 1804 FORMATTED_CAPACITY_DESCRIPTOR Descriptors[0]; 1805 } FORMATTED_CAPACITY_LIST, *PFORMATTED_CAPACITY_LIST; 1806 1807 typedef struct _OPC_TABLE_ENTRY { 1808 UCHAR Speed[2]; 1809 UCHAR OPCValue[6]; 1810 } OPC_TABLE_ENTRY, *POPC_TABLE_ENTRY; 1811 1812 typedef struct _DISC_INFORMATION { 1813 UCHAR Length[2]; 1814 UCHAR DiscStatus:2; 1815 UCHAR LastSessionStatus:2; 1816 UCHAR Erasable:1; 1817 UCHAR Reserved1:3; 1818 UCHAR FirstTrackNumber; 1819 UCHAR NumberOfSessionsLsb; 1820 UCHAR LastSessionFirstTrackLsb; 1821 UCHAR LastSessionLastTrackLsb; 1822 UCHAR MrwStatus:2; 1823 UCHAR MrwDirtyBit:1; 1824 UCHAR Reserved2:2; 1825 UCHAR URU:1; 1826 UCHAR DBC_V:1; 1827 UCHAR DID_V:1; 1828 UCHAR DiscType; 1829 UCHAR NumberOfSessionsMsb; 1830 UCHAR LastSessionFirstTrackMsb; 1831 UCHAR LastSessionLastTrackMsb; 1832 UCHAR DiskIdentification[4]; 1833 UCHAR LastSessionLeadIn[4]; 1834 UCHAR LastPossibleLeadOutStartTime[4]; 1835 UCHAR DiskBarCode[8]; 1836 UCHAR Reserved4; 1837 UCHAR NumberOPCEntries; 1838 OPC_TABLE_ENTRY OPCTable[1]; 1839 } DISC_INFORMATION, *PDISC_INFORMATION; 1840 1841 typedef struct _DISK_INFORMATION { 1842 UCHAR Length[2]; 1843 UCHAR DiskStatus:2; 1844 UCHAR LastSessionStatus:2; 1845 UCHAR Erasable:1; 1846 UCHAR Reserved1:3; 1847 UCHAR FirstTrackNumber; 1848 UCHAR NumberOfSessions; 1849 UCHAR LastSessionFirstTrack; 1850 UCHAR LastSessionLastTrack; 1851 UCHAR Reserved2:5; 1852 UCHAR GEN:1; 1853 UCHAR DBC_V:1; 1854 UCHAR DID_V:1; 1855 UCHAR DiskType; 1856 UCHAR Reserved3[3]; 1857 UCHAR DiskIdentification[4]; 1858 UCHAR LastSessionLeadIn[4]; 1859 UCHAR LastPossibleStartTime[4]; 1860 UCHAR DiskBarCode[8]; 1861 UCHAR Reserved4; 1862 UCHAR NumberOPCEntries; 1863 OPC_TABLE_ENTRY OPCTable[0]; 1864 } DISK_INFORMATION, *PDISK_INFORMATION; 1865 1866 typedef struct _DATA_BLOCK_HEADER { 1867 UCHAR DataMode; 1868 UCHAR Reserved[4]; 1869 _ANONYMOUS_UNION union { 1870 UCHAR LogicalBlockAddress[4]; 1871 struct { 1872 UCHAR Reserved; 1873 UCHAR M; 1874 UCHAR S; 1875 UCHAR F; 1876 } MSF; 1877 } DUMMYUNIONNAME; 1878 } DATA_BLOCK_HEADER, *PDATA_BLOCK_HEADER; 1879 1880 typedef struct _TRACK_INFORMATION { 1881 UCHAR Length[2]; 1882 UCHAR TrackNumber; 1883 UCHAR SessionNumber; 1884 UCHAR Reserved1; 1885 UCHAR TrackMode:4; 1886 UCHAR Copy:1; 1887 UCHAR Damage:1; 1888 UCHAR Reserved2:2; 1889 UCHAR DataMode:4; 1890 UCHAR FP:1; 1891 UCHAR Packet:1; 1892 UCHAR Blank:1; 1893 UCHAR RT:1; 1894 UCHAR NWA_V:1; 1895 UCHAR Reserved3:7; 1896 UCHAR TrackStartAddress[4]; 1897 UCHAR NextWritableAddress[4]; 1898 UCHAR FreeBlocks[4]; 1899 UCHAR FixedPacketSize[4]; 1900 } TRACK_INFORMATION, *PTRACK_INFORMATION; 1901 1902 typedef struct _TRACK_INFORMATION2 { 1903 UCHAR Length[2]; 1904 UCHAR TrackNumberLsb; 1905 UCHAR SessionNumberLsb; 1906 UCHAR Reserved4; 1907 UCHAR TrackMode:4; 1908 UCHAR Copy:1; 1909 UCHAR Damage:1; 1910 UCHAR Reserved5:2; 1911 UCHAR DataMode:4; 1912 UCHAR FixedPacket:1; 1913 UCHAR Packet:1; 1914 UCHAR Blank:1; 1915 UCHAR ReservedTrack:1; 1916 UCHAR NWA_V:1; 1917 UCHAR LRA_V:1; 1918 UCHAR Reserved6:6; 1919 UCHAR TrackStartAddress[4]; 1920 UCHAR NextWritableAddress[4]; 1921 UCHAR FreeBlocks[4]; 1922 UCHAR FixedPacketSize[4]; 1923 UCHAR TrackSize[4]; 1924 UCHAR LastRecordedAddress[4]; 1925 UCHAR TrackNumberMsb; 1926 UCHAR SessionNumberMsb; 1927 UCHAR Reserved7[2]; 1928 } TRACK_INFORMATION2, *PTRACK_INFORMATION2; 1929 1930 typedef struct _TRACK_INFORMATION3 { 1931 UCHAR Length[2]; 1932 UCHAR TrackNumberLsb; 1933 UCHAR SessionNumberLsb; 1934 UCHAR Reserved4; 1935 UCHAR TrackMode:4; 1936 UCHAR Copy:1; 1937 UCHAR Damage:1; 1938 UCHAR Reserved5:2; 1939 UCHAR DataMode:4; 1940 UCHAR FixedPacket:1; 1941 UCHAR Packet:1; 1942 UCHAR Blank:1; 1943 UCHAR ReservedTrack:1; 1944 UCHAR NWA_V:1; 1945 UCHAR LRA_V:1; 1946 UCHAR Reserved6:6; 1947 UCHAR TrackStartAddress[4]; 1948 UCHAR NextWritableAddress[4]; 1949 UCHAR FreeBlocks[4]; 1950 UCHAR FixedPacketSize[4]; 1951 UCHAR TrackSize[4]; 1952 UCHAR LastRecordedAddress[4]; 1953 UCHAR TrackNumberMsb; 1954 UCHAR SessionNumberMsb; 1955 UCHAR Reserved7[2]; 1956 UCHAR ReadCompatibilityLba[4]; 1957 } TRACK_INFORMATION3, *PTRACK_INFORMATION3; 1958 1959 typedef struct _PERFORMANCE_DESCRIPTOR { 1960 UCHAR RandomAccess:1; 1961 UCHAR Exact:1; 1962 UCHAR RestoreDefaults:1; 1963 UCHAR WriteRotationControl:2; 1964 UCHAR Reserved1:3; 1965 UCHAR Reserved[3]; 1966 UCHAR StartLba[4]; 1967 UCHAR EndLba[4]; 1968 UCHAR ReadSize[4]; 1969 UCHAR ReadTime[4]; 1970 UCHAR WriteSize[4]; 1971 UCHAR WriteTime[4]; 1972 } PERFORMANCE_DESCRIPTOR, *PPERFORMANCE_DESCRIPTOR; 1973 1974 typedef struct _SCSI_EXTENDED_MESSAGE { 1975 UCHAR InitialMessageCode; 1976 UCHAR MessageLength; 1977 UCHAR MessageType; 1978 union _EXTENDED_ARGUMENTS { 1979 struct { 1980 UCHAR Modifier[4]; 1981 } Modify; 1982 struct { 1983 UCHAR TransferPeriod; 1984 UCHAR ReqAckOffset; 1985 } Synchronous; 1986 struct{ 1987 UCHAR Width; 1988 } Wide; 1989 } ExtendedArguments; 1990 }SCSI_EXTENDED_MESSAGE, *PSCSI_EXTENDED_MESSAGE; 1991 1992 #ifndef _INQUIRYDATA_DEFINED /* also in minitape.h */ 1993 #define _INQUIRYDATA_DEFINED 1994 1995 #define INQUIRYDATABUFFERSIZE 36 1996 1997 #if (NTDDI_VERSION < NTDDI_WINXP) 1998 typedef struct _INQUIRYDATA { 1999 UCHAR DeviceType:5; 2000 UCHAR DeviceTypeQualifier:3; 2001 UCHAR DeviceTypeModifier:7; 2002 UCHAR RemovableMedia:1; 2003 UCHAR Versions; 2004 UCHAR ResponseDataFormat:4; 2005 UCHAR HiSupport:1; 2006 UCHAR NormACA:1; 2007 UCHAR ReservedBit:1; 2008 UCHAR AERC:1; 2009 UCHAR AdditionalLength; 2010 UCHAR Reserved[2]; 2011 UCHAR SoftReset:1; 2012 UCHAR CommandQueue:1; 2013 UCHAR Reserved2:1; 2014 UCHAR LinkedCommands:1; 2015 UCHAR Synchronous:1; 2016 UCHAR Wide16Bit:1; 2017 UCHAR Wide32Bit:1; 2018 UCHAR RelativeAddressing:1; 2019 UCHAR VendorId[8]; 2020 UCHAR ProductId[16]; 2021 UCHAR ProductRevisionLevel[4]; 2022 UCHAR VendorSpecific[20]; 2023 UCHAR Reserved3[40]; 2024 } INQUIRYDATA, *PINQUIRYDATA; 2025 #else 2026 typedef struct _INQUIRYDATA { 2027 UCHAR DeviceType:5; 2028 UCHAR DeviceTypeQualifier:3; 2029 UCHAR DeviceTypeModifier:7; 2030 UCHAR RemovableMedia:1; 2031 _ANONYMOUS_UNION union { 2032 UCHAR Versions; 2033 _ANONYMOUS_STRUCT struct { 2034 UCHAR ANSIVersion:3; 2035 UCHAR ECMAVersion:3; 2036 UCHAR ISOVersion:2; 2037 } DUMMYSTRUCTNAME; 2038 } DUMMYUNIONNAME; 2039 UCHAR ResponseDataFormat:4; 2040 UCHAR HiSupport:1; 2041 UCHAR NormACA:1; 2042 UCHAR TerminateTask:1; 2043 UCHAR AERC:1; 2044 UCHAR AdditionalLength; 2045 UCHAR Reserved; 2046 UCHAR Addr16:1; 2047 UCHAR Addr32:1; 2048 UCHAR AckReqQ:1; 2049 UCHAR MediumChanger:1; 2050 UCHAR MultiPort:1; 2051 UCHAR ReservedBit2:1; 2052 UCHAR EnclosureServices:1; 2053 UCHAR ReservedBit3:1; 2054 UCHAR SoftReset:1; 2055 UCHAR CommandQueue:1; 2056 UCHAR TransferDisable:1; 2057 UCHAR LinkedCommands:1; 2058 UCHAR Synchronous:1; 2059 UCHAR Wide16Bit:1; 2060 UCHAR Wide32Bit:1; 2061 UCHAR RelativeAddressing:1; 2062 UCHAR VendorId[8]; 2063 UCHAR ProductId[16]; 2064 UCHAR ProductRevisionLevel[4]; 2065 UCHAR VendorSpecific[20]; 2066 UCHAR Reserved3[40]; 2067 } INQUIRYDATA, *PINQUIRYDATA; 2068 #endif /* (NTDDI_VERSION < NTDDI_WINXP) */ 2069 2070 #endif /* _INQUIRYDATA_DEFINED */ 2071 2072 typedef struct _VPD_MEDIA_SERIAL_NUMBER_PAGE { 2073 UCHAR DeviceType:5; 2074 UCHAR DeviceTypeQualifier:3; 2075 UCHAR PageCode; 2076 UCHAR Reserved; 2077 UCHAR PageLength; 2078 UCHAR SerialNumber[0]; 2079 } VPD_MEDIA_SERIAL_NUMBER_PAGE, *PVPD_MEDIA_SERIAL_NUMBER_PAGE; 2080 2081 typedef struct _VPD_SERIAL_NUMBER_PAGE { 2082 UCHAR DeviceType:5; 2083 UCHAR DeviceTypeQualifier:3; 2084 UCHAR PageCode; 2085 UCHAR Reserved; 2086 UCHAR PageLength; 2087 UCHAR SerialNumber[0]; 2088 } VPD_SERIAL_NUMBER_PAGE, *PVPD_SERIAL_NUMBER_PAGE; 2089 2090 typedef enum _VPD_CODE_SET { 2091 VpdCodeSetReserved = 0, 2092 VpdCodeSetBinary = 1, 2093 VpdCodeSetAscii = 2, 2094 VpdCodeSetUTF8 = 3 2095 } VPD_CODE_SET, *PVPD_CODE_SET; 2096 2097 typedef enum _VPD_ASSOCIATION { 2098 VpdAssocDevice = 0, 2099 VpdAssocPort = 1, 2100 VpdAssocTarget = 2, 2101 VpdAssocReserved1 = 3, 2102 VpdAssocReserved2 = 4 2103 } VPD_ASSOCIATION, *PVPD_ASSOCIATION; 2104 2105 typedef enum _VPD_IDENTIFIER_TYPE { 2106 VpdIdentifierTypeVendorSpecific = 0, 2107 VpdIdentifierTypeVendorId = 1, 2108 VpdIdentifierTypeEUI64 = 2, 2109 VpdIdentifierTypeFCPHName = 3, 2110 VpdIdentifierTypePortRelative = 4, 2111 VpdIdentifierTypeTargetPortGroup = 5, 2112 VpdIdentifierTypeLogicalUnitGroup = 6, 2113 VpdIdentifierTypeMD5LogicalUnitId = 7, 2114 VpdIdentifierTypeSCSINameString = 8 2115 } VPD_IDENTIFIER_TYPE, *PVPD_IDENTIFIER_TYPE; 2116 2117 typedef struct _VPD_IDENTIFICATION_DESCRIPTOR { 2118 UCHAR CodeSet:4; 2119 UCHAR Reserved:4; 2120 UCHAR IdentifierType:4; 2121 UCHAR Association:2; 2122 UCHAR Reserved2:2; 2123 UCHAR Reserved3; 2124 UCHAR IdentifierLength; 2125 UCHAR Identifier[0]; 2126 } VPD_IDENTIFICATION_DESCRIPTOR, *PVPD_IDENTIFICATION_DESCRIPTOR; 2127 2128 typedef struct _VPD_IDENTIFICATION_PAGE { 2129 UCHAR DeviceType:5; 2130 UCHAR DeviceTypeQualifier:3; 2131 UCHAR PageCode; 2132 UCHAR Reserved; 2133 UCHAR PageLength; 2134 UCHAR Descriptors[0]; 2135 } VPD_IDENTIFICATION_PAGE, *PVPD_IDENTIFICATION_PAGE; 2136 2137 typedef struct _VPD_SUPPORTED_PAGES_PAGE { 2138 UCHAR DeviceType:5; 2139 UCHAR DeviceTypeQualifier:3; 2140 UCHAR PageCode; 2141 UCHAR Reserved; 2142 UCHAR PageLength; 2143 UCHAR SupportedPageList[0]; 2144 } VPD_SUPPORTED_PAGES_PAGE, *PVPD_SUPPORTED_PAGES_PAGE; 2145 2146 typedef struct _PRI_REGISTRATION_LIST { 2147 UCHAR Generation[4]; 2148 UCHAR AdditionalLength[4]; 2149 UCHAR ReservationKeyList[0][8]; 2150 } PRI_REGISTRATION_LIST, *PPRI_REGISTRATION_LIST; 2151 2152 typedef struct _PRI_RESERVATION_DESCRIPTOR { 2153 UCHAR ReservationKey[8]; 2154 UCHAR ScopeSpecificAddress[4]; 2155 UCHAR Reserved; 2156 UCHAR Type:4; 2157 UCHAR Scope:4; 2158 UCHAR Obsolete[2]; 2159 } PRI_RESERVATION_DESCRIPTOR, *PPRI_RESERVATION_DESCRIPTOR; 2160 2161 typedef struct _PRI_RESERVATION_LIST { 2162 UCHAR Generation[4]; 2163 UCHAR AdditionalLength[4]; 2164 PRI_RESERVATION_DESCRIPTOR Reservations[0]; 2165 } PRI_RESERVATION_LIST, *PPRI_RESERVATION_LIST; 2166 2167 typedef struct _PRO_PARAMETER_LIST { 2168 UCHAR ReservationKey[8]; 2169 UCHAR ServiceActionReservationKey[8]; 2170 UCHAR ScopeSpecificAddress[4]; 2171 UCHAR ActivatePersistThroughPowerLoss:1; 2172 UCHAR Reserved1:7; 2173 UCHAR Reserved2; 2174 UCHAR Obsolete[2]; 2175 } PRO_PARAMETER_LIST, *PPRO_PARAMETER_LIST; 2176 2177 typedef struct _SENSE_DATA { 2178 UCHAR ErrorCode:7; 2179 UCHAR Valid:1; 2180 UCHAR SegmentNumber; 2181 UCHAR SenseKey:4; 2182 UCHAR Reserved:1; 2183 UCHAR IncorrectLength:1; 2184 UCHAR EndOfMedia:1; 2185 UCHAR FileMark:1; 2186 UCHAR Information[4]; 2187 UCHAR AdditionalSenseLength; 2188 UCHAR CommandSpecificInformation[4]; 2189 UCHAR AdditionalSenseCode; 2190 UCHAR AdditionalSenseCodeQualifier; 2191 UCHAR FieldReplaceableUnitCode; 2192 UCHAR SenseKeySpecific[3]; 2193 } SENSE_DATA, *PSENSE_DATA; 2194 2195 /* Read Capacity Data. Returned in Big Endian format */ 2196 typedef struct _READ_CAPACITY_DATA { 2197 ULONG LogicalBlockAddress; 2198 ULONG BytesPerBlock; 2199 } READ_CAPACITY_DATA, *PREAD_CAPACITY_DATA; 2200 2201 typedef struct _READ_CAPACITY_DATA_EX { 2202 LARGE_INTEGER LogicalBlockAddress; 2203 ULONG BytesPerBlock; 2204 } READ_CAPACITY_DATA_EX, *PREAD_CAPACITY_DATA_EX; 2205 2206 /* Read Block Limits Data. Returned in Big Endian format */ 2207 typedef struct _READ_BLOCK_LIMITS { 2208 UCHAR Reserved; 2209 UCHAR BlockMaximumSize[3]; 2210 UCHAR BlockMinimumSize[2]; 2211 } READ_BLOCK_LIMITS_DATA, *PREAD_BLOCK_LIMITS_DATA; 2212 2213 typedef struct _READ_BUFFER_CAPACITY_DATA { 2214 UCHAR DataLength[2]; 2215 UCHAR Reserved1; 2216 UCHAR BlockDataReturned:1; 2217 UCHAR Reserved4:7; 2218 UCHAR TotalBufferSize[4]; 2219 UCHAR AvailableBufferSize[4]; 2220 } READ_BUFFER_CAPACITY_DATA, *PREAD_BUFFER_CAPACITY_DATA; 2221 2222 typedef struct _MODE_PARAMETER_HEADER { 2223 UCHAR ModeDataLength; 2224 UCHAR MediumType; 2225 UCHAR DeviceSpecificParameter; 2226 UCHAR BlockDescriptorLength; 2227 } MODE_PARAMETER_HEADER, *PMODE_PARAMETER_HEADER; 2228 2229 typedef struct _MODE_PARAMETER_HEADER10 { 2230 UCHAR ModeDataLength[2]; 2231 UCHAR MediumType; 2232 UCHAR DeviceSpecificParameter; 2233 UCHAR Reserved[2]; 2234 UCHAR BlockDescriptorLength[2]; 2235 } MODE_PARAMETER_HEADER10, *PMODE_PARAMETER_HEADER10; 2236 2237 typedef struct _MODE_PARAMETER_BLOCK { 2238 UCHAR DensityCode; 2239 UCHAR NumberOfBlocks[3]; 2240 UCHAR Reserved; 2241 UCHAR BlockLength[3]; 2242 } MODE_PARAMETER_BLOCK, *PMODE_PARAMETER_BLOCK; 2243 2244 typedef struct _MODE_DISCONNECT_PAGE { 2245 UCHAR PageCode:6; 2246 UCHAR Reserved:1; 2247 UCHAR PageSavable:1; 2248 UCHAR PageLength; 2249 UCHAR BufferFullRatio; 2250 UCHAR BufferEmptyRatio; 2251 UCHAR BusInactivityLimit[2]; 2252 UCHAR BusDisconnectTime[2]; 2253 UCHAR BusConnectTime[2]; 2254 UCHAR MaximumBurstSize[2]; 2255 UCHAR DataTransferDisconnect:2; 2256 UCHAR Reserved2[3]; 2257 } MODE_DISCONNECT_PAGE, *PMODE_DISCONNECT_PAGE; 2258 2259 typedef struct _MODE_CACHING_PAGE { 2260 UCHAR PageCode:6; 2261 UCHAR Reserved:1; 2262 UCHAR PageSavable:1; 2263 UCHAR PageLength; 2264 UCHAR ReadDisableCache:1; 2265 UCHAR MultiplicationFactor:1; 2266 UCHAR WriteCacheEnable:1; 2267 UCHAR Reserved2:5; 2268 UCHAR WriteRetensionPriority:4; 2269 UCHAR ReadRetensionPriority:4; 2270 UCHAR DisablePrefetchTransfer[2]; 2271 UCHAR MinimumPrefetch[2]; 2272 UCHAR MaximumPrefetch[2]; 2273 UCHAR MaximumPrefetchCeiling[2]; 2274 } MODE_CACHING_PAGE, *PMODE_CACHING_PAGE; 2275 2276 typedef struct _MODE_CDROM_WRITE_PARAMETERS_PAGE2 { 2277 UCHAR PageCode:6; 2278 UCHAR Reserved:1; 2279 UCHAR PageSavable:1; 2280 UCHAR PageLength; 2281 UCHAR WriteType:4; 2282 UCHAR TestWrite:1; 2283 UCHAR LinkSizeValid:1; 2284 UCHAR BufferUnderrunFreeEnabled:1; 2285 UCHAR Reserved2:1; 2286 UCHAR TrackMode:4; 2287 UCHAR Copy:1; 2288 UCHAR FixedPacket:1; 2289 UCHAR MultiSession:2; 2290 UCHAR DataBlockType:4; 2291 UCHAR Reserved3:4; 2292 UCHAR LinkSize; 2293 UCHAR Reserved4; 2294 UCHAR HostApplicationCode:6; 2295 UCHAR Reserved5:2; 2296 UCHAR SessionFormat; 2297 UCHAR Reserved6; 2298 UCHAR PacketSize[4]; 2299 UCHAR AudioPauseLength[2]; 2300 UCHAR MediaCatalogNumber[16]; 2301 UCHAR ISRC[16]; 2302 UCHAR SubHeaderData[4]; 2303 } MODE_CDROM_WRITE_PARAMETERS_PAGE2, *PMODE_CDROM_WRITE_PARAMETERS_PAGE2; 2304 2305 typedef struct _MODE_MRW_PAGE { 2306 UCHAR PageCode:6; 2307 UCHAR Reserved:1; 2308 UCHAR PageSavable:1; 2309 UCHAR PageLength; 2310 UCHAR Reserved1; 2311 UCHAR LbaSpace:1; 2312 UCHAR Reserved2:7; 2313 UCHAR Reserved3[4]; 2314 } MODE_MRW_PAGE, *PMODE_MRW_PAGE; 2315 2316 typedef struct _MODE_FLEXIBLE_DISK_PAGE { 2317 UCHAR PageCode:6; 2318 UCHAR Reserved:1; 2319 UCHAR PageSavable:1; 2320 UCHAR PageLength; 2321 UCHAR TransferRate[2]; 2322 UCHAR NumberOfHeads; 2323 UCHAR SectorsPerTrack; 2324 UCHAR BytesPerSector[2]; 2325 UCHAR NumberOfCylinders[2]; 2326 UCHAR StartWritePrecom[2]; 2327 UCHAR StartReducedCurrent[2]; 2328 UCHAR StepRate[2]; 2329 UCHAR StepPluseWidth; 2330 UCHAR HeadSettleDelay[2]; 2331 UCHAR MotorOnDelay; 2332 UCHAR MotorOffDelay; 2333 UCHAR Reserved2:5; 2334 UCHAR MotorOnAsserted:1; 2335 UCHAR StartSectorNumber:1; 2336 UCHAR TrueReadySignal:1; 2337 UCHAR StepPlusePerCyclynder:4; 2338 UCHAR Reserved3:4; 2339 UCHAR WriteCompenstation; 2340 UCHAR HeadLoadDelay; 2341 UCHAR HeadUnloadDelay; 2342 UCHAR Pin2Usage:4; 2343 UCHAR Pin34Usage:4; 2344 UCHAR Pin1Usage:4; 2345 UCHAR Pin4Usage:4; 2346 UCHAR MediumRotationRate[2]; 2347 UCHAR Reserved4[2]; 2348 } MODE_FLEXIBLE_DISK_PAGE, *PMODE_FLEXIBLE_DISK_PAGE; 2349 2350 typedef struct _MODE_FORMAT_PAGE { 2351 UCHAR PageCode:6; 2352 UCHAR Reserved:1; 2353 UCHAR PageSavable:1; 2354 UCHAR PageLength; 2355 UCHAR TracksPerZone[2]; 2356 UCHAR AlternateSectorsPerZone[2]; 2357 UCHAR AlternateTracksPerZone[2]; 2358 UCHAR AlternateTracksPerLogicalUnit[2]; 2359 UCHAR SectorsPerTrack[2]; 2360 UCHAR BytesPerPhysicalSector[2]; 2361 UCHAR Interleave[2]; 2362 UCHAR TrackSkewFactor[2]; 2363 UCHAR CylinderSkewFactor[2]; 2364 UCHAR Reserved2:4; 2365 UCHAR SurfaceFirst:1; 2366 UCHAR RemovableMedia:1; 2367 UCHAR HardSectorFormating:1; 2368 UCHAR SoftSectorFormating:1; 2369 UCHAR Reserved3[3]; 2370 } MODE_FORMAT_PAGE, *PMODE_FORMAT_PAGE; 2371 2372 typedef struct _MODE_RIGID_GEOMETRY_PAGE { 2373 UCHAR PageCode:6; 2374 UCHAR Reserved:1; 2375 UCHAR PageSavable:1; 2376 UCHAR PageLength; 2377 UCHAR NumberOfCylinders[3]; 2378 UCHAR NumberOfHeads; 2379 UCHAR StartWritePrecom[3]; 2380 UCHAR StartReducedCurrent[3]; 2381 UCHAR DriveStepRate[2]; 2382 UCHAR LandZoneCyclinder[3]; 2383 UCHAR RotationalPositionLock:2; 2384 UCHAR Reserved2:6; 2385 UCHAR RotationOffset; 2386 UCHAR Reserved3; 2387 UCHAR RoataionRate[2]; 2388 UCHAR Reserved4[2]; 2389 } MODE_RIGID_GEOMETRY_PAGE, *PMODE_RIGID_GEOMETRY_PAGE; 2390 2391 typedef struct _MODE_READ_WRITE_RECOVERY_PAGE { 2392 UCHAR PageCode:6; 2393 UCHAR Reserved1:1; 2394 UCHAR PSBit:1; 2395 UCHAR PageLength; 2396 UCHAR DCRBit:1; 2397 UCHAR DTEBit:1; 2398 UCHAR PERBit:1; 2399 UCHAR EERBit:1; 2400 UCHAR RCBit:1; 2401 UCHAR TBBit:1; 2402 UCHAR ARRE:1; 2403 UCHAR AWRE:1; 2404 UCHAR ReadRetryCount; 2405 UCHAR Reserved4[4]; 2406 UCHAR WriteRetryCount; 2407 UCHAR Reserved5[3]; 2408 } MODE_READ_WRITE_RECOVERY_PAGE, *PMODE_READ_WRITE_RECOVERY_PAGE; 2409 2410 typedef struct _MODE_READ_RECOVERY_PAGE { 2411 UCHAR PageCode:6; 2412 UCHAR Reserved1:1; 2413 UCHAR PSBit:1; 2414 UCHAR PageLength; 2415 UCHAR DCRBit:1; 2416 UCHAR DTEBit:1; 2417 UCHAR PERBit:1; 2418 UCHAR Reserved2:1; 2419 UCHAR RCBit:1; 2420 UCHAR TBBit:1; 2421 UCHAR Reserved3:2; 2422 UCHAR ReadRetryCount; 2423 UCHAR Reserved4[4]; 2424 } MODE_READ_RECOVERY_PAGE, *PMODE_READ_RECOVERY_PAGE; 2425 2426 typedef struct _MODE_INFO_EXCEPTIONS { 2427 UCHAR PageCode:6; 2428 UCHAR Reserved1:1; 2429 UCHAR PSBit:1; 2430 UCHAR PageLength; 2431 _ANONYMOUS_UNION union { 2432 UCHAR Flags; 2433 _ANONYMOUS_STRUCT struct { 2434 UCHAR LogErr:1; 2435 UCHAR Reserved2:1; 2436 UCHAR Test:1; 2437 UCHAR Dexcpt:1; 2438 UCHAR Reserved3:3; 2439 UCHAR Perf:1; 2440 } DUMMYSTRUCTNAME; 2441 } DUMMYUNIONNAME; 2442 UCHAR ReportMethod:4; 2443 UCHAR Reserved4:4; 2444 UCHAR IntervalTimer[4]; 2445 UCHAR ReportCount[4]; 2446 } MODE_INFO_EXCEPTIONS, *PMODE_INFO_EXCEPTIONS; 2447 2448 typedef struct _POWER_CONDITION_PAGE { 2449 UCHAR PageCode:6; 2450 UCHAR Reserved:1; 2451 UCHAR PSBit:1; 2452 UCHAR PageLength; 2453 UCHAR Reserved2; 2454 UCHAR Standby:1; 2455 UCHAR Idle:1; 2456 UCHAR Reserved3:6; 2457 UCHAR IdleTimer[4]; 2458 UCHAR StandbyTimer[4]; 2459 } POWER_CONDITION_PAGE, *PPOWER_CONDITION_PAGE; 2460 2461 typedef struct _CDDA_OUTPUT_PORT { 2462 UCHAR ChannelSelection:4; 2463 UCHAR Reserved:4; 2464 UCHAR Volume; 2465 } CDDA_OUTPUT_PORT, *PCDDA_OUTPUT_PORT; 2466 2467 typedef struct _CDAUDIO_CONTROL_PAGE { 2468 UCHAR PageCode:6; 2469 UCHAR Reserved:1; 2470 UCHAR PSBit:1; 2471 UCHAR PageLength; 2472 UCHAR Reserved2:1; 2473 UCHAR StopOnTrackCrossing:1; 2474 UCHAR Immediate:1; 2475 UCHAR Reserved3:5; 2476 UCHAR Reserved4[3]; 2477 UCHAR Obsolete[2]; 2478 CDDA_OUTPUT_PORT CDDAOutputPorts[4]; 2479 } CDAUDIO_CONTROL_PAGE, *PCDAUDIO_CONTROL_PAGE; 2480 2481 typedef struct _CDVD_FEATURE_SET_PAGE { 2482 UCHAR PageCode:6; 2483 UCHAR Reserved:1; 2484 UCHAR PSBit:1; 2485 UCHAR PageLength; 2486 UCHAR CDAudio[2]; 2487 UCHAR EmbeddedChanger[2]; 2488 UCHAR PacketSMART[2]; 2489 UCHAR PersistantPrevent[2]; 2490 UCHAR EventStatusNotification[2]; 2491 UCHAR DigitalOutput[2]; 2492 UCHAR CDSequentialRecordable[2]; 2493 UCHAR DVDSequentialRecordable[2]; 2494 UCHAR RandomRecordable[2]; 2495 UCHAR KeyExchange[2]; 2496 UCHAR Reserved2[2]; 2497 } CDVD_FEATURE_SET_PAGE, *PCDVD_FEATURE_SET_PAGE; 2498 2499 typedef struct _CDVD_INACTIVITY_TIMEOUT_PAGE { 2500 UCHAR PageCode:6; 2501 UCHAR Reserved:1; 2502 UCHAR PSBit:1; 2503 UCHAR PageLength; 2504 UCHAR Reserved2[2]; 2505 UCHAR SWPP:1; 2506 UCHAR DISP:1; 2507 UCHAR Reserved3:6; 2508 UCHAR Reserved4; 2509 UCHAR GroupOneMinimumTimeout[2]; 2510 UCHAR GroupTwoMinimumTimeout[2]; 2511 } CDVD_INACTIVITY_TIMEOUT_PAGE, *PCDVD_INACTIVITY_TIMEOUT_PAGE; 2512 2513 typedef struct _CDVD_CAPABILITIES_PAGE { 2514 UCHAR PageCode:6; 2515 UCHAR Reserved:1; 2516 UCHAR PSBit:1; 2517 UCHAR PageLength; 2518 UCHAR CDRRead:1; 2519 UCHAR CDERead:1; 2520 UCHAR Method2:1; 2521 UCHAR DVDROMRead:1; 2522 UCHAR DVDRRead:1; 2523 UCHAR DVDRAMRead:1; 2524 UCHAR Reserved2:2; 2525 UCHAR CDRWrite:1; 2526 UCHAR CDEWrite:1; 2527 UCHAR TestWrite:1; 2528 UCHAR Reserved3:1; 2529 UCHAR DVDRWrite:1; 2530 UCHAR DVDRAMWrite:1; 2531 UCHAR Reserved4:2; 2532 UCHAR AudioPlay:1; 2533 UCHAR Composite:1; 2534 UCHAR DigitalPortOne:1; 2535 UCHAR DigitalPortTwo:1; 2536 UCHAR Mode2Form1:1; 2537 UCHAR Mode2Form2:1; 2538 UCHAR MultiSession:1; 2539 UCHAR BufferUnderrunFree:1; 2540 UCHAR CDDA:1; 2541 UCHAR CDDAAccurate:1; 2542 UCHAR RWSupported:1; 2543 UCHAR RWDeinterleaved:1; 2544 UCHAR C2Pointers:1; 2545 UCHAR ISRC:1; 2546 UCHAR UPC:1; 2547 UCHAR ReadBarCodeCapable:1; 2548 UCHAR Lock:1; 2549 UCHAR LockState:1; 2550 UCHAR PreventJumper:1; 2551 UCHAR Eject:1; 2552 UCHAR Reserved6:1; 2553 UCHAR LoadingMechanismType:3; 2554 UCHAR SeparateVolume:1; 2555 UCHAR SeperateChannelMute:1; 2556 UCHAR SupportsDiskPresent:1; 2557 UCHAR SWSlotSelection:1; 2558 UCHAR SideChangeCapable:1; 2559 UCHAR RWInLeadInReadable:1; 2560 UCHAR Reserved7:2; 2561 _ANONYMOUS_UNION union { 2562 UCHAR ReadSpeedMaximum[2]; 2563 UCHAR ObsoleteReserved[2]; 2564 } DUMMYUNIONNAME; 2565 UCHAR NumberVolumeLevels[2]; 2566 UCHAR BufferSize[2]; 2567 _ANONYMOUS_UNION union { 2568 UCHAR ReadSpeedCurrent[2]; 2569 UCHAR ObsoleteReserved2[2]; 2570 } DUMMYUNIONNAME2; 2571 UCHAR ObsoleteReserved3; 2572 UCHAR Reserved8:1; 2573 UCHAR BCK:1; 2574 UCHAR RCK:1; 2575 UCHAR LSBF:1; 2576 UCHAR Length:2; 2577 UCHAR Reserved9:2; 2578 _ANONYMOUS_UNION union { 2579 UCHAR WriteSpeedMaximum[2]; 2580 UCHAR ObsoleteReserved4[2]; 2581 } DUMMYUNIONNAME3; 2582 _ANONYMOUS_UNION union { 2583 UCHAR WriteSpeedCurrent[2]; 2584 UCHAR ObsoleteReserved11[2]; 2585 } DUMMYUNIONNAME4; 2586 _ANONYMOUS_UNION union { 2587 UCHAR CopyManagementRevision[2]; 2588 UCHAR Reserved10[2]; 2589 } DUMMYUNIONNAME5; 2590 } CDVD_CAPABILITIES_PAGE, *PCDVD_CAPABILITIES_PAGE; 2591 2592 typedef struct _LUN_LIST { 2593 UCHAR LunListLength[4]; 2594 UCHAR Reserved[4]; 2595 UCHAR Lun[0][8]; 2596 } LUN_LIST, *PLUN_LIST; 2597 2598 typedef struct _MODE_PARM_READ_WRITE { 2599 MODE_PARAMETER_HEADER ParameterListHeader; 2600 MODE_PARAMETER_BLOCK ParameterListBlock; 2601 } MODE_PARM_READ_WRITE_DATA, *PMODE_PARM_READ_WRITE_DATA; 2602 2603 typedef struct _PORT_OUTPUT { 2604 UCHAR ChannelSelection; 2605 UCHAR Volume; 2606 } PORT_OUTPUT, *PPORT_OUTPUT; 2607 2608 typedef struct _AUDIO_OUTPUT { 2609 UCHAR CodePage; 2610 UCHAR ParameterLength; 2611 UCHAR Immediate; 2612 UCHAR Reserved[2]; 2613 UCHAR LbaFormat; 2614 UCHAR LogicalBlocksPerSecond[2]; 2615 PORT_OUTPUT PortOutput[4]; 2616 } AUDIO_OUTPUT, *PAUDIO_OUTPUT; 2617 2618 /* Atapi 2.5 changers */ 2619 typedef struct _MECHANICAL_STATUS_INFORMATION_HEADER { 2620 UCHAR CurrentSlot:5; 2621 UCHAR ChangerState:2; 2622 UCHAR Fault:1; 2623 UCHAR Reserved:5; 2624 UCHAR MechanismState:3; 2625 UCHAR CurrentLogicalBlockAddress[3]; 2626 UCHAR NumberAvailableSlots; 2627 UCHAR SlotTableLength[2]; 2628 } MECHANICAL_STATUS_INFORMATION_HEADER, *PMECHANICAL_STATUS_INFORMATION_HEADER; 2629 2630 typedef struct _SLOT_TABLE_INFORMATION { 2631 UCHAR DiscChanged:1; 2632 UCHAR Reserved:6; 2633 UCHAR DiscPresent:1; 2634 UCHAR Reserved2[3]; 2635 } SLOT_TABLE_INFORMATION, *PSLOT_TABLE_INFORMATION; 2636 2637 typedef struct _MECHANICAL_STATUS { 2638 MECHANICAL_STATUS_INFORMATION_HEADER MechanicalStatusHeader; 2639 SLOT_TABLE_INFORMATION SlotTableInfo[1]; 2640 } MECHANICAL_STATUS, *PMECHANICAL_STATUS; 2641 2642 /* Tape definitions */ 2643 typedef struct _TAPE_POSITION_DATA { 2644 UCHAR Reserved1:2; 2645 UCHAR BlockPositionUnsupported:1; 2646 UCHAR Reserved2:3; 2647 UCHAR EndOfPartition:1; 2648 UCHAR BeginningOfPartition:1; 2649 UCHAR PartitionNumber; 2650 USHORT Reserved3; 2651 UCHAR FirstBlock[4]; 2652 UCHAR LastBlock[4]; 2653 UCHAR Reserved4; 2654 UCHAR NumberOfBlocks[3]; 2655 UCHAR NumberOfBytes[4]; 2656 } TAPE_POSITION_DATA, *PTAPE_POSITION_DATA; 2657 2658 /* This structure is used to convert little endian ULONGs 2659 to SCSI CDB big endians values. */ 2660 typedef union _EIGHT_BYTE { 2661 _ANONYMOUS_STRUCT struct { 2662 UCHAR Byte0; 2663 UCHAR Byte1; 2664 UCHAR Byte2; 2665 UCHAR Byte3; 2666 UCHAR Byte4; 2667 UCHAR Byte5; 2668 UCHAR Byte6; 2669 UCHAR Byte7; 2670 } DUMMYSTRUCTNAME; 2671 ULONGLONG AsULongLong; 2672 } EIGHT_BYTE, *PEIGHT_BYTE; 2673 2674 typedef union _FOUR_BYTE { 2675 _ANONYMOUS_STRUCT struct { 2676 UCHAR Byte0; 2677 UCHAR Byte1; 2678 UCHAR Byte2; 2679 UCHAR Byte3; 2680 } DUMMYSTRUCTNAME; 2681 ULONG AsULong; 2682 } FOUR_BYTE, *PFOUR_BYTE; 2683 2684 typedef union _TWO_BYTE { 2685 _ANONYMOUS_STRUCT struct { 2686 UCHAR Byte0; 2687 UCHAR Byte1; 2688 } DUMMYSTRUCTNAME; 2689 USHORT AsUShort; 2690 } TWO_BYTE, *PTWO_BYTE; 2691 2692 /* Byte reversing macro for converting between 2693 big- and little-endian formats */ 2694 #define REVERSE_BYTES_QUAD(Destination, Source) { \ 2695 PEIGHT_BYTE _val1 = (PEIGHT_BYTE)(Destination); \ 2696 PEIGHT_BYTE _val2 = (PEIGHT_BYTE)(Source); \ 2697 _val1->Byte7 = _val2->Byte0; \ 2698 _val1->Byte6 = _val2->Byte1; \ 2699 _val1->Byte5 = _val2->Byte2; \ 2700 _val1->Byte4 = _val2->Byte3; \ 2701 _val1->Byte3 = _val2->Byte4; \ 2702 _val1->Byte2 = _val2->Byte5; \ 2703 _val1->Byte1 = _val2->Byte6; \ 2704 _val1->Byte0 = _val2->Byte7; \ 2705 } 2706 2707 #define REVERSE_BYTES(Destination, Source) { \ 2708 PFOUR_BYTE _val1 = (PFOUR_BYTE)(Destination); \ 2709 PFOUR_BYTE _val2 = (PFOUR_BYTE)(Source); \ 2710 _val1->Byte3 = _val2->Byte0; \ 2711 _val1->Byte2 = _val2->Byte1; \ 2712 _val1->Byte1 = _val2->Byte2; \ 2713 _val1->Byte0 = _val2->Byte3; \ 2714 } 2715 2716 #define REVERSE_BYTES_SHORT(Destination, Source) { \ 2717 PTWO_BYTE _val1 = (PTWO_BYTE)(Destination); \ 2718 PTWO_BYTE _val2 = (PTWO_BYTE)(Source); \ 2719 _val1->Byte1 = _val2->Byte0; \ 2720 _val1->Byte0 = _val2->Byte1; \ 2721 } 2722 2723 #define REVERSE_SHORT(Short) { \ 2724 UCHAR _val; \ 2725 PTWO_BYTE _val2 = (PTWO_BYTE)(Short); \ 2726 _val = _val2->Byte0; \ 2727 _val2->Byte0 = _val2->Byte1; \ 2728 _val2->Byte1 = _val; \ 2729 } 2730 2731 #define REVERSE_LONG(Long) { \ 2732 UCHAR _val; \ 2733 PFOUR_BYTE _val2 = (PFOUR_BYTE)(Long); \ 2734 _val = _val2->Byte3; \ 2735 _val2->Byte3 = _val2->Byte0; \ 2736 _val2->Byte0 = _val; \ 2737 _val = _val2->Byte2; \ 2738 _val2->Byte2 = _val2->Byte1; \ 2739 _val2->Byte1 = _val; \ 2740 } 2741 2742 #define WHICH_BIT(Data, Bit) { \ 2743 UCHAR _val; \ 2744 for (_val = 0; _val < 32; _val++) { \ 2745 if (((Data) >> _val) == 1) { \ 2746 break; \ 2747 } \ 2748 } \ 2749 ASSERT(_val != 32); \ 2750 (Bit) = _val; \ 2751 } 2752 2753 /* FIXME : This structure doesn't exist in the official header */ 2754 typedef struct _MODE_CDROM_WRITE_PARAMETERS_PAGE { 2755 UCHAR PageLength; 2756 UCHAR WriteType:4; 2757 UCHAR TestWrite:1; 2758 UCHAR LinkSizeValid:1; 2759 UCHAR BufferUnderrunFreeEnabled:1; 2760 UCHAR Reserved2:1; 2761 UCHAR TrackMode:4; 2762 UCHAR Copy:1; 2763 UCHAR FixedPacket:1; 2764 UCHAR MultiSession:2; 2765 UCHAR DataBlockType:4; 2766 UCHAR Reserved3:4; 2767 UCHAR LinkSize; 2768 UCHAR Reserved4; 2769 UCHAR HostApplicationCode:6; 2770 UCHAR Reserved5:2; 2771 UCHAR SessionFormat; 2772 UCHAR Reserved6; 2773 UCHAR PacketSize[4]; 2774 UCHAR AudioPauseLength[2]; 2775 UCHAR Reserved7:7; 2776 UCHAR MediaCatalogNumberValid:1; 2777 UCHAR MediaCatalogNumber[13]; 2778 UCHAR MediaCatalogNumberZero; 2779 UCHAR MediaCatalogNumberAFrame; 2780 UCHAR Reserved8:7; 2781 UCHAR ISRCValid:1; 2782 UCHAR ISRCCountry[2]; 2783 UCHAR ISRCOwner[3]; 2784 UCHAR ISRCRecordingYear[2]; 2785 UCHAR ISRCSerialNumber[5]; 2786 UCHAR ISRCZero; 2787 UCHAR ISRCAFrame; 2788 UCHAR ISRCReserved; 2789 UCHAR SubHeaderData[4]; 2790 } MODE_CDROM_WRITE_PARAMETERS_PAGE, *PMODE_CDROM_WRITE_PARAMETERS_PAGE; 2791 2792 #ifdef __cplusplus 2793 } 2794 #endif 2795 2796 #endif /* _NTSCSI_ */ 2797