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