/* * scsi.h SCSI functions * * ========================================================================= * * Open Watcom Project * * Copyright (c) 2004-2010 The Open Watcom Contributors. All Rights Reserved. * * This file is automatically generated. Do not edit directly. * * ========================================================================= */ #ifndef _NTSCSI_ #define _NTSCSI_ #ifndef _ENABLE_AUTODEPEND #pragma read_only_file; #endif #ifndef _NTSCSI_USER_MODE_ #include #endif #ifdef __cplusplus extern "C" { #endif /* Notification class masks */ #define NOTIFICATION_OPERATIONAL_CHANGE_CLASS_MASK 0x02 #define NOTIFICATION_POWER_MANAGEMENT_CLASS_MASK 0x04 #define NOTIFICATION_EXTERNAL_REQUEST_CLASS_MASK 0x08 #define NOTIFICATION_MEDIA_STATUS_CLASS_MASK 0x10 #define NOTIFICATION_MULTI_HOST_CLASS_MASK 0x20 #define NOTIFICATION_DEVICE_BUSY_CLASS_MASK 0x40 /* Notification class event flags */ #define NOTIFICATION_NO_CLASS_EVENTS 0x00 #define NOTIFICATION_OPERATIONAL_CHANGE_CLASS_EVENTS 0x01 #define NOTIFICATION_POWER_MANAGEMENT_CLASS_EVENTS 0x02 #define NOTIFICATION_EXTERNAL_REQUEST_CLASS_EVENTS 0x03 #define NOTIFICATION_MEDIA_STATUS_CLASS_EVENTS 0x04 #define NOTIFICATION_MULTI_HOST_CLASS_EVENTS 0x05 #define NOTIFICATION_DEVICE_BUSY_CLASS_EVENTS 0x06 /* Notification operational events */ #define NOTIFICATION_OPERATIONAL_EVENT_NO_CHANGE 0x00 #define NOTIFICATION_OPERATIONAL_EVENT_CHANGE_REQUESTED 0x01 #define NOTIFICATION_OPERATIONAL_EVENT_CHANGE_OCCURRED 0x02 /* Notification operational status values */ #define NOTIFICATION_OPERATIONAL_STATUS_AVAILABLE 0x00 #define NOTIFICATION_OPERATIONAL_STATUS_TEMPORARY_BUSY 0x01 #define NOTIFICATION_OPERATIONAL_STATUS_EXTENDED_BUSY 0x02 /* Notification operational operation codes */ #define NOTIFICATION_OPERATIONAL_OPCODE_NONE 0x00 #define NOTIFICATION_OPERATIONAL_OPCODE_FEATURE_CHANGE 0x01 #define NOTIFICATION_OPERATIONAL_OPCODE_FEATURE_ADDED 0x02 #define NOTIFICATION_OPERATIONAL_OPCODE_UNIT_RESET 0x03 #define NOTIFICATION_OPERATIONAL_OPCODE_FIRMWARE_CHANGED 0x04 #define NOTIFICATION_OPERATIONAL_OPCODE_INQUIRY_CHANGED 0x05 /* Notification power events */ #define NOTIFICATION_POWER_EVENT_NO_CHANGE 0x00 #define NOTIFICATION_POWER_EVENT_CHANGE_SUCCEEDED 0x01 #define NOTIFICATION_POWER_EVENT_CHANGE_FAILED 0x02 /* Notification power status values */ #define NOTIFICATION_POWER_STATUS_ACTIVE 0x01 #define NOTIFICATION_POWER_STATUS_IDLE 0x02 #define NOTIFICATION_POWER_STATUS_STANDBY 0x03 #define NOTIFICATION_POWER_STATUS_SLEEP 0x04 /* Notification external events */ #define NOTIFICATION_MEDIA_EVENT_NO_EVENT 0x00 #define NOTIFICATION_EXTERNAL_EVENT_NO_CHANGE 0x00 #define NOTIFICATION_EXTERNAL_EVENT_BUTTON_DOWN 0x01 #define NOTIFICATION_EXTERNAL_EVENT_BUTTON_UP 0x02 #define NOTIFICATION_EXTERNAL_EVENT_EXTERNAL 0x03 /* Notification external status values */ #define NOTIFICATION_EXTERNAL_STATUS_READY 0x00 #define NOTIFICATION_EXTERNAL_STATUS_PREVENT 0x01 /* Notification external requests */ #define NOTIFICATION_EXTERNAL_REQUEST_NONE 0x0000 #define NOTIFICATION_EXTERNAL_REQUEST_QUEUE_OVERRUN 0x0001 #define NOTIFICATION_EXTERNAL_REQUEST_PLAY 0x0101 #define NOTIFICATION_EXTERNAL_REQUEST_REWIND_BACK 0x0102 #define NOTIFICATION_EXTERNAL_REQUEST_FAST_FORWARD 0x0103 #define NOTIFICATION_EXTERNAL_REQUEST_PAUSE 0x0104 #define NOTIFICATION_EXTERNAL_REQUEST_STOP 0x0106 #define NOTIFICATION_EXTERNAL_REQUEST_ASCII_LOW 0x0200 #define NOTIFICATION_EXTERNAL_REQUEST_ASCII_HIGH 0x02FF /* Notification media events */ #define NOTIFICATION_MEDIA_EVENT_NO_CHANGE 0x00 #define NOTIFICATION_MEDIA_EVENT_EJECT_REQUEST 0x01 #define NOTIFICATION_MEDIA_EVENT_NEW_MEDIA 0x02 #define NOTIFICATION_MEDIA_EVENT_MEDIA_REMOVAL 0x03 #define NOTIFICATION_MEDIA_EVENT_MEDIA_CHANGE 0x04 /* Notification multi-host events */ #define NOTIFICATION_BUSY_EVENT_NO_EVENT 0x00 #define NOTIFICATION_MULTI_HOST_EVENT_NO_CHANGE 0x00 #define NOTIFICATION_MULTI_HOST_EVENT_CONTROL_REQUEST 0x01 #define NOTIFICATION_MULTI_HOST_EVENT_CONTROL_GRANT 0x02 #define NOTIFICATION_MULTI_HOST_EVENT_CONTROL_RELEASE 0x03 /* Notification multi-host status values */ #define NOTIFICATION_MULTI_HOST_STATUS_READY 0x00 #define NOTIFICATION_MULTI_HOST_STATUS_PREVENT 0x01 /* Notification multi-host priority values */ #define NOTIFICATION_MULTI_HOST_PRIORITY_NO_REQUESTS 0x00 #define NOTIFICATION_MULTI_HOST_PRIORITY_LOW 0x01 #define NOTIFICATION_MULTI_HOST_PRIORITY_MEDIUM 0x02 #define NOTIFICATION_MULTI_HOST_PRIOTITY_HIGH 0x03 /* Notification busy events */ #define NOTIFICATION_BUSY_EVENT_NO_EVENT 0x00 #define NOTIFICATION_BUSY_EVENT_NO_CHANGE 0x00 #define NOTIFICATION_BUSY_EVENT_BUSY 0x01 /* Notification busy status values */ #define NOTIFICATION_BUSY_STATUS_NO_EVENT 0x00 #define NOTIFICATION_BUSY_STATUS_POWER 0x01 #define NOTIFICATION_BUSY_STATUS_IMMEDIATE 0x02 #define NOTIFICATION_BUSY_STATUS_DEFERRED 0x03 /* DVD formats */ #define DVD_FORMAT_LEAD_IN 0x00 #define DVD_FORMAT_COPYRIGHT 0x01 #define DVD_FORMAT_DISK_KEY 0x02 #define DVD_FORMAT_BCA 0x03 #define DVD_FORMAT_MANUFACTURING 0x04 /* CDVD data structure identifiers */ #define DVD_REPORT_AGID 0x00 #define DVD_CHALLENGE_KEY 0x01 #define DVD_KEY_1 0x02 #define DVD_KEY_2 0x03 #define DVD_TITLE_KEY 0x04 #define DVD_REPORT_ASF 0x05 #define DVD_INVALIDATE_AGID 0x3F /* Blank type codes */ #define BLANK_FULL 0x00 #define BLANK_MINIMAL 0x01 #define BLANK_TRACK 0x02 #define BLANK_UNRESERVE_TRACK 0x03 #define BLANK_TAIL 0x04 #define BLANK_UNCLOSE_SESSION 0x05 #define BLANK_SESSION 0x06 /* CD expected sector values */ #define CD_EXPECTED_SECTOR_ANY 0x00 #define CD_EXPECTED_SECTOR_CDDA 0x01 #define CD_EXPECTED_SECTOR_MODE1 0x02 #define CD_EXPECTED_SECTOR_MODE2 0x03 #define CD_EXPECTED_SECTOR_MODE2_FORM1 0x04 #define CD_EXPECTED_SECTOR_MODE2_FORM2 0x05 /* Disk status values */ #define DISK_STATUS_EMPTY 0x00 #define DISK_STATUS_INCOMPLETE 0x01 #define DISK_STATUS_COMPLETE 0x02 #define DISK_STATUS_OTHERS 0x03 /* Last session values */ #define LAST_SESSION_EMPTY 0x00 #define LAST_SESSION_INCOMPLETE 0x01 #define LAST_SESSION_RESERVED_DAMAGED 0x02 #define LAST_SESSION_COMPLETE 0x03 /* Disk types */ #define DISK_TYPE_CDDA 0x00 #define DISK_TYPE_CDI 0x10 #define DISK_TYPE_XA 0x20 #define DISK_TYPE_UNDEFINED 0xFF /* Disc background format states */ #define DISC_BGFORMAT_STATE_NONE 0x00 #define DISC_BGFORMAT_STATE_INCOMPLETE 0x01 #define DISC_BGFORMAT_STATE_RUNNING 0x02 #define DISC_BGFORMAT_STATE_COMPLETE 0x03 /* Data block modes */ #define DATA_BLOCK_MODE0 0x00 #define DATA_BLOCK_MODE1 0x01 #define DATA_BLOCK_MODE2 0x02 /* Read TOC format codes */ #define READ_TOC_FORMAT_TOC 0x00 #define READ_TOC_FORMAT_SESSION 0x01 #define READ_TOC_FORMAT_FULL_TOC 0x02 #define READ_TOC_FORMAT_PMA 0x03 #define READ_TOC_FORMAT_ATIP 0x04 /* Common descriptor block lengths */ #define CDB6GENERIC_LENGTH 6 #define CDB10GENERIC_LENGTH 10 #define CDB12GENERIC_LENGTH 12 /* Set bit on/off constants */ #define SETBITON 1 #define SETBITOFF 0 /* Mode page constants */ #define MODE_PAGE_VENDOR_SPECIFIC 0x00 #define MODE_PAGE_ERROR_RECOVERY 0x01 #define MODE_PAGE_DISCONNECT 0x02 #define MODE_PAGE_FORMAT_DEVICE 0x03 #define MODE_PAGE_MRW 0x03 #define MODE_PAGE_RIGID_GEOMETRY 0x04 #define MODE_PAGE_FLEXIBILE 0x05 #define MODE_PAGE_WRITE_PARAMETERS 0x05 #define MODE_PAGE_VERIFY_ERRORS 0x07 #define MODE_PAGE_CACHING 0x08 #define MODE_PAGE_PERIPHERAL 0x09 #define MODE_PAGE_CONTROL 0x0A #define MODE_PAGE_MEDIUM_TYPES 0x0B #define MODE_PAGE_NOTCH_PARTITION 0x0C #define MODE_PAGE_CD_AUDIO_CONTROL 0x0E #define MODE_PAGE_DATA_COMPRESS 0x0F #define MODE_PAGE_DEVICE_CONFIG 0x10 #define MODE_PAGE_XOR_CONTROL 0x10 #define MODE_PAGE_MEDIUM_PARTITION 0x11 #define MODE_PAGE_ENCLOSURE_SERVICES_MANAGEMENT 0x14 #define MODE_PAGE_EXTENDED 0x15 #define MODE_PAGE_EXTENDED_DEVICE_SPECIFIC 0x16 #define MODE_PAGE_CDVD_FEATURE_SET 0x18 #define MODE_PAGE_PROTOCOL_SPECIFIC_LUN 0x18 #define MODE_PAGE_PROTOCOL_SPECIFIC_PORT 0x19 #define MODE_PAGE_POWER_CONDITION 0x1A #define MODE_PAGE_LUN_MAPPING 0x1B #define MODE_PAGE_FAULT_REPORTING 0x1C #define MODE_PAGE_CDVD_INACTIVITY 0x1D #define MODE_PAGE_ELEMENT_ADDRESS 0x1D #define MODE_PAGE_TRANSPORT_GEOMETRY 0x1E #define MODE_PAGE_DEVICE_CAPABILITIES 0x1F #define MODE_PAGE_CAPABILITIES 0x2A /* Mode sense constants */ #define MODE_SENSE_RETURN_ALL 0x3F #define MODE_SENSE_CURRENT_VALUES 0x00 #define MODE_SENSE_CHANGEABLE_VALUES 0x40 #define MODE_SENSE_DEFAULT_VALUES 0x80 #define MODE_SENSE_SAVED_VALUES 0xC0 /* SCSI operation codes */ #define SCSIOP_TEST_UNIT_READY 0x00 #define SCSIOP_REZERO_UNIT 0x01 #define SCSIOP_REWIND 0x01 #define SCSIOP_REQUEST_BLOCK_ADDR 0x02 #define SCSIOP_REQUEST_SENSE 0x03 #define SCSIOP_FORMAT_UNIT 0x04 #define SCSIOP_READ_BLOCK_LIMITS 0x05 #define SCSIOP_REASSIGN_BLOCKS 0x07 #define SCSIOP_INIT_ELEMENT_STATUS 0x07 #define SCSIOP_READ6 0x08 #define SCSIOP_RECEIVE 0x08 #define SCSIOP_WRITE6 0x0A #define SCSIOP_PRINT 0x0A #define SCSIOP_SEND 0x0A #define SCSIOP_SEEK6 0x0B #define SCSIOP_TRACK_SELECT 0x0B #define SCSIOP_SLEW_PRINT 0x0B #define SCSIOP_SET_CAPACITY 0x0B #define SCSIOP_SEEK_BLOCK 0x0C #define SCSIOP_PARTITION 0x0D #define SCSIOP_READ_REVERSE 0x0F #define SCSIOP_WRITE_FILEMARKS 0x10 #define SCSIOP_FLUSH_BUFFER 0x10 #define SCSIOP_SPACE 0x11 #define SCSIOP_INQUIRY 0x12 #define SCSIOP_VERIFY6 0x13 #define SCSIOP_RECOVER_BUF_DATA 0x14 #define SCSIOP_MODE_SELECT 0x15 #define SCSIOP_RESERVE_UNIT 0x16 #define SCSIOP_RELEASE_UNIT 0x17 #define SCSIOP_COPY 0x18 #define SCSIOP_ERASE 0x19 #define SCSIOP_MODE_SENSE 0x1A #define SCSIOP_START_STOP_UNIT 0x1B #define SCSIOP_STOP_PRINT 0x1B #define SCSIOP_LOAD_UNLOAD 0x1B #define SCSIOP_RECEIVE_DIAGNOSTIC 0x1C #define SCSIOP_SEND_DIAGNOSTIC 0x1D #define SCSIOP_MEDIUM_REMOVAL 0x1E #define SCSIOP_READ_FORMATTED_CAPACITY 0x23 #define SCSIOP_READ_CAPACITY 0x25 #define SCSIOP_READ 0x28 #define SCSIOP_WRITE 0x2A #define SCSIOP_SEEK 0x2B #define SCSIOP_LOCATE 0x2B #define SCSIOP_POSITION_TO_ELEMENT 0x2B #define SCSIOP_WRITE_VERIFY 0x2E #define SCSIOP_VERIFY 0x2F #define SCSIOP_SEARCH_DATA_HIGH 0x30 #define SCSIOP_SEARCH_DATA_EQUAL 0x31 #define SCSIOP_SEARCH_DATA_LOW 0x32 #define SCSIOP_SET_LIMITS 0x33 #define SCSIOP_READ_POSITION 0x34 #define SCSIOP_SYNCHRONIZE_CACHE 0x35 #define SCSIOP_COMPARE 0x39 #define SCSIOP_COPY_COMPARE 0x3A #define SCSIOP_WRITE_DATA_BUFF 0x3B #define SCSIOP_READ_DATA_BUFF 0x3C #define SCSIOP_WRITE_LONG 0x3F #define SCSIOP_CHANGE_DEFINITION 0x40 #define SCSIOP_WRITE_SAME 0x41 #define SCSIOP_READ_SUB_CHANNEL 0x42 #define SCSIOP_READ_TOC 0x43 #define SCSIOP_READ_HEADER 0x44 #define SCSIOP_REPORT_DENSITY_SUPPORT 0x44 #define SCSIOP_PLAY_AUDIO 0x45 #define SCSIOP_GET_CONFIGURATION 0x46 #define SCSIOP_PLAY_AUDIO_MSF 0x47 #define SCSIOP_PLAY_TRACK_INDEX 0x48 #define SCSIOP_PLAY_TRACK_RELATIVE 0x49 #define SCSIOP_GET_EVENT_STATUS 0x4A #define SCSIOP_PAUSE_RESUME 0x4B #define SCSIOP_LOG_SELECT 0x4C #define SCSIOP_LOG_SENSE 0x4D #define SCSIOP_STOP_PLAY_SCAN 0x4E #define SCSIOP_XDWRITE 0x50 #define SCSIOP_XPWRITE 0x51 #define SCSIOP_READ_DISK_INFORMATION 0x51 #define SCSIOP_READ_DISC_INFORMATION 0x51 #define SCSIOP_READ_TRACK_INFORMATION 0x52 #define SCSIOP_XDWRITE_READ 0x53 #define SCSIOP_RESERVE_TRACK_RZONE 0x53 #define SCSIOP_SEND_OPC_INFORMATION 0x54 #define SCSIOP_MODE_SELECT10 0x55 #define SCSIOP_RESERVE_UNIT10 0x56 #define SCSIOP_RESERVE_ELEMENT 0x56 #define SCSIOP_RELEASE_UNIT10 0x57 #define SCSIOP_RELEASE_ELEMENT 0x57 #define SCSIOP_REPAIR_TRACK 0x58 #define SCSIOP_MODE_SENSE10 0x5A #define SCSIOP_CLOSE_TRACK_SESSION 0x5B #define SCSIOP_READ_BUFFER_CAPACITY 0x5C #define SCSIOP_SEND_CUE_SHEET 0x5D #define SCSIOP_PERSISTENT_RESERVE_IN 0x5E #define SCSIOP_PERSISTENT_RESERVE_OUT 0x5F #define SCSIOP_REPORT_LUNS 0xA0 #define SCSIOP_BLANK 0xA1 #define SCSIOP_ATA_PASSTHROUGH12 0xA1 #define SCSIOP_SEND_EVENT 0xA2 #define SCSIOP_SEND_KEY 0xA3 #define SCSIOP_MAINTENANCE_IN 0xA3 #define SCSIOP_REPORT_KEY 0xA4 #define SCSIOP_MAINTENANCE_OUT 0xA4 #define SCSIOP_MOVE_MEDIUM 0xA5 #define SCSIOP_LOAD_UNLOAD_SLOT 0xA6 #define SCSIOP_EXCHANGE_MEDIUM 0xA6 #define SCSIOP_SET_READ_AHEAD 0xA7 #define SCSIOP_MOVE_MEDIUM_ATTACHED 0xA7 #define SCSIOP_READ12 0xA8 #define SCSIOP_GET_MESSAGE 0xA8 #define SCSIOP_SERVICE_ACTION_OUT12 0xA9 #define SCSIOP_WRITE12 0xAA #define SCSIOP_SEND_MESSAGE 0xAB #define SCSIOP_SERVICE_ACTION_IN12 0xAB #define SCSIOP_GET_PERFORMANCE 0xAC #define SCSIOP_READ_DVD_STRUCTURE 0xAD #define SCSIOP_WRITE_VERIFY12 0xAE #define SCSIOP_VERIFY12 0xAF #define SCSIOP_SEARCH_DATA_HIGH12 0xB0 #define SCSIOP_SEARCH_DATA_EQUAL12 0xB1 #define SCSIOP_SEARCH_DATA_LOW12 0xB2 #define SCSIOP_SET_LIMITS12 0xB3 #define SCSIOP_READ_ELEMENT_STATUS_ATTACHED 0xB4 #define SCSIOP_REQUEST_VOL_ELEMENT 0xB5 #define SCSIOP_SEND_VOLUME_TAG 0xB6 #define SCSIOP_SET_STREAMING 0xB6 #define SCSIOP_READ_DEFECT_DATA 0xB7 #define SCSIOP_READ_ELEMENT_STATUS 0xB8 #define SCSIOP_READ_CD_MSF 0xB9 #define SCSIOP_SCAN_CD 0xBA #define SCSIOP_REDUNDANCY_GROUP_IN 0xBA #define SCSIOP_SET_CD_SPEED 0xBB #define SCSIOP_REDUNDANCY_GROUP_OUT 0xBB #define SCSIOP_PLAY_CD 0xBC #define SCSIOP_SPARE_IN 0xBC #define SCSIOP_MECHANISM_STATUS 0xBD #define SCSIOP_SPARE_OUT 0xBD #define SCSIOP_READ_CD 0xBE #define SCSIOP_VOLUME_SET_IN 0xBE #define SCSIOP_SEND_DVD_STRUCTURE 0xBF #define SCSIOP_VOLUME_SET_OUT 0xBF #define SCSIOP_INIT_ELEMENT_RANGE 0xE7 #define SCSIOP_XDWRITE_EXTENDED16 0x80 #define SCSIOP_WRITE_FILEMARKS16 0x80 #define SCSIOP_REBUILD16 0x81 #define SCSIOP_READ_REVERSE16 0x81 #define SCSIOP_REGENERATE16 0x82 #define SCSIOP_EXTENDED_COPY 0x83 #define SCSIOP_RECEIVE_COPY_RESULTS 0x84 #define SCSIOP_ATA_PASSTHROUGH16 0x85 #define SCSIOP_ACCESS_CONTROL_IN 0x86 #define SCSIOP_ACCESS_CONTROL_OUT 0x87 #define SCSIOP_READ16 0x88 #define SCSIOP_WRITE16 0x8A #define SCSIOP_READ_ATTRIBUTES 0x8C #define SCSIOP_WRITE_ATTRIBUTES 0x8D #define SCSIOP_WRITE_VERIFY16 0x8E #define SCSIOP_VERIFY16 0x8F #define SCSIOP_PREFETCH16 0x90 #define SCSIOP_SYNCHRONIZE_CACHE16 0x91 #define SCSIOP_SPACE16 0x91 #define SCSIOP_LOCK_UNLOCK_CACHE16 0x92 #define SCSIOP_LOCATE16 0x92 #define SCSIOP_WRITE_SAME16 0x93 #define SCSIOP_ERASE16 0x93 #define SCSIOP_READ_CAPACITY16 0x9E #define SCSIOP_SERVICE_ACTION_IN16 0x9E #define SCSIOP_SERVICE_ACTION_OUT16 0x9F /* Common descriptor block return values */ #define CDB_RETURN_ON_COMPLETION 0 #define CDB_RETURN_IMMEDIATE 1 /* Common descriptor block force media access flag */ #define CDB_FORCE_MEDIA_ACCESS 0x08 /* Denon SCSI operation codes */ #define SCSIOP_DENON_EJECT_DISC 0xE6 #define SCSIOP_DENON_STOP_AUDIO 0xE7 #define SCSIOP_DENON_PLAY_AUDIO 0xE8 #define SCSIOP_DENON_READ_TOC 0xE9 #define SCSIOP_DENON_READ_SUBCODE 0xEB /* SCSI messages */ #define SCSIMESS_ABORT 0x06 #define SCSIMESS_ABORT_WITH_TAG 0x0D #define SCSIMESS_BUS_DEVICE_RESET 0x0C #define SCSIMESS_CLEAR_QUEUE 0x0E #define SCSIMESS_COMMAND_COMPLETE 0x00 #define SCSIMESS_DISCONNECT 0x04 #define SCSIMESS_EXTENDED_MESSAGE 0x01 #define SCSIMESS_IDENTIFY 0x80 #define SCSIMESS_IDENTIFY_WITH_DISCON 0xC0 #define SCSIMESS_IGNORE_WITH_RESIDUE 0x23 #define SCSIMESS_INITIATE_RECOVERY 0x0F #define SCSIMESS_INIT_DETECTED_ERROR 0x05 #define SCSIMESS_LINK_CMD_COMP 0x0A #define SCSIMESS_LINK_CMD_COMP_W_FLAG 0x0B #define SCSIMESS_MESS_PARITY_ERROR 0x09 #define SCSIMESS_MESSAGE_REJECT 0x07 #define SCSIMESS_NO_OPERATION 0x08 #define SCSIMESS_HEAD_OF_QUEUE_TAG 0x21 #define SCSIMESS_ORDERED_QUEUE_TAG 0x22 #define SCSIMESS_SIMPLE_QUEUE_TAG 0x20 #define SCSIMESS_RELEASE_RECOVERY 0x10 #define SCSIMESS_RESTORE_POINTERS 0x03 #define SCSIMESS_SAVE_DATA_POINTER 0x02 #define SCSIMESS_TERMINATE_IO_PROCESS 0x11 #define SCSIMESS_MODIFY_DATA_POINTER 0x00 #define SCSIMESS_SYNCHRONOUS_DATA_REQ 0x01 #define SCSIMESS_WIDE_DATA_REQUEST 0x03 /* SCSI message lengths */ #define SCSIMESS_MODIFY_DATA_LENGTH 5 #define SCSIMESS_SYNCH_DATA_LENGTH 3 #define SCSIMESS_WIDE_DATA_LENGTH 2 /* SCSI status codes */ #define SCSISTAT_GOOD 0x00 #define SCSISTAT_CHECK_CONDITION 0x02 #define SCSISTAT_CONDITION_MET 0x04 #define SCSISTAT_BUSY 0x08 #define SCSISTAT_INTERMEDIATE 0x10 #define SCSISTAT_INTERMEDIATE_COND_MET 0x14 #define SCSISTAT_RESERVATION_CONFLICT 0x18 #define SCSISTAT_COMMAND_TERMINATED 0x22 #define SCSISTAT_QUEUE_FULL 0x28 /* Common descriptor block inquiry EVPD flag */ #define CDB_INQUIRY_EVPD 0x01 /* Format common descriptor block constants */ #define LUN0_FORMAT_SAVING_DEFECT_LIST 0 #define USE_DEFAULTMSB 0 #define USE_DEFAULTLSB 0 /* Unit codes */ #define START_UNIT_CODE 0x01 #define STOP_UNIT_CODE 0x00 /* Inquiry data buffer size */ #define INQUIRYDATABUFFERSIZE 36 /* Device types */ #define DIRECT_ACCESS_DEVICE 0x00 #define SEQUENTIAL_ACCESS_DEVICE 0x01 #define PRINTER_DEVICE 0x02 #define PROCESSOR_DEVICE 0x03 #define WRITE_ONCE_READ_MULTIPLE_DEVICE 0x04 #define READ_ONLY_DIRECT_ACCESS_DEVICE 0x05 #define SCANNER_DEVICE 0x06 #define OPTICAL_DEVICE 0x07 #define MEDIUM_CHANGER 0x08 #define COMMUNICATION_DEVICE 0x09 #define ARRAY_CONTROLLER_DEVICE 0x0C #define SCSI_ENCLOSURE_DEVICE 0x0D #define REDUCED_BLOCK_DEVICE 0x0E #define OPTICAL_CARD_READER_WRITER_DEVICE 0x0F #define BRIDGE_CONTROLLER_DEVICE 0x10 #define OBJECT_BASED_STORAGE_DEVICE 0x11 #define LOGICAL_UNIT_NOT_PRESENT_DEVICE 0x7F /* Device qualifiers */ #define DEVICE_QUALIFIER_ACTIVE 0x00 #define DEVICE_QUALIFIER_NOT_ACTIVE 0x01 #define DEVICE_QUALIFIER_NOT_SUPPORTED 0x03 /* Device type qualifier */ #define DEVICE_CONNECTED 0x00 /* Vital product data maximum buffer size */ #define VPD_MAX_BUFFER_SIZE 0xFF /* Vital product data page identifiers */ #define VPD_SUPPORTED_PAGES 0x00 #define VPD_SERIAL_NUMBER 0x80 #define VPD_DEVICE_IDENTIFIERS 0x83 #define VPD_MEDIA_SERIAL_NUMBER 0x84 #define VPD_SOFTWARE_INTERFACE_IDENTIFIERS 0x84 #define VPD_NETWORK_MANAGEMENT_ADDRESSES 0x85 #define VPD_EXTENDED_INQUIRY_DATA 0x86 #define VPD_MODE_PAGE_POLICY 0x87 #define VPD_SCSI_PORTS 0x88 /* Reservation actions */ #define RESERVATION_ACTION_READ_KEYS 0x00 #define RESERVATION_ACTION_READ_RESERVATIONS 0x01 #define RESERVATION_ACTION_REGISTER 0x00 #define RESERVATION_ACTION_RESERVE 0x01 #define RESERVATION_ACTION_RELEASE 0x02 #define RESERVATION_ACTION_CLEAR 0x03 #define RESERVATION_ACTION_PREEMPT 0x04 #define RESERVATION_ACTION_PREEMPT_ABORT 0x05 #define RESERVATION_ACTION_REGISTER_IGNORE_EXISTING 0x06 /* Reservation scopes */ #define RESERVATION_SCOPE_LU 0x00 #define RESERVATION_SCOPE_ELEMENT 0x02 /* Reservation types */ #define RESERVATION_TYPE_WRITE_EXCLUSIVE 0x01 #define RESERVATION_TYPE_EXCLUSIVE 0x03 #define RESERVATION_TYPE_WRITE_EXCLUSIVE_REGISTRANTS 0x05 #define RESERVATION_TYPE_EXCLUSIVE_REGISTRANTS 0x06 /* Sense buffer size constants */ #define SENSE_BUFFER_SIZE 18 #define MAX_SENSE_BUFFER_SIZE 255 #define MAX_ADDITIONAL_SENSE_BYTES (MAX_SENSE_BUFFER_SIZE - SENSE_BUFFER_SIZE) /* SCSI sense codes */ #define SCSI_SENSE_NO_SENSE 0x00 #define SCSI_SENSE_RECOVERED_ERROR 0x01 #define SCSI_SENSE_NOT_READY 0x02 #define SCSI_SENSE_MEDIUM_ERROR 0x03 #define SCSI_SENSE_HARDWARE_ERROR 0x04 #define SCSI_SENSE_ILLEGAL_REQUEST 0x05 #define SCSI_SENSE_UNIT_ATTENTION 0x06 #define SCSI_SENSE_DATA_PROTECT 0x07 #define SCSI_SENSE_BLANK_CHECK 0x08 #define SCSI_SENSE_UNIQUE 0x09 #define SCSI_SENSE_COPY_ABORTED 0x0A #define SCSI_SENSE_ABORTED_COMMAND 0x0B #define SCSI_SENSE_EQUAL 0x0C #define SCSI_SENSE_VOL_OVERFLOW 0x0D #define SCSI_SENSE_MISCOMPARE 0x0E #define SCSI_SENSE_RESERVED 0x0F /* SCSI additional tape bits */ #define SCSI_ILLEGAL_LENGTH 0x20 #define SCSI_EOM 0x40 #define SCSI_FILE_MARK 0x80 /* SCSI additional sense codes */ #define SCSI_ADSENSE_NO_SENSE 0x00 #define SCSI_ADSENSE_NO_SEEK_COMPLETE 0x02 #define SCSI_ADSENSE_LUN_NOT_READY 0x04 #define SCSI_ADSENSE_LUN_COMMUNICATION 0x08 #define SCSI_ADSENSE_WRITE_ERROR 0x0C #define SCSI_ADSENSE_TRACK_ERROR 0x14 #define SCSI_ADSENSE_SEEK_ERROR 0x15 #define SCSI_ADSENSE_REC_DATA_NOECC 0x17 #define SCSI_ADSENSE_REC_DATA_ECC 0x18 #define SCSI_ADSENSE_PARAMETER_LIST_LENGTH 0x1A #define SCSI_ADSENSE_ILLEGAL_COMMAND 0x20 #define SCSI_ADSENSE_ILLEGAL_BLOCK 0x21 #define SCSI_ADSENSE_INVALID_CDB 0x24 #define SCSI_ADSENSE_INVALID_LUN 0x25 #define SCSI_ADSENSE_INVALID_FIELD_PARAMETER_LIST 0x26 #define SCSI_ADSENSE_WRITE_PROTECT 0x27 #define SCSI_ADSENSE_MEDIUM_CHANGED 0x28 #define SCSI_ADSENSE_BUS_RESET 0x29 #define SCSI_ADSENSE_PARAMETERS_CHANGED 0x2A #define SCSI_ADSENSE_INSUFFICIENT_TIME_FOR_OPERATION 0x2E #define SCSI_ADSENSE_INVALID_MEDIA 0x30 #define SCSI_ADSENSE_NO_MEDIA_IN_DEVICE 0x3A #define SCSI_ADSENSE_POSITION_ERROR 0x3B #define SCSI_ADSENSE_OPERATING_CONDITIONS_CHANGED 0x3F #define SCSI_ADSENSE_OPERATOR_REQUEST 0x5A #define SCSI_ADSENSE_FAILURE_PREDICTION_THRESHOLD_EXCEEDED 0x5D #define SCSI_ADSENSE_ILLEGAL_MODE_FOR_THIS_TRACK 0x64 #define SCSI_ADSENSE_COPY_PROTECTION_FAILURE 0x6F #define SCSI_ADSENSE_POWER_CALIBRATION_ERROR 0x73 #define SCSI_ADSENSE_VENDOR_UNIQUE 0x80 #define SCSI_ADSENSE_MUSIC_AREA 0xA0 #define SCSI_ADSENSE_DATA_AREA 0xA1 #define SCSI_ADSENSE_VOLUME_OVERFLOW 0xA7 #define SCSI_ADWRITE_PROTECT SCSI_ADSENSE_WRITE_PROTECT #define SCSI_FAILURE_PREDICTION_THRESHOLD_EXCEEDED \ SCSI_ADSENSE_FAILURE_PREDICTION_THRESHOLD_EXCEEDED /* SCSI sense qualifiers */ #define SCSI_SENSEQ_CAUSE_NOT_REPORTABLE 0x00 #define SCSI_SENSEQ_BECOMING_READY 0x01 #define SCSI_SENSEQ_INIT_COMMAND_REQUIRED 0x02 #define SCSI_SENSEQ_MANUAL_INTERVENTION_REQUIRED 0x03 #define SCSI_SENSEQ_FORMAT_IN_PROGRESS 0x04 #define SCSI_SENSEQ_REBUILD_IN_PROGRESS 0x05 #define SCSI_SENSEQ_RECALCULATION_IN_PROGRESS 0x06 #define SCSI_SENSEQ_OPERATION_IN_PROGRESS 0x07 #define SCSI_SENSEQ_LONG_WRITE_IN_PROGRESS 0x08 #define SCSI_SENSEQ_COMM_FAILURE 0x00 #define SCSI_SENSEQ_COMM_TIMEOUT 0x01 #define SCSI_SENSEQ_COMM_PARITY_ERROR 0x02 #define SCSI_SENSEQ_COMM_CRC_ERROR 0x03 #define SCSI_SENSEQ_UNREACHABLE_TARGET 0x04 #define SCSI_SENSEQ_LOSS_OF_STREAMING 0x09 #define SCSI_SENSEQ_PADDING_BLOCKS_ADDED 0x0A #define SCSI_SENSEQ_FILEMARK_DETECTED 0x01 #define SCSI_SENSEQ_END_OF_MEDIA_DETECTED 0x02 #define SCSI_SENSEQ_SETMARK_DETECTED 0x03 #define SCSI_SENSEQ_BEGINNING_OF_MEDIA_DETECTED 0x04 #define SCSI_SENSEQ_ILLEGAL_ELEMENT_ADDR 0x01 #define SCSI_SENSEQ_DESTINATION_FULL 0x0D #define SCSI_SENSEQ_SOURCE_EMPTY 0x0E #define SCSI_SENSEQ_INCOMPATIBLE_MEDIA_INSTALLED 0x00 #define SCSI_SENSEQ_UNKNOWN_FORMAT 0x01 #define SCSI_SENSEQ_INCOMPATIBLE_FORMAT 0x02 #define SCSI_SENSEQ_CLEANING_CARTRIDGE_INSTALLED 0x03 #define SCSI_SENSEQ_TARGET_OPERATING_CONDITIONS_CHANGED 0x00 #define SCSI_SENSEQ_MICROCODE_CHANGED 0x01 #define SCSI_SENSEQ_OPERATING_DEFINITION_CHANGED 0x02 #define SCSI_SENSEQ_INQUIRY_DATA_CHANGED 0x03 #define SCSI_SENSEQ_COMPONENT_DEVICE_ATTACHED 0x04 #define SCSI_SENSEQ_DEVICE_IDENTIFIER_CHANGED 0x05 #define SCSI_SENSEQ_REDUNDANCY_GROUP_MODIFIED 0x06 #define SCSI_SENSEQ_REDUNDANCY_GROUP_DELETED 0x07 #define SCSI_SENSEQ_SPARE_MODIFIED 0x08 #define SCSI_SENSEQ_SPARE_DELETED 0x09 #define SCSI_SENSEQ_VOLUME_SET_MODIFIED 0x0A #define SCSI_SENSEQ_VOLUME_SET_DELETED 0x0B #define SCSI_SENSEQ_VOLUME_SET_DEASSIGNED 0x0C #define SCSI_SENSEQ_VOLUME_SET_REASSIGNED 0x0D #define SCSI_SENSEQ_REPORTED_LUNS_DATA_CHANGED 0x0E #define SCSI_SENSEQ_ECHO_BUFFER_OVERWRITTEN 0x0F #define SCSI_SENSEQ_MEDIUM_LOADABLE 0x10 #define SCSI_SENSEQ_MEDIUM_AUXILIARY_MEMORY_ACCESSIBLE 0x11 #define SCSI_SENSEQ_STATE_CHANGE_INPUT 0x00 #define SCSI_SENSEQ_MEDIUM_REMOVAL 0x01 #define SCSI_SENSEQ_WRITE_PROTECT_ENABLE 0x02 #define SCSI_SENSEQ_WRITE_PROTECT_DISABLE 0x03 #define SCSI_SENSEQ_AUTHENTICATION_FAILURE 0x00 #define SCSI_SENSEQ_KEY_NOT_PRESENT 0x01 #define SCSI_SENSEQ_KEY_NOT_ESTABLISHED 0x02 #define SCSI_SENSEQ_READ_OF_SCRAMBLED_SECTOR_WITHOUT_AUTHENTICATION 0x03 #define SCSI_SENSEQ_MEDIA_CODE_MISMATCHED_TO_LOGICAL_UNIT 0x04 #define SCSI_SENSEQ_LOGICAL_UNIT_RESET_COUNT_ERROR 0x05 #define SCSI_SENSEQ_POWER_CALIBRATION_AREA_ALMOST_FULL 0x01 #define SCSI_SENSEQ_POWER_CALIBRATION_AREA_FULL 0x02 #define SCSI_SENSEQ_POWER_CALIBRATION_AREA_ERROR 0x03 #define SCSI_SENSEQ_PMA_RMA_UPDATE_FAILURE 0x04 #define SCSI_SENSEQ_PMA_RMA_IS_FULL 0x05 #define SCSI_SENSEQ_PMA_RMA_ALMOST_FULL 0x06 /* SCSI device type */ #define FILE_DEVICE_SCSI 0x0000001BL /* SCSI device I/O control codes */ #define IOCTL_SCSI_EXECUTE_IN ((FILE_DEVICE_SCSI << 16) + 0x0011) #define IOCTL_SCSI_EXECUTE_OUT ((FILE_DEVICE_SCSI << 16) + 0x0012) #define IOCTL_SCSI_EXECUTE_NONE ((FILE_DEVICE_SCSI << 16) + 0x0013) #define IOCTL_SCSI_MINIPORT_SMART_VERSION ((FILE_DEVICE_SCSI << 16) + 0x0500) #define IOCTL_SCSI_MINIPORT_IDENTIFY ((FILE_DEVICE_SCSI << 16) + 0x0501) #define IOCTL_SCSI_MINIPORT_READ_SMART_ATTRIBS ((FILE_DEVICE_SCSI << 16) + 0x0502) #define IOCTL_SCSI_MINIPORT_READ_SMART_THRESHOLDS ((FILE_DEVICE_SCSI << 16) + 0x0503) #define IOCTL_SCSI_MINIPORT_ENABLE_SMART ((FILE_DEVICE_SCSI << 16) + 0x0504) #define IOCTL_SCSI_MINIPORT_DISABLE_SMART ((FILE_DEVICE_SCSI << 16) + 0x0505) #define IOCTL_SCSI_MINIPORT_RETURN_STATUS ((FILE_DEVICE_SCSI << 16) + 0x0506) #define IOCTL_SCSI_MINIPORT_ENABLE_DISABLE_AUTOSAVE ((FILE_DEVICE_SCSI << 16) + 0x0507) #define IOCTL_SCSI_MINIPORT_SAVE_ATTRIBUTE_VALUES ((FILE_DEVICE_SCSI << 16) + 0x0508) #define IOCTL_SCSI_MINIPORT_EXECUTE_OFFLINE_DIAGS ((FILE_DEVICE_SCSI << 16) + 0x0509) #define IOCTL_SCSI_MINIPORT_ENABLE_DISABLE_AUTO_OFFLINE \ ((FILE_DEVICE_SCSI << 16) + 0x050A) #define IOCTL_SCSI_MINIPORT_READ_SMART_LOG ((FILE_DEVICE_SCSI << 16) + 0x050B) #define IOCTL_SCSI_MINIPORT_WRITE_SMART_LOG ((FILE_DEVICE_SCSI << 16) + 0x050C) #define IOCTL_SCSI_MINIPORT_NOT_QUORUM_CAPABLE ((FILE_DEVICE_SCSI << 16) + 0x0520) #define IOCTL_SCSI_MINIPORT_NOT_CLUSTER_CAPABLE ((FILE_DEVICE_SCSI << 16) + 0x0521) /* Mode parameter constants */ #define MODE_FD_SINGLE_SIDE 0x01 #define MODE_FD_DOUBLE_SIDE 0x02 #define MODE_FD_MAXIMUM_TYPE 0x1E #define MODE_DSP_FUA_SUPPORTED 0x10 #define MODE_DSP_WRITE_PROTECT 0x80 /* CDDA channels */ #define CDDA_CHANNEL_MUTED 0x00 #define CDDA_CHANNEL_ZERO 0x01 #define CDDA_CHANNEL_ONE 0x02 #define CDDA_CHANNEL_TWO 0x04 #define CDDA_CHANNEL_THREE 0x08 /* CDVD capabilities constants */ #define CDVD_LMT_CADDY 0 #define CDVD_LMT_TRAY 1 #define CDVD_LMT_POPUP 2 #define CDVD_LMT_CHANGER_INDIVIDUAL 4 #define CDVD_LMT_CHANGER_CARTRIDGE 5 /* Loading machanisms */ #define LOADING_MECHANISM_CADDY 0x00 #define LOADING_MECHANISM_TRAY 0x01 #define LOADING_MECHANISM_POPUP 0x02 #define LOADING_MECHANISM_INDIVIDUAL_CHANGER 0x04 #define LOADING_MECHANISM_CARTRIDGE_CHANGER 0x05 /* Mode block lengths */ #define MODE_BLOCK_DESC_LENGTH 8 #define MODE_HEADER_LENGTH 4 #define MODE_HEADER_LENGTH10 8 /* CD-ROM audio control constants */ #define CDB_AUDIO_PAUSE 0 #define CDB_AUDIO_RESUME 1 #define CDB_DEVICE_START 0x11 #define CDB_DEVICE_STOP 0x10 #define CDB_EJECT_MEDIA 0x10 #define CDB_LOAD_MEDIA 0x01 #define CDB_SUBCHANNEL_HEADER 0x00 #define CDB_SUBCHANNEL_BLOCK 0x01 #define CDROM_AUDIO_CONTROL_PAGE 0x0E #define MODE_SELECT_IMMEDIATE 0x04 #define MODE_SELECT_PFBIT 0x10 #define CDB_USE_MSF 0x01 /* Multisession CD-ROM constants */ #define GET_LAST_SESSION 0x01 #define GET_SESSION_DATA 0x02 /* All structures in this file get one-byte packing. */ #pragma pack( push, 1 ) /* There is a constant called _PRINT declared in ctype.h that causes a conflict with * the following structure. */ #ifdef _PRINT #undef _PRINT #endif /* Common descriptor block */ typedef union _CDB { struct _CDB6GENERIC { UCHAR OperationCode; UCHAR Immediate : 1; UCHAR CommandUniqueBits : 4; UCHAR LogicalUnitNumber : 3; UCHAR CommandUniqueBytes[3]; UCHAR Link : 1; UCHAR Flag : 1; UCHAR Reserved : 4; UCHAR VendorUnique : 2; } CDB6GENERIC; struct _CDB6READWRITE { UCHAR OperationCode; UCHAR LogicalBlockMsb1 : 5; UCHAR LogicalUnitNumber : 3; UCHAR LogicalBlockMsb0; UCHAR LogicalBlockLsb; UCHAR TransferBlocks; UCHAR Control; } CDB6READWRITE; struct _CDB6INQUIRY { UCHAR OperationCode; UCHAR Reserved1 : 5; UCHAR LogicalUnitNumber : 3; UCHAR PageCode; UCHAR IReserved; UCHAR AllocationLength; UCHAR Control; } CDB6INQUIRY; struct _CDB6INQUIRY3 { UCHAR OperationCode; UCHAR EnableVitalProductData : 1; UCHAR CommandSupportData : 1; UCHAR Reserved1 : 6; UCHAR PageCode; UCHAR Reserved2; UCHAR AllocationLength; UCHAR Control; } CDB6INQUIRY3; struct _CDB6VERIFY { UCHAR OperationCode; UCHAR Fixed : 1; UCHAR ByteCompare : 1; UCHAR Immediate : 1; UCHAR Reserved : 2; UCHAR LogicalUnitNumber : 3; UCHAR VerificationLength[3]; UCHAR Control; } CDB6VERIFY; struct _CDB6FORMAT { UCHAR OperationCode; UCHAR FormatControl : 5; UCHAR LogicalUnitNumber : 3; UCHAR FReserved1; UCHAR InterleaveMsb; UCHAR InterleaveLsb; UCHAR FReserved2; } CDB6FORMAT; struct _CDB10 { UCHAR OperationCode; UCHAR RelativeAddress : 1; UCHAR Reserved1 : 2; UCHAR ForceUnitAccess : 1; UCHAR DisablePageOut : 1; UCHAR LogicalUnitNumber : 3; UCHAR LogicalBlockByte0; UCHAR LogicalBlockByte1; UCHAR LogicalBlockByte2; UCHAR LogicalBlockByte3; UCHAR Reserved2; UCHAR TransferBlocksMsb; UCHAR TransferBlocksLsb; UCHAR Control; } CDB10; struct _CDB12 { UCHAR OperationCode; UCHAR RelativeAddress : 1; UCHAR Reserved1 : 2; UCHAR ForceUnitAccess : 1; UCHAR DisablePageOut : 1; UCHAR LogicalUnitNumber : 3; UCHAR LogicalBlock[4]; UCHAR TransferLength[4]; UCHAR Reserved2; UCHAR Control; } CDB12; struct _CDB16 { UCHAR OperationCode; UCHAR Reserved1 : 3; UCHAR ForceUnitAccess : 1; UCHAR DisablePageOut : 1; UCHAR Protection : 3; UCHAR LogicalBlock[8]; UCHAR TransferLength[4]; UCHAR Reserved2; UCHAR Control; } CDB16; struct _PAUSE_RESUME { UCHAR OperationCode; UCHAR Reserved1 : 5; UCHAR LogicalUnitNumber : 3; UCHAR Reserved2[6]; UCHAR Action; UCHAR Control; } PAUSE_RESUME; struct _READ_TOC { UCHAR OperationCode; UCHAR Reserved0 : 1; UCHAR Msf : 1; UCHAR Reserved1 : 3; UCHAR LogicalUnitNumber : 3; UCHAR Format2 : 4; UCHAR Reserved2 : 4; UCHAR Reserved3[3]; UCHAR StartingTrack; UCHAR AllocationLength[2]; UCHAR Control : 6; UCHAR Format : 2; } READ_TOC; struct _READ_DISK_INFORMATION { UCHAR OperationCode; UCHAR Reserved1 : 5; UCHAR Lun : 3; UCHAR Reserved2[5]; UCHAR AllocationLength[2]; UCHAR Control; } READ_DISK_INFORMATION, READ_DISC_INFORMATION; struct _READ_TRACK_INFORMATION { UCHAR OperationCode; UCHAR Track : 2; UCHAR Reserved4 : 3; UCHAR Lun : 3; UCHAR BlockAddress[4]; UCHAR Reserved3; UCHAR AllocationLength[2]; UCHAR Control; } READ_TRACK_INFORMATION; struct _RESERVE_TRACK_RZONE { UCHAR OperationCode; UCHAR Reserved1[4]; UCHAR ReservationSize[4]; UCHAR Control; } RESERVE_TRACK_RZONE; struct _SEND_OPC_INFORMATION { UCHAR OperationCode; UCHAR DoOpc : 1; UCHAR Reserved1 : 7; UCHAR Exclude0 : 1; UCHAR Exclude1 : 1; UCHAR Reserved2 : 6; UCHAR Reserved3[4]; UCHAR ParameterListLength[2]; UCHAR Reserved4; } SEND_OPC_INFORMATION; struct _REPAIR_TRACK { UCHAR OperationCode; UCHAR Immediate : 1; UCHAR Reserved1 : 7; UCHAR Reserved2[2]; UCHAR TrackNumber[2]; UCHAR Reserved3[3]; UCHAR Control; } REPAIR_TRACK; struct _CLOSE_TRACK { UCHAR OperationCode; UCHAR Immediate : 1; UCHAR Reserved1 : 7; UCHAR Track : 1; UCHAR Session : 1; UCHAR Reserved2 : 6; UCHAR Reserved3; UCHAR TrackNumber[2]; UCHAR Reserved4[3]; UCHAR Control; } CLOSE_TRACK; struct _READ_BUFFER_CAPACITY { UCHAR OperationCode; UCHAR BlockInfo : 1; UCHAR Reserved1 : 7; UCHAR Reserved2[5]; UCHAR AllocationLength[2]; UCHAR Control; } READ_BUFFER_CAPACITY; struct _SEND_CUE_SHEET { UCHAR OperationCode; UCHAR Reserved[5]; UCHAR CueSheetSize[3]; UCHAR Control; } SEND_CUE_SHEET; struct _READ_HEADER { UCHAR OperationCode; UCHAR Reserved1 : 1; UCHAR Msf : 1; UCHAR Reserved2 : 3; UCHAR Lun : 3; UCHAR LogicalBlockAddress[4]; UCHAR Reserved3; UCHAR AllocationLength[2]; UCHAR Control; } READ_HEADER; struct _PLAY_AUDIO { UCHAR OperationCode; UCHAR Reserved1 : 5; UCHAR LogicalUnitNumber : 3; UCHAR StartingBlockAddress[4]; UCHAR Reserved2; UCHAR PlayLength[2]; UCHAR Control; } PLAY_AUDIO; struct _PLAY_AUDIO_MSF { UCHAR OperationCode; UCHAR Reserved1 : 5; UCHAR LogicalUnitNumber : 3; UCHAR Reserved2; UCHAR StartingM; UCHAR StartingS; UCHAR StartingF; UCHAR EndingM; UCHAR EndingS; UCHAR EndingF; UCHAR Control; } PLAY_AUDIO_MSF; struct _BLANK_MEDIA { UCHAR OperationCode; UCHAR BlankType : 3; UCHAR Reserved1 : 1; UCHAR Immediate : 1; UCHAR Reserved2 : 3; UCHAR AddressOrTrack[4]; UCHAR Reserved3[5]; UCHAR Control; } BLANK_MEDIA; struct _PLAY_CD { UCHAR OperationCode; UCHAR Reserved1 : 1; UCHAR CMSF : 1; UCHAR ExpectedSectorType : 3; UCHAR Lun : 3; union { struct _LBA { UCHAR StartingBlockAddress[4]; UCHAR PlayLength[4]; } LBA; struct _MSF { UCHAR Reserved1; UCHAR StartingM; UCHAR StartingS; UCHAR StartingF; UCHAR EndingM; UCHAR EndingS; UCHAR EndingF; UCHAR Reserved2; } MSF; }; UCHAR Audio : 1; UCHAR Composite : 1; UCHAR Port1 : 1; UCHAR Port2 : 1; UCHAR Reserved2 : 3; UCHAR Speed : 1; UCHAR Control; } PLAY_CD; struct _SCAN_CD { UCHAR OperationCode; UCHAR RelativeAddress : 1; UCHAR Reserved1 : 3; UCHAR Direct : 1; UCHAR Lun : 3; UCHAR StartingAddress[4]; UCHAR Reserved2[3]; UCHAR Reserved3 : 6; UCHAR Type : 2; UCHAR Reserved4; UCHAR Control; } SCAN_CD; struct _STOP_PLAY_SCAN { UCHAR OperationCode; UCHAR Reserved1 : 5; UCHAR Lun : 3; UCHAR Reserved2[7]; UCHAR Control; } STOP_PLAY_SCAN; struct _SUBCHANNEL { UCHAR OperationCode; UCHAR Reserved0 : 1; UCHAR Msf : 1; UCHAR Reserved1 : 3; UCHAR LogicalUnitNumber : 3; UCHAR Reserved2 : 6; UCHAR SubQ : 1; UCHAR Reserved3 : 1; UCHAR Format; UCHAR Reserved4[2]; UCHAR TrackNumber; UCHAR AllocationLength[2]; UCHAR Control; } SUBCHANNEL; struct _READ_CD { UCHAR OperationCode; UCHAR RelativeAddress : 1; UCHAR Reserved0 : 1; UCHAR ExpectedSectorType : 3; UCHAR Lun : 3; UCHAR StartingLBA[4]; UCHAR TransferBlocks[3]; UCHAR Reserved2 : 1; UCHAR ErrorFlags : 2; UCHAR IncludeEDC : 1; UCHAR IncludeUserData : 1; UCHAR HeaderCode : 2; UCHAR IncludeSyncData : 1; UCHAR SubChannelSelection : 3; UCHAR Reserved3 : 5; UCHAR Control; } READ_CD; struct _READ_CD_MSF { UCHAR OperationCode; UCHAR RelativeAddress : 1; UCHAR Reserved1 : 1; UCHAR ExpectedSectorType : 3; UCHAR Lun : 3; UCHAR Reserved2; UCHAR StartingM; UCHAR StartingS; UCHAR StartingF; UCHAR EndingM; UCHAR EndingS; UCHAR EndingF; UCHAR Reserved4 : 1; UCHAR ErrorFlags : 2; UCHAR IncludeEDC : 1; UCHAR IncludeUserData : 1; UCHAR HeaderCode : 2; UCHAR IncludeSyncData : 1; UCHAR SubChannelSelection : 3; UCHAR Reserved5 : 5; UCHAR Control; } READ_CD_MSF; struct _PLXTR_READ_CDDA { UCHAR OperationCode; UCHAR Reserved0 : 5; UCHAR LogicalUnitNumber : 3; UCHAR LogicalBlockByte0; UCHAR LogicalBlockByte1; UCHAR LogicalBlockByte2; UCHAR LogicalBlockByte3; UCHAR TransferBlockByte0; UCHAR TransferBlockByte1; UCHAR TransferBlockByte2; UCHAR TransferBlockByte3; UCHAR SubCode; UCHAR Control; } PLXTR_READ_CDDA; struct _NEC_READ_CDDA { UCHAR OperationCode; UCHAR Reserved0; UCHAR LogicalBlockByte0; UCHAR LogicalBlockByte1; UCHAR LogicalBlockByte2; UCHAR LogicalBlockByte3; UCHAR Reserved1; UCHAR TransferBlockByte0; UCHAR TransferBlockByte1; UCHAR Control; } NEC_READ_CDDA; struct _MODE_SENSE { UCHAR OperationCode; UCHAR Reserved1 : 3; UCHAR Dbd : 1; UCHAR Reserved2 : 1; UCHAR LogicalUnitNumber : 3; UCHAR PageCode : 6; UCHAR Pc : 2; UCHAR Reserved3; UCHAR AllocationLength; UCHAR Control; } MODE_SENSE; struct _MODE_SENSE10 { UCHAR OperationCode; UCHAR Reserved1 : 3; UCHAR Dbd : 1; UCHAR Reserved2 : 1; UCHAR LogicalUnitNumber : 3; UCHAR PageCode : 6; UCHAR Pc : 2; UCHAR Reserved3[4]; UCHAR AllocationLength[2]; UCHAR Control; } MODE_SENSE10; struct _MODE_SELECT { UCHAR OperationCode; UCHAR SPBit : 1; UCHAR Reserved1 : 3; UCHAR PFBit : 1; UCHAR LogicalUnitNumber : 3; UCHAR Reserved2[2]; UCHAR ParameterListLength; UCHAR Control; } MODE_SELECT; struct _MODE_SELECT10 { UCHAR OperationCode; UCHAR SPBit : 1; UCHAR Reserved1 : 3; UCHAR PFBit : 1; UCHAR LogicalUnitNumber : 3; UCHAR Reserved2[5]; UCHAR ParameterListLength[2]; UCHAR Control; } MODE_SELECT10; struct _LOCATE { UCHAR OperationCode; UCHAR Immediate : 1; UCHAR CPBit : 1; UCHAR BTBit : 1; UCHAR Reserved1 : 2; UCHAR LogicalUnitNumber : 3; UCHAR Reserved3; UCHAR LogicalBlockAddress[4]; UCHAR Reserved4; UCHAR Partition; UCHAR Control; } LOCATE; struct _LOGSENSE { UCHAR OperationCode; UCHAR SPBit : 1; UCHAR PPCBit : 1; UCHAR Reserved1 : 3; UCHAR LogicalUnitNumber : 3; UCHAR PageCode : 6; UCHAR PCBit : 2; UCHAR Reserved2; UCHAR Reserved3; UCHAR ParameterPointer[2]; UCHAR AllocationLength[2]; UCHAR Control; } LOGSENSE; struct _LOGSELECT { UCHAR OperationCode; UCHAR SPBit : 1; UCHAR PCRBit : 1; UCHAR Reserved1 : 3; UCHAR LogicalUnitNumber : 3; UCHAR Reserved : 6; UCHAR PCBit : 2; UCHAR Reserved2[4]; UCHAR ParameterListLength[2]; UCHAR Control; } LOGSELECT; struct _PRINT { UCHAR OperationCode; UCHAR Reserved : 5; UCHAR LogicalUnitNumber : 3; UCHAR TransferLength[3]; UCHAR Control; } PRINT; struct _SEEK { UCHAR OperationCode; UCHAR Reserved1 : 5; UCHAR LogicalUnitNumber : 3; UCHAR LogicalBlockAddress[4]; UCHAR Reserved2[3]; UCHAR Control; } SEEK; struct _ERASE { UCHAR OperationCode; UCHAR Long : 1; UCHAR Immediate : 1; UCHAR Reserved1 : 3; UCHAR LogicalUnitNumber : 3; UCHAR Reserved2[3]; UCHAR Control; } ERASE; struct _START_STOP { UCHAR OperationCode; UCHAR Immediate : 1; UCHAR Reserved1 : 4; UCHAR LogicalUnitNumber : 3; UCHAR Reserved2[2]; UCHAR Start : 1; UCHAR LoadEject : 1; UCHAR Reserved3 : 6; UCHAR Control; } START_STOP; struct _MEDIA_REMOVAL { UCHAR OperationCode; UCHAR Reserved1 : 5; UCHAR LogicalUnitNumber : 3; UCHAR Reserved2[2]; UCHAR Prevent : 1; UCHAR Persistant : 1; UCHAR Reserved3 : 6; UCHAR Control; } MEDIA_REMOVAL; struct _SEEK_BLOCK { UCHAR OperationCode; UCHAR Immediate : 1; UCHAR Reserved1 : 7; UCHAR BlockAddress[3]; UCHAR Link : 1; UCHAR Flag : 1; UCHAR Reserved2 : 4; UCHAR VendorUnique : 2; } SEEK_BLOCK; struct _REQUEST_BLOCK_ADDRESS { UCHAR OperationCode; UCHAR Reserved1[3]; UCHAR AllocationLength; UCHAR Link : 1; UCHAR Flag : 1; UCHAR Reserved2 : 4; UCHAR VendorUnique : 2; } REQUEST_BLOCK_ADDRESS; struct _PARTITION { UCHAR OperationCode; UCHAR Immediate : 1; UCHAR Sel : 1; UCHAR PartitionSelect : 6; UCHAR Reserved1[3]; UCHAR Control; } PARTITION; struct _WRITE_TAPE_MARKS { UCHAR OperationCode; UCHAR Immediate : 1; UCHAR WriteSetMarks : 1; UCHAR Reserved : 3; UCHAR LogicalUnitNumber : 3; UCHAR TransferLength[3]; UCHAR Control; } WRITE_TAPE_MARKS; struct _SPACE_TAPE_MARKS { UCHAR OperationCode; UCHAR Code : 3; UCHAR Reserved : 2; UCHAR LogicalUnitNumber : 3; UCHAR NumMarksMSB; UCHAR NumMarks; UCHAR NumMarksLSB; union { UCHAR value; struct { UCHAR Link : 1; UCHAR Flag : 1; UCHAR Reserved : 4; UCHAR VendorUnique : 2; } Fields; } Byte6; } SPACE_TAPE_MARKS; struct _READ_POSITION { UCHAR Operation; UCHAR BlockType : 1; UCHAR Reserved1 : 4; UCHAR Lun : 3; UCHAR Reserved2[7]; UCHAR Control; } READ_POSITION; struct _CDB6READWRITETAPE { UCHAR OperationCode; UCHAR VendorSpecific : 5; UCHAR Reserved : 3; UCHAR TransferLenMSB; UCHAR TransferLen; UCHAR TransferLenLSB; UCHAR Link : 1; UCHAR Flag : 1; UCHAR Reserved1 : 4; UCHAR VendorUnique : 2; } CDB6READWRITETAPE; struct _INIT_ELEMENT_STATUS { UCHAR OperationCode; UCHAR Reserved1 : 5; UCHAR LogicalUnitNumber : 3; UCHAR Reserved2[3]; UCHAR Reserved3 : 7; UCHAR NoBarCode : 1; } INIT_ELEMENT_STATUS; struct _INITIALIZE_ELEMENT_RANGE { UCHAR OperationCode; UCHAR Range : 1; UCHAR Reserved1 : 4; UCHAR LogicalUnitNumber : 3; UCHAR FirstElementAddress[2]; UCHAR Reserved2[2]; UCHAR NumberOfElements[2]; UCHAR Reserved3; UCHAR Reserved4 : 7; UCHAR NoBarCode : 1; } INITIALIZE_ELEMENT_RANGE; struct _POSITION_TO_ELEMENT { UCHAR OperationCode; UCHAR Reserved1 : 5; UCHAR LogicalUnitNumber : 3; UCHAR TransportElementAddress[2]; UCHAR DestinationElementAddress[2]; UCHAR Reserved2[2]; UCHAR Flip : 1; UCHAR Reserved3 : 7; UCHAR Control; } POSITION_TO_ELEMENT; struct _MOVE_MEDIUM { UCHAR OperationCode; UCHAR Reserved1 : 5; UCHAR LogicalUnitNumber : 3; UCHAR TransportElementAddress[2]; UCHAR SourceElementAddress[2]; UCHAR DestinationElementAddress[2]; UCHAR Reserved2[2]; UCHAR Flip : 1; UCHAR Reserved3 : 7; UCHAR Control; } MOVE_MEDIUM; struct _EXCHANGE_MEDIUM { UCHAR OperationCode; UCHAR Reserved1 : 5; UCHAR LogicalUnitNumber : 3; UCHAR TransportElementAddress[2]; UCHAR SourceElementAddress[2]; UCHAR Destination1ElementAddress[2]; UCHAR Destination2ElementAddress[2]; UCHAR Flip1 : 1; UCHAR Flip2 : 1; UCHAR Reserved3 : 6; UCHAR Control; } EXCHANGE_MEDIUM; struct _READ_ELEMENT_STATUS { UCHAR OperationCode; UCHAR ElementType : 4; UCHAR VolTag : 1; UCHAR LogicalUnitNumber : 3; UCHAR StartingElementAddress[2]; UCHAR NumberOfElements[2]; UCHAR Reserved1; UCHAR AllocationLength[3]; UCHAR Reserved2; UCHAR Control; } READ_ELEMENT_STATUS; struct _SEND_VOLUME_TAG { UCHAR OperationCode; UCHAR ElementType : 4; UCHAR Reserved1 : 1; UCHAR LogicalUnitNumber : 3; UCHAR StartingElementAddress[2]; UCHAR Reserved2; UCHAR ActionCode : 5; UCHAR Reserved3 : 3; UCHAR Reserved4[2]; UCHAR ParameterListLength[2]; UCHAR Reserved5; UCHAR Control; } SEND_VOLUME_TAG; struct _REQUEST_VOLUME_ELEMENT_ADDRESS { UCHAR OperationCode; UCHAR ElementType : 4; UCHAR VolTag : 1; UCHAR LogicalUnitNumber : 3; UCHAR StartingElementAddress[2]; UCHAR NumberElements[2]; UCHAR Reserved1; UCHAR AllocationLength[3]; UCHAR Reserved2; UCHAR Control; } REQUEST_VOLUME_ELEMENT_ADDRESS; struct _LOAD_UNLOAD { UCHAR OperationCode; UCHAR Immediate : 1; UCHAR Reserved1 : 4; UCHAR Lun : 3; UCHAR Reserved2[2]; UCHAR Start : 1; UCHAR LoadEject : 1; UCHAR Reserved3 : 6; UCHAR Reserved4[3]; UCHAR Slot; UCHAR Reserved5[3]; } LOAD_UNLOAD; struct _MECH_STATUS { UCHAR OperationCode; UCHAR Reserved : 5; UCHAR Lun : 3; UCHAR Reserved1[6]; UCHAR AllocationLength[2]; UCHAR Reserved2[1]; UCHAR Control; } MECH_STATUS; struct _SYNCHRONIZE_CACHE10 { UCHAR OperationCode; UCHAR RelAddr : 1; UCHAR Immediate : 1; UCHAR Reserved : 3; UCHAR Lun : 3; UCHAR LogicalBlockAddress[4]; UCHAR Reserved2; UCHAR BlockCount[2]; UCHAR Control; } SYNCHRONIZE_CACHE10; struct _GET_EVENT_STATUS_NOTIFICATION { UCHAR OperationCode; UCHAR Immediate : 1; UCHAR Reserved : 4; UCHAR Lun : 3; UCHAR Reserved2[2]; UCHAR NotificationClassRequest; UCHAR Reserved3[2]; UCHAR EventListLength[2]; UCHAR Control; } GET_EVENT_STATUS_NOTIFICATION; struct _GET_PERFORMANCE { UCHAR OperationCode; UCHAR Except : 2; UCHAR Write : 1; UCHAR Tolerance : 2; UCHAR Reserved0 : 3; UCHAR StartingLBA[4]; UCHAR Reserved1[2]; UCHAR MaximumNumberOfDescriptors[2]; UCHAR Type; UCHAR Control; } GET_PERFORMANCE; struct _READ_DVD_STRUCTURE { UCHAR OperationCode; UCHAR Reserved1 : 5; UCHAR Lun : 3; UCHAR RMDBlockNumber[4]; UCHAR LayerNumber; UCHAR Format; UCHAR AllocationLength[2]; UCHAR Reserved3 : 6; UCHAR AGID : 2; UCHAR Control; } READ_DVD_STRUCTURE; struct _SET_STREAMING { UCHAR OperationCode; UCHAR Reserved[8]; UCHAR ParameterListLength[2]; UCHAR Control; } SET_STREAMING; struct _SEND_DVD_STRUCTURE { UCHAR OperationCode; UCHAR Reserved1 : 5; UCHAR Lun : 3; UCHAR Reserved2[5]; UCHAR Format; UCHAR ParameterListLength[2]; UCHAR Reserved3; UCHAR Control; } SEND_DVD_STRUCTURE; struct _SEND_KEY { UCHAR OperationCode; UCHAR Reserved1 : 5; UCHAR Lun : 3; UCHAR Reserved2[6]; UCHAR ParameterListLength[2]; UCHAR KeyFormat : 6; UCHAR AGID : 2; UCHAR Control; } SEND_KEY; struct _REPORT_KEY { UCHAR OperationCode; UCHAR Reserved1 : 5; UCHAR Lun : 3; UCHAR LogicalBlockAddress[4]; UCHAR Reserved2[2]; UCHAR AllocationLength[2]; UCHAR KeyFormat : 6; UCHAR AGID : 2; UCHAR Control; } REPORT_KEY; struct _SET_READ_AHEAD { UCHAR OperationCode; UCHAR Reserved1 : 5; UCHAR Lun : 3; UCHAR TriggerLBA[4]; UCHAR ReadAheadLBA[4]; UCHAR Reserved2; UCHAR Control; } SET_READ_AHEAD; struct _READ_FORMATTED_CAPACITIES { UCHAR OperationCode; UCHAR Reserved1 : 5; UCHAR Lun : 3; UCHAR Reserved2[5]; UCHAR AllocationLength[2]; UCHAR Control; } READ_FORMATTED_CAPACITIES; struct _REPORT_LUNS { UCHAR OperationCode; UCHAR Reserved1[5]; UCHAR AllocationLength[4]; UCHAR Reserved2[1]; UCHAR Control; } REPORT_LUNS; struct _PERSISTENT_RESERVE_IN { UCHAR OperationCode; UCHAR ServiceAction : 5; UCHAR Reserved1 : 3; UCHAR Reserved2[5]; UCHAR AllocationLength[2]; UCHAR Control; } PERSISTENT_RESERVE_IN; struct _PERSISTENT_RESERVE_OUT { UCHAR OperationCode; UCHAR ServiceAction : 5; UCHAR Reserved1 : 3; UCHAR Type : 4; UCHAR Scope : 4; UCHAR Reserved2[4]; UCHAR ParameterListLength[2]; UCHAR Control; } PERSISTENT_RESERVE_OUT; struct _GET_CONFIGURATION { UCHAR OperationCode; UCHAR RequestType : 2; UCHAR Reserved1 : 6; UCHAR StartingFeature[2]; UCHAR Reserved2[3]; UCHAR AllocationLength[2]; UCHAR Control; } GET_CONFIGURATION; struct _SET_CD_SPEED { UCHAR OperationCode; union { UCHAR Reserved1; struct { UCHAR RotationControl : 2; UCHAR Reserved3 : 6; }; }; UCHAR ReadSpeed[2]; UCHAR WriteSpeed[2]; UCHAR Reserved2[5]; UCHAR Control; } SET_CD_SPEED; struct _READ12 { UCHAR OperationCode; UCHAR RelativeAddress : 1; UCHAR Reserved1 : 2; UCHAR ForceUnitAccess : 1; UCHAR DisablePageOut : 1; UCHAR LogicalUnitNumber : 3; UCHAR LogicalBlock[4]; UCHAR TransferLength[4]; UCHAR Reserved2 : 7; UCHAR Streaming : 1; UCHAR Control; } READ12; struct _WRITE12 { UCHAR OperationCode; UCHAR RelativeAddress : 1; UCHAR Reserved1 : 1; UCHAR EBP : 1; UCHAR ForceUnitAccess : 1; UCHAR DisablePageOut : 1; UCHAR LogicalUnitNumber : 3; UCHAR LogicalBlock[4]; UCHAR TransferLength[4]; UCHAR Reserved2 : 7; UCHAR Streaming : 1; UCHAR Control; } WRITE12; struct _READ16 { UCHAR OperationCode; UCHAR Reserved1 : 3; UCHAR ForceUnitAccess : 1; UCHAR DisablePageOut : 1; UCHAR ReadProtect : 3; UCHAR LogicalBlock[8]; UCHAR TransferLength[4]; UCHAR Reserved2 : 7; UCHAR Streaming : 1; UCHAR Control; } READ16; struct _WRITE16 { UCHAR OperationCode; UCHAR Reserved1 : 3; UCHAR ForceUnitAccess : 1; UCHAR DisablePageOut : 1; UCHAR WriteProtect : 3; UCHAR LogicalBlock[8]; UCHAR TransferLength[4]; UCHAR Reserved2 : 7; UCHAR Streaming : 1; UCHAR Control; } WRITE16; struct _VERIFY16 { UCHAR OperationCode; UCHAR Reserved1 : 1; UCHAR ByteCheck : 1; UCHAR BlockVerify : 1; UCHAR Reserved2 : 1; UCHAR DisablePageOut : 1; UCHAR VerifyProtect : 3; UCHAR LogicalBlock[8]; UCHAR VerificationLength[4]; UCHAR Reserved3 : 7; UCHAR Streaming : 1; UCHAR Control; } VERIFY16; struct _SYNCHRONIZE_CACHE16 { UCHAR OperationCode; UCHAR Reserved1 : 1; UCHAR Immediate : 1; UCHAR Reserved2 : 6; UCHAR LogicalBlock[8]; UCHAR BlockCount[4]; UCHAR Reserved3; UCHAR Control; } SYNCHRONIZE_CACHE16; struct _READ_CAPACITY16 { UCHAR OperationCode; UCHAR ServiceAction : 5; UCHAR Reserved1 : 3; UCHAR LogicalBlock[8]; UCHAR BlockCount[4]; UCHAR PMI : 1; UCHAR Reserved2 : 7; UCHAR Control; } READ_CAPACITY16; ULONG AsUlong[4]; UCHAR AsByte[16]; } CDB; typedef CDB *PCDB; /* Notification event status header */ typedef struct _NOTIFICATION_EVENT_STATUS_HEADER { UCHAR EventDataLength[2]; UCHAR NotificationClass : 3; UCHAR Reserved : 4; UCHAR NEA : 1; UCHAR SupportedEventClasses; } NOTIFICATION_EVENT_STATUS_HEADER; typedef NOTIFICATION_EVENT_STATUS_HEADER *PNOTIFICATION_EVENT_STATUS_HEADER; /* Notification operational status */ typedef struct _NOTIFICATION_OPERATIONAL_STATUS { UCHAR OperationalEvent : 4; UCHAR Reserved1 : 4; UCHAR OperationalStatus : 4; UCHAR Reserved2 : 3; UCHAR PersistentPrevented : 1; UCHAR Operation[2]; } NOTIFICATION_OPERATIONAL_STATUS; typedef NOTIFICATION_OPERATIONAL_STATUS *PNOTIFICATION_OPERATIONAL_STATUS; /* Notification power status */ typedef struct _NOTIFICATION_POWER_STATUS { UCHAR PowerEvent : 4; UCHAR Reserved : 4; UCHAR PowerStatus; UCHAR Reserved2[2]; } NOTIFICATION_POWER_STATUS; typedef NOTIFICATION_POWER_STATUS *PNOTIFICATION_POWER_STATUS; /* Notification external status */ typedef struct _NOTIFICATION_EXTERNAL_STATUS { UCHAR ExternalEvent : 4; UCHAR Reserved1 : 4; UCHAR ExternalStatus : 4; UCHAR Reserved2 : 3; UCHAR PersistentPrevented : 1; UCHAR Request[2]; } NOTIFICATION_EXTERNAL_STATUS; typedef NOTIFICATION_EXTERNAL_STATUS *PNOTIFICATION_EXTERNAL_STATUS; /* Notification media status */ typedef struct _NOTIFICATION_MEDIA_STATUS { UCHAR MediaEvent : 4; UCHAR Reserved : 4; union { UCHAR PowerStatus; UCHAR MediaStatus; struct { UCHAR DoorTrayOpen : 1; UCHAR MediaPresent : 1; UCHAR ReservedX : 6; }; }; UCHAR StartSlot; UCHAR EndSlot; } NOTIFICATION_MEDIA_STATUS; typedef NOTIFICATION_MEDIA_STATUS *PNOTIFICATION_MEDIA_STATUS; /* Notification multi-host status */ typedef struct _NOTIFICATION_MULTI_HOST_STATUS { UCHAR MultiHostEvent : 4; UCHAR Reserved1 : 4; UCHAR MultiHostStatus : 4; UCHAR Reserved2 : 3; UCHAR PersistentPrevented : 1; UCHAR Priority[2]; } NOTIFICATION_MULTI_HOST_STATUS; typedef NOTIFICATION_MULTI_HOST_STATUS *PNOTIFICATION_MULTI_HOST_STATUS; /* Notification busy status */ typedef struct _NOTIFICATION_BUSY_STATUS { UCHAR DeviceBusyEvent : 4; UCHAR Reserved : 4; UCHAR DeviceBusyStatus; UCHAR Time[2]; } NOTIFICATION_BUSY_STATUS; typedef NOTIFICATION_BUSY_STATUS *PNOTIFICATION_BUSY_STATUS; /* Read DVD structures header */ typedef struct _READ_DVD_STRUCTURES_HEADER { UCHAR Length[2]; UCHAR Reserved[2]; UCHAR Data[1]; } READ_DVD_STRUCTURES_HEADER; typedef READ_DVD_STRUCTURES_HEADER *PREAD_DVD_STRUCTURES_HEADER; /* CDVD key header */ typedef struct _CDVD_KEY_HEADER { UCHAR DataLength[2]; UCHAR Reserved[2]; UCHAR Data[1]; } CDVD_KEY_HEADER; typedef CDVD_KEY_HEADER *PCDVD_KEY_HEADER; /* CDVD report AGID data */ typedef struct _CDVD_REPORT_AGID_DATA { UCHAR Reserved1[3]; UCHAR Reserved2 : 6; UCHAR AGID : 2; } CDVD_REPORT_AGID_DATA; typedef CDVD_REPORT_AGID_DATA *PCDVD_REPORT_AGID_DATA; /* CDVD challenge key data */ typedef struct _CDVD_CHALLENGE_KEY_DATA { UCHAR ChallengeKeyValue[10]; UCHAR Reserved[2]; } CDVD_CHALLENGE_KEY_DATA; typedef CDVD_CHALLENGE_KEY_DATA *PCDVD_CHALLENGE_KEY_DATA; /* CDVD key data */ typedef struct _CDVD_KEY_DATA { UCHAR Key[5]; UCHAR Reserved[3]; } CDVD_KEY_DATA; typedef CDVD_KEY_DATA *PCDVD_KEY_DATA; /* CDVD report ASF data */ typedef struct _CDVD_REPORT_ASF_DATA { UCHAR Reserved1[3]; UCHAR Success : 1; UCHAR Reserved2 : 7; } CDVD_REPORT_ASF_DATA; typedef CDVD_REPORT_ASF_DATA *PCDVD_REPORT_ASF_DATA; /* CDVD title key header */ typedef struct _CDVD_TITLE_KEY_HEADER { UCHAR DataLength[2]; UCHAR Reserved1[1]; UCHAR Reserved2 : 3; UCHAR CGMS : 2; UCHAR CP_SEC : 1; UCHAR CPM : 1; UCHAR Zero : 1; CDVD_KEY_DATA TitleKey; } CDVD_TITLE_KEY_HEADER; typedef CDVD_TITLE_KEY_HEADER *PCDVD_TITLE_KEY_HEADER; /* Format descriptor */ typedef struct _FORMAT_DESCRIPTOR { UCHAR NumberOfBlocks[4]; UCHAR FormatSubType : 2; UCHAR FormatType : 6; UCHAR BlockLength[3]; } FORMAT_DESCRIPTOR; typedef FORMAT_DESCRIPTOR *PFORMAT_DESCRIPTOR; /* Format list header */ typedef struct _FORMAT_LIST_HEADER { UCHAR Reserved; UCHAR VendorSpecific : 1; UCHAR Immediate : 1; UCHAR TryOut : 1; UCHAR IP : 1; UCHAR STPF : 1; UCHAR DCRT : 1; UCHAR DPRY : 1; UCHAR FOV : 1; UCHAR FormatDescriptorLength[2]; FORMAT_DESCRIPTOR Descriptors[1]; } FORMAT_LIST_HEADER; typedef FORMAT_LIST_HEADER *PFORMAT_LIST_HEADER; /* Formatted capacity descriptor */ typedef struct _FORMATTED_CAPACITY_DESCRIPTOR { UCHAR NumberOfBlocks[4]; UCHAR Maximum : 1; UCHAR Valid : 1; UCHAR FormatType : 6; UCHAR BlockLength[3]; } FORMATTED_CAPACITY_DESCRIPTOR; typedef FORMATTED_CAPACITY_DESCRIPTOR *PFORMATTED_CAPACITY_DESCRIPTOR; /* Formatted capacity list */ typedef struct _FORMATTED_CAPACITY_LIST { UCHAR Reserved[3]; UCHAR CapacityListLength; FORMATTED_CAPACITY_DESCRIPTOR Descriptors[1]; } FORMATTED_CAPACITY_LIST; typedef FORMATTED_CAPACITY_LIST *PFORMATTED_CAPACITY_LIST; /* OPC table entry */ typedef struct _OPC_TABLE_ENTRY { UCHAR Speed[2]; UCHAR OPCValue[6]; } OPC_TABLE_ENTRY; typedef OPC_TABLE_ENTRY *POPC_TABLE_ENTRY; /* Disc information */ typedef struct _DISC_INFORMATION { UCHAR Length[2]; UCHAR DiscStatus : 2; UCHAR LastSessionStatus : 2; UCHAR Erasable : 1; UCHAR Reserved1 : 3; UCHAR FirstTrackNumber; UCHAR NumberOfSessionsLsb; UCHAR LastSessionFirstTrackLsb; UCHAR LastSessionLastTrackLsb; UCHAR MrwStatus : 2; UCHAR MrwDirtyBit : 1; UCHAR Reserved2 : 2; UCHAR URU : 1; UCHAR DBC_V : 1; UCHAR DID_V : 1; UCHAR DiscType; UCHAR NumberOfSessionsMsb; UCHAR LastSessionFirstTrackMsb; UCHAR LastSessionLastTrackMsb; UCHAR DiskIdentification[4]; UCHAR LastSessionLeadIn[4]; UCHAR LastPossibleLeadOutStartTime[4]; UCHAR DiskBarCode[8]; UCHAR Reserved4; UCHAR NumberOPCEntries; OPC_TABLE_ENTRY OPCTable[1]; } DISC_INFORMATION; typedef DISC_INFORMATION *PDISC_INFORMATION; /* Disk information */ typedef struct _DISK_INFORMATION { UCHAR Length[2]; UCHAR DiskStatus : 2; UCHAR LastSessionStatus : 2; UCHAR Erasable : 1; UCHAR Reserved1 : 3; UCHAR FirstTrackNumber; UCHAR NumberOfSessions; UCHAR LastSessionFirstTrack; UCHAR LastSessionLastTrack; UCHAR Reserved2 : 5; UCHAR GEN : 1; UCHAR DBC_V : 1; UCHAR DID_V : 1; UCHAR DiskType; UCHAR Reserved3[3]; UCHAR DiskIdentification[4]; UCHAR LastSessionLeadIn[4]; UCHAR LastPossibleStartTime[4]; UCHAR DiskBarCode[8]; UCHAR Reserved4; UCHAR NumberOPCEntries; OPC_TABLE_ENTRY OPCTable[1]; } DISK_INFORMATION; typedef DISK_INFORMATION *PDISK_INFORMATION; /* Data block header */ typedef struct _DATA_BLOCK_HEADER { UCHAR DataMode; UCHAR Reserved[4]; union { UCHAR LogicalBlockAddress[4]; struct { UCHAR Reserved; UCHAR M; UCHAR S; UCHAR F; } MSF; }; } DATA_BLOCK_HEADER; typedef DATA_BLOCK_HEADER *PDATA_BLOCK_HEADER; /* Track information */ typedef struct _TRACK_INFORMATION { UCHAR Length[2]; UCHAR TrackNumber; UCHAR SessionNumber; UCHAR Reserved1; UCHAR TrackMode : 4; UCHAR Copy : 1; UCHAR Damage : 1; UCHAR Reserved2 : 2; UCHAR DataMode : 4; UCHAR FP : 1; UCHAR Packet : 1; UCHAR Blank : 1; UCHAR RT : 1; UCHAR NWA_V : 1; UCHAR Reserved3 : 7; UCHAR TrackStartAddress[4]; UCHAR NextWritableAddress[4]; UCHAR FreeBlocks[4]; UCHAR FixedPacketSize[4]; } TRACK_INFORMATION; typedef TRACK_INFORMATION *PTRACK_INFORMATION; /* Track information (revision 2) */ typedef struct _TRACK_INFORMATION2 { UCHAR Length[2]; UCHAR TrackNumberLsb; UCHAR SessionNumberLsb; UCHAR Reserved4; UCHAR TrackMode : 4; UCHAR Copy : 1; UCHAR Damage : 1; UCHAR Reserved5 : 2; UCHAR DataMode : 4; UCHAR FixedPacket : 1; UCHAR Packet : 1; UCHAR Blank : 1; UCHAR ReservedTrack : 1; UCHAR NWA_V : 1; UCHAR LRA_V : 1; UCHAR Reserved6 : 6; UCHAR TrackStartAddress[4]; UCHAR NextWritableAddress[4]; UCHAR FreeBlocks[4]; UCHAR FixedPacketSize[4]; UCHAR TrackSize[4]; UCHAR LastRecordedAddress[4]; UCHAR TrackNumberMsb; UCHAR SessionNumberMsb; UCHAR Reserved7[2]; } TRACK_INFORMATION2; typedef TRACK_INFORMATION2 *PTRACK_INFORMATION2; /* Track information (revision 3) */ typedef struct _TRACK_INFORMATION3 { UCHAR Length[2]; UCHAR TrackNumberLsb; UCHAR SessionNumberLsb; UCHAR Reserved4; UCHAR TrackMode : 4; UCHAR Copy : 1; UCHAR Damage : 1; UCHAR Reserved5 : 2; UCHAR DataMode : 4; UCHAR FixedPacket : 1; UCHAR Packet : 1; UCHAR Blank : 1; UCHAR ReservedTrack : 1; UCHAR NWA_V : 1; UCHAR LRA_V : 1; UCHAR Reserved6 : 6; UCHAR TrackStartAddress[4]; UCHAR NextWritableAddress[4]; UCHAR FreeBlocks[4]; UCHAR FixedPacketSize[4]; UCHAR TrackSize[4]; UCHAR LastRecordedAddress[4]; UCHAR TrackNumberMsb; UCHAR SessionNumberMsb; UCHAR Reserved7[2]; UCHAR ReadCompatibilityLba[4]; } TRACK_INFORMATION3; typedef TRACK_INFORMATION3 *PTRACK_INFORMATION3; /* Performance descriptor */ typedef struct _PERFORMANCE_DESCRIPTOR { UCHAR RandomAccess : 1; UCHAR Exact : 1; UCHAR RestoreDefaults : 1; UCHAR WriteRotationControl : 2; UCHAR Reserved1 : 3; UCHAR Reserved[3]; UCHAR StartLba[4]; UCHAR EndLba[4]; UCHAR ReadSize[4]; UCHAR ReadTime[4]; UCHAR WriteSize[4]; UCHAR WriteTime[4]; } PERFORMANCE_DESCRIPTOR; typedef PERFORMANCE_DESCRIPTOR *PPERFORMANCE_DESCRIPTOR; /* SCSI extended message */ typedef struct _SCSI_EXTENDED_MESSAGE { UCHAR InitialMessageCode; UCHAR MessageLength; UCHAR MessageType; union _EXTENDED_ARGUMENTS { struct { UCHAR Modifier[4]; } Modify; struct { UCHAR TransferPeriod; UCHAR ReqAckOffset; } Synchronous; struct { UCHAR Width; } Wide; } ExtendedArguments; } SCSI_EXTENDED_MESSAGE; typedef SCSI_EXTENDED_MESSAGE *PSCSI_EXTENDED_MESSAGE; /* Inquiry data */ typedef struct _INQUIRYDATA { UCHAR DeviceType : 5; UCHAR DeviceTypeQualifier : 3; UCHAR DeviceTypeModifier : 7; UCHAR RemovableMedia : 1; #if (NTDDI_VERSION >= 0x05010000) union { UCHAR Versions; struct { UCHAR ANSIVersion : 3; UCHAR ECMAVersion : 3; UCHAR ISOVersion : 2; }; }; #else UCHAR Versions; #endif UCHAR ResponseDataFormat : 4; UCHAR HiSupport : 1; UCHAR NormACA : 1; #if (NTDDI_VERSION >= 0x05010000) UCHAR TerminateTask : 1; #else UCHAR ReservedBit : 1; #endif UCHAR AERC : 1; UCHAR AdditionalLength; #if (NTDDI_VERSION >= 0x05010000) UCHAR Reserved; UCHAR Addr16 : 1; UCHAR Addr32 : 1; UCHAR AckReqQ : 1; UCHAR MediumChanger : 1; UCHAR MultiPort : 1; UCHAR ReservedBit2 : 1; UCHAR EnclosureServices : 1; UCHAR ReservedBit3 : 1; #else UCHAR Reserved[2]; #endif UCHAR SoftReset : 1; UCHAR CommandQueue : 1; #if (NTDDI_VERSION >= 0x05010000) UCHAR TransferDisable : 1; #else UCHAR Reserved2 : 1; #endif UCHAR LinkedCommands : 1; UCHAR Synchronous : 1; UCHAR Wide16Bit : 1; UCHAR Wide32Bit : 1; UCHAR RelativeAddressing : 1; UCHAR VendorId[8]; UCHAR ProductId[16]; UCHAR ProductRevisionLevel[4]; UCHAR VendorSpecific[20]; UCHAR Reserved3[40]; } INQUIRYDATA; typedef INQUIRYDATA *PINQUIRYDATA; /* Vital product data media serial number page */ typedef struct _VPD_MEDIA_SERIAL_NUMBER_PAGE { UCHAR DeviceType : 5; UCHAR DeviceTypeQualifier : 3; UCHAR PageCode; UCHAR Reserved; UCHAR PageLength; UCHAR SerialNumber[1]; } VPD_MEDIA_SERIAL_NUMBER_PAGE; typedef VPD_MEDIA_SERIAL_NUMBER_PAGE *PVPD_MEDIA_SERIAL_NUMBER_PAGE; /* Vital product data serial number page */ typedef struct _VPD_SERIAL_NUMBER_PAGE { UCHAR DeviceType : 5; UCHAR DeviceTypeQualifier : 3; UCHAR PageCode; UCHAR Reserved; UCHAR PageLength; UCHAR SerialNumber[1]; } VPD_SERIAL_NUMBER_PAGE; typedef VPD_SERIAL_NUMBER_PAGE *PVPD_SERIAL_NUMBER_PAGE; /* Vital product data code sets */ typedef enum _VPD_CODE_SET { VpdCodeSetReserved = 0, VpdCodeSetBinary = 1, VpdCodeSetAscii = 2, VpdCodeSetUTF8 = 3 } VPD_CODE_SET; typedef VPD_CODE_SET *PVPD_CODE_SET; /* Vital product data associations */ typedef enum _VPD_ASSOCIATION { VpdAssocDevice = 0, VpdAssocPort = 1, VpdAssocTarget = 2 } VPD_ASSOCIATION; typedef VPD_ASSOCIATION *PVPD_ASSOCIATION; /* Vital product data identifier types */ typedef enum _VPD_IDENTIFIER_TYPE { VpdIdentifierTypeVendorSpecific = 0, VpdIdentifierTypeVendorId = 1, VpdIdentifierTypeEUI64 = 2, VpdIdentifierTypeFCPHName = 3, VpdIdentifierTypePortRelative = 4, VpdIdentifierTypeTargetPortGroup = 5, VpdIdentifierTypeLogicalUnitGroup = 6, VpdIdentifierTypeMD5LogicalUnitId = 7, VpdIdentifierTypeSCSINameString = 8 } VPD_IDENTIFIER_TYPE; typedef VPD_IDENTIFIER_TYPE *PVPD_IDENTIFIER_TYPE; /* Vital product data identification descriptor */ typedef struct _VPD_IDENTIFICATION_DESCRIPTOR { UCHAR CodeSet : 4; UCHAR Reserved : 4; UCHAR IdentifierType : 4; UCHAR Association : 2; UCHAR Reserved2 : 2; UCHAR Reserved3; UCHAR IdentifierLength; UCHAR Identifier[1]; } VPD_IDENTIFICATION_DESCRIPTOR; typedef VPD_IDENTIFICATION_DESCRIPTOR *PVPD_IDENTIFICATION_DESCRIPTOR; /* Vital product data identification page */ typedef struct _VPD_IDENTIFICATION_PAGE { UCHAR DeviceType : 5; UCHAR DeviceTypeQualifier : 3; UCHAR PageCode; UCHAR Reserved; UCHAR PageLength; UCHAR Descriptors[1]; } VPD_IDENTIFICATION_PAGE; typedef VPD_IDENTIFICATION_PAGE *PVPD_IDENTIFICATION_PAGE; /* Vital product data supported pages page */ typedef struct _VPD_SUPPORTED_PAGES_PAGE { UCHAR DeviceType : 5; UCHAR DeviceTypeQualifier : 3; UCHAR PageCode; UCHAR Reserved; UCHAR PageLength; UCHAR SupportedPageList[1]; } VPD_SUPPORTED_PAGES_PAGE; typedef VPD_SUPPORTED_PAGES_PAGE *PVPD_SUPPORTED_PAGES_PAGE; /* Registration list */ typedef struct { UCHAR Generation[4]; UCHAR AdditionalLength[4]; UCHAR ReservationKeyList[1][8]; } PRI_REGISTRATION_LIST; typedef PRI_REGISTRATION_LIST *PPRI_REGISTRATION_LIST; /* Reservation descriptor */ typedef struct { UCHAR ReservationKey[8]; UCHAR ScopeSpecificAddress[4]; UCHAR Reserved; UCHAR Type : 4; UCHAR Scope : 4; UCHAR Obsolete[2]; } PRI_RESERVATION_DESCRIPTOR; typedef PRI_RESERVATION_DESCRIPTOR *PPRI_RESERVATION_DESCRIPTOR; /* Reservation list */ typedef struct { UCHAR Generation[4]; UCHAR AdditionalLength[4]; PRI_RESERVATION_DESCRIPTOR Reservations[1]; } PRI_RESERVATION_LIST; typedef PRI_RESERVATION_LIST *PPRI_RESERVATION_LIST; /* Parameter list */ typedef struct { UCHAR ReservationKey[8]; UCHAR ServiceActionReservationKey[8]; UCHAR ScopeSpecificAddress[4]; UCHAR ActivatePersistThroughPowerLoss : 1; UCHAR Reserved1 : 7; UCHAR Reserved2; UCHAR Obsolete[2]; } PRO_PARAMETER_LIST; typedef PRO_PARAMETER_LIST *PPRO_PARAMETER_LIST; /* Sense data */ typedef struct _SENSE_DATA { UCHAR ErrorCode : 7; UCHAR Valid : 1; UCHAR SegmentNumber; UCHAR SenseKey : 4; UCHAR Reserved : 1; UCHAR IncorrectLength : 1; UCHAR EndOfMedia : 1; UCHAR FileMark : 1; UCHAR Information[4]; UCHAR AdditionalSenseLength; UCHAR CommandSpecificInformation[4]; UCHAR AdditionalSenseCode; UCHAR AdditionalSenseCodeQualifier; UCHAR FieldReplaceableUnitCode; UCHAR SenseKeySpecific[3]; } SENSE_DATA; typedef SENSE_DATA *PSENSE_DATA; /* Read capacity data */ typedef struct _READ_CAPACITY_DATA { ULONG LogicalBlockAddress; ULONG BytesPerBlock; } READ_CAPACITY_DATA; typedef READ_CAPACITY_DATA *PREAD_CAPACITY_DATA; /* Read capacity data (extended version) */ typedef struct _READ_CAPACITY_DATA_EX { LARGE_INTEGER LogicalBlockAddress; ULONG BytesPerBlock; } READ_CAPACITY_DATA_EX; typedef READ_CAPACITY_DATA_EX *PREAD_CAPACITY_DATA_EX; /* Read block limits */ typedef struct _READ_BLOCK_LIMITS { UCHAR Reserved; UCHAR BlockMaximumSize[3]; UCHAR BlockMinimumSize[2]; } READ_BLOCK_LIMITS_DATA; typedef READ_BLOCK_LIMITS_DATA *PREAD_BLOCK_LIMITS_DATA; /* Read buffer capacity data */ typedef struct _READ_BUFFER_CAPACITY_DATA { UCHAR DataLength[2]; UCHAR Reserved1; UCHAR BlockDataReturned : 1; UCHAR Reserved4 : 7; UCHAR TotalBufferSize[4]; UCHAR AvailableBufferSize[4]; } READ_BUFFER_CAPACITY_DATA; typedef READ_BUFFER_CAPACITY_DATA *PREAD_BUFFER_CAPACITY_DATA; /* Mode parameter header */ typedef struct _MODE_PARAMETER_HEADER { UCHAR ModeDataLength; UCHAR MediumType; UCHAR DeviceSpecificParameter; UCHAR BlockDescriptorLength; } MODE_PARAMETER_HEADER; typedef MODE_PARAMETER_HEADER *PMODE_PARAMETER_HEADER; /* Mode parameter header (version 10) */ typedef struct _MODE_PARAMETER_HEADER10 { UCHAR ModeDataLength[2]; UCHAR MediumType; UCHAR DeviceSpecificParameter; UCHAR Reserved[2]; UCHAR BlockDescriptorLength[2]; } MODE_PARAMETER_HEADER10; typedef MODE_PARAMETER_HEADER10 *PMODE_PARAMETER_HEADER10; /* Mode parameter block */ typedef struct _MODE_PARAMETER_BLOCK { UCHAR DensityCode; UCHAR NumberOfBlocks[3]; UCHAR Reserved; UCHAR BlockLength[3]; } MODE_PARAMETER_BLOCK; typedef MODE_PARAMETER_BLOCK *PMODE_PARAMETER_BLOCK; /* Mode disconnect page */ typedef struct _MODE_DISCONNECT_PAGE { UCHAR PageCode : 6; UCHAR Reserved : 1; UCHAR PageSavable : 1; UCHAR PageLength; UCHAR BufferFullRatio; UCHAR BufferEmptyRatio; UCHAR BusInactivityLimit[2]; UCHAR BusDisconnectTime[2]; UCHAR BusConnectTime[2]; UCHAR MaximumBurstSize[2]; UCHAR DataTransferDisconnect : 2; UCHAR Reserved2[3]; } MODE_DISCONNECT_PAGE; typedef MODE_DISCONNECT_PAGE *PMODE_DISCONNECT_PAGE; /* Mode caching page */ typedef struct _MODE_CACHING_PAGE { UCHAR PageCode : 6; UCHAR Reserved : 1; UCHAR PageSavable : 1; UCHAR PageLength; UCHAR ReadDisableCache : 1; UCHAR MultiplicationFactor : 1; UCHAR WriteCacheEnable : 1; UCHAR Reserved2 : 5; UCHAR WriteRetensionPriority : 4; UCHAR ReadRetensionPriority : 4; UCHAR DisablePrefetchTransfer[2]; UCHAR MinimumPrefetch[2]; UCHAR MaximumPrefetch[2]; UCHAR MaximumPrefetchCeiling[2]; } MODE_CACHING_PAGE; typedef MODE_CACHING_PAGE *PMODE_CACHING_PAGE; /* Mode CD-ROM write parameters page (version 2) */ typedef struct _MODE_CDROM_WRITE_PARAMETERS_PAGE2 { UCHAR PageCode : 6; UCHAR Reserved : 1; UCHAR PageSavable : 1; UCHAR PageLength; UCHAR WriteType : 4; UCHAR TestWrite : 1; UCHAR LinkSizeValid : 1; UCHAR BufferUnderrunFreeEnabled : 1; UCHAR Reserved2 : 1; UCHAR TrackMode : 4; UCHAR Copy : 1; UCHAR FixedPacket : 1; UCHAR MultiSession : 2; UCHAR DataBlockType : 4; UCHAR Reserved3 : 4; UCHAR LinkSize; UCHAR Reserved4; UCHAR HostApplicationCode : 6; UCHAR Reserved5 : 2; UCHAR SessionFormat; UCHAR Reserved6; UCHAR PacketSize[4]; UCHAR AudioPauseLength[2]; UCHAR MediaCatalogNumber[16]; UCHAR ISRC[16]; UCHAR SubHeaderData[4]; } MODE_CDROM_WRITE_PARAMETERS_PAGE2; typedef MODE_CDROM_WRITE_PARAMETERS_PAGE2 *PMODE_CDROM_WRITE_PARAMETERS_PAGE2; /* Mode CD-ROM write parameters page */ typedef struct _MODE_CDROM_WRITE_PARAMETERS_PAGE { UCHAR PageLength; UCHAR WriteType : 4; UCHAR TestWrite : 1; UCHAR LinkSizeValid : 1; UCHAR BufferUnderrunFreeEnabled : 1; UCHAR Reserved2 : 1; UCHAR TrackMode : 4; UCHAR Copy : 1; UCHAR FixedPacket : 1; UCHAR MultiSession : 2; UCHAR DataBlockType : 4; UCHAR Reserved3 : 4; UCHAR LinkSize; UCHAR Reserved4; UCHAR HostApplicationCode : 6; UCHAR Reserved5 : 2; UCHAR SessionFormat; UCHAR Reserved6; UCHAR PacketSize[4]; UCHAR AudioPauseLength[2]; UCHAR Reserved7 : 7; UCHAR MediaCatalogNumberValid : 1; UCHAR MediaCatalogNumber[13]; UCHAR MediaCatalogNumberZero; UCHAR MediaCatalogNumberAFrame; UCHAR Reserved8 : 7; UCHAR ISRCValid : 1; UCHAR ISRCCountry[2]; UCHAR ISRCOwner[3]; UCHAR ISRCRecordingYear[2]; UCHAR ISRCSerialNumber[5]; UCHAR ISRCZero; UCHAR ISRCAFrame; UCHAR ISRCReserved; UCHAR SubHeaderData[4]; } MODE_CDROM_WRITE_PARAMETERS_PAGE; typedef MODE_CDROM_WRITE_PARAMETERS_PAGE *PMODE_CDROM_WRITE_PARAMETERS_PAGE; /* Mode MRW page */ typedef struct _MODE_MRW_PAGE { UCHAR PageCode : 6; UCHAR Reserved : 1; UCHAR PageSavable : 1; UCHAR PageLength; UCHAR Reserved1; UCHAR LbaSpace : 1; UCHAR Reserved2 : 7; UCHAR Reserved3[4]; } MODE_MRW_PAGE; typedef MODE_MRW_PAGE *PMODE_MRW_PAGE; /* Mode flexible disk page */ typedef struct _MODE_FLEXIBLE_DISK_PAGE { UCHAR PageCode : 6; UCHAR Reserved : 1; UCHAR PageSavable : 1; UCHAR PageLength; UCHAR TransferRate[2]; UCHAR NumberOfHeads; UCHAR SectorsPerTrack; UCHAR BytesPerSector[2]; UCHAR NumberOfCylinders[2]; UCHAR StartWritePrecom[2]; UCHAR StartReducedCurrent[2]; UCHAR StepRate[2]; UCHAR StepPluseWidth; UCHAR HeadSettleDelay[2]; UCHAR MotorOnDelay; UCHAR MotorOffDelay; UCHAR Reserved2 : 5; UCHAR MotorOnAsserted : 1; UCHAR StartSectorNumber : 1; UCHAR TrueReadySignal : 1; UCHAR StepPlusePerCyclynder : 4; UCHAR Reserved3 : 4; UCHAR WriteCompenstation; UCHAR HeadLoadDelay; UCHAR HeadUnloadDelay; UCHAR Pin2Usage : 4; UCHAR Pin34Usage : 4; UCHAR Pin1Usage : 4; UCHAR Pin4Usage : 4; UCHAR MediumRotationRate[2]; UCHAR Reserved4[2]; } MODE_FLEXIBLE_DISK_PAGE; typedef MODE_FLEXIBLE_DISK_PAGE *PMODE_FLEXIBLE_DISK_PAGE; /* Mode format page */ typedef struct _MODE_FORMAT_PAGE { UCHAR PageCode : 6; UCHAR Reserved : 1; UCHAR PageSavable : 1; UCHAR PageLength; UCHAR TracksPerZone[2]; UCHAR AlternateSectorsPerZone[2]; UCHAR AlternateTracksPerZone[2]; UCHAR AlternateTracksPerLogicalUnit[2]; UCHAR SectorsPerTrack[2]; UCHAR BytesPerPhysicalSector[2]; UCHAR Interleave[2]; UCHAR TrackSkewFactor[2]; UCHAR CylinderSkewFactor[2]; UCHAR Reserved2 : 4; UCHAR SurfaceFirst : 1; UCHAR RemovableMedia : 1; UCHAR HardSectorFormating : 1; UCHAR SoftSectorFormating : 1; UCHAR Reserved3[3]; } MODE_FORMAT_PAGE; typedef MODE_FORMAT_PAGE *PMODE_FORMAT_PAGE; /* Mode rigid geometry page */ typedef struct _MODE_RIGID_GEOMETRY_PAGE { UCHAR PageCode : 6; UCHAR Reserved : 1; UCHAR PageSavable : 1; UCHAR PageLength; UCHAR NumberOfCylinders[3]; UCHAR NumberOfHeads; UCHAR StartWritePrecom[3]; UCHAR StartReducedCurrent[3]; UCHAR DriveStepRate[2]; UCHAR LandZoneCylinder[3]; UCHAR RotationalPositionLock : 2; UCHAR Reserved2 : 6; UCHAR RotationOffset; UCHAR Reserved3; UCHAR RoataionRate[2]; UCHAR Reserved4[2]; } MODE_RIGID_GEOMETRY_PAGE; typedef MODE_RIGID_GEOMETRY_PAGE *PMODE_RIGID_GEOMETRY_PAGE; /* Mode read/write recovery page */ typedef struct _MODE_READ_WRITE_RECOVERY_PAGE { UCHAR PageCode : 6; UCHAR Reserved1 : 1; UCHAR PSBit : 1; UCHAR PageLength; UCHAR DCRBit : 1; UCHAR DTEBit : 1; UCHAR PERBit : 1; UCHAR EERBit : 1; UCHAR RCBit : 1; UCHAR TBBit : 1; UCHAR ARRE : 1; UCHAR AWRE : 1; UCHAR ReadRetryCount; UCHAR Reserved4[4]; UCHAR WriteRetryCount; UCHAR Reserved5[3]; } MODE_READ_WRITE_RECOVERY_PAGE; typedef MODE_READ_WRITE_RECOVERY_PAGE *PMODE_READ_WRITE_RECOVERY_PAGE; /* Mode read recovery page */ typedef struct _MODE_READ_RECOVERY_PAGE { UCHAR PageCode : 6; UCHAR Reserved1 : 1; UCHAR PSBit : 1; UCHAR PageLength; UCHAR DCRBit : 1; UCHAR DTEBit : 1; UCHAR PERBit : 1; UCHAR Reserved2 : 1; UCHAR RCBit : 1; UCHAR TBBit : 1; UCHAR ReadRetryCount; UCHAR Reserved4[4]; } MODE_READ_RECOVERY_PAGE; typedef MODE_READ_RECOVERY_PAGE *PMODE_READ_RECOVERY_PAGE; /* Mode information exceptions */ typedef struct _MODE_INFO_EXCEPTIONS { UCHAR PageCode : 6; UCHAR Reserved1 : 1; UCHAR PSBit : 1; UCHAR PageLength; union { UCHAR Flags; struct { UCHAR LogErr : 1; UCHAR Reserved2 : 1; UCHAR Test : 1; UCHAR Dexcpt : 1; UCHAR Reserved3 : 3; UCHAR Perf : 1; }; }; UCHAR ReportMethod : 4; UCHAR Reserved4 : 4; UCHAR IntervalTimer[4]; UCHAR ReportCount[4]; } MODE_INFO_EXCEPTIONS; typedef MODE_INFO_EXCEPTIONS *PMODE_INFO_EXCEPTIONS; /* Power condition page */ typedef struct _POWER_CONDITION_PAGE { UCHAR PageCode : 6; UCHAR Reserved : 1; UCHAR PSBit : 1; UCHAR PageLength; UCHAR Reserved2; UCHAR Standby : 1; UCHAR Idle : 1; UCHAR Reserved3 : 6; UCHAR IdleTimer[4]; UCHAR StandbyTimer[4]; } POWER_CONDITION_PAGE; typedef POWER_CONDITION_PAGE *PPOWER_CONDITION_PAGE; /* CDDA output port */ typedef struct _CDDA_OUTPUT_PORT { UCHAR ChannelSelection : 4; UCHAR Reserved : 4; UCHAR Volume; } CDDA_OUTPUT_PORT; typedef CDDA_OUTPUT_PORT *PCDDA_OUTPUT_PORT; /* CD audio control page */ typedef struct _CDAUDIO_CONTROL_PAGE { UCHAR PageCode : 6; UCHAR Reserved : 1; UCHAR PSBit : 1; UCHAR PageLength; UCHAR Reserved2 : 1; UCHAR StopOnTrackCrossing : 1; UCHAR Immediate : 1; UCHAR Reserved3 : 5; UCHAR Reserved4[3]; UCHAR Obsolete[2]; CDDA_OUTPUT_PORT CDDAOutputPorts[4]; } CDAUDIO_CONTROL_PAGE; typedef CDAUDIO_CONTROL_PAGE *PCDAUDIO_CONTROL_PAGE; /* CDVD feature set page */ typedef struct _CDVD_FEATURE_SET_PAGE { UCHAR PageCode : 6; UCHAR Reserved : 1; UCHAR PSBit : 1; UCHAR PageLength; UCHAR CDAudio[2]; UCHAR EmbeddedChanger[2]; UCHAR PacketSMART[2]; UCHAR PersistentPrevent[2]; UCHAR EventStatusNotification[2]; UCHAR DigitalOutput[2]; UCHAR CDSequentialRecordable[2]; UCHAR DVDSequentialRecordable[2]; UCHAR RandomRecordable[2]; UCHAR KeyExchange[2]; UCHAR Reserved2[2]; } CDVD_FEATURE_SET_PAGE; typedef CDVD_FEATURE_SET_PAGE *PCDVD_FEATURE_SET_PAGE; /* CDVD inactivity timeout page */ typedef struct _CDVD_INACTIVITY_TIMEOUT_PAGE { UCHAR PageCode : 6; UCHAR Reserved : 1; UCHAR PSBit : 1; UCHAR PageLength; UCHAR Reserved2[2]; UCHAR SWPP : 1; UCHAR DISP : 1; UCHAR Reserved3 : 6; UCHAR Reserved4; UCHAR GroupOneMinimumTimeout[2]; UCHAR GroupTwoMinimumTimeout[2]; } CDVD_INACTIVITY_TIMEOUT_PAGE; typedef CDVD_INACTIVITY_TIMEOUT_PAGE *PCDVD_INACTIVITY_TIMEOUT_PAGE; /* CDVD capabilities page */ typedef struct _CDVD_CAPABILITIES_PAGE { UCHAR PageCode : 6; UCHAR Reserved : 1; UCHAR PSBit : 1; UCHAR PageLength; UCHAR CDRRead : 1; UCHAR CDERead : 1; UCHAR Method2 : 1; UCHAR DVDROMRead : 1; UCHAR DVDRead : 1; UCHAR DVDRAMRead : 1; UCHAR Reserved2 : 2; UCHAR CDRWrite : 1; UCHAR CDEWrite : 1; UCHAR TestWrite : 1; UCHAR Reserved3 : 1; UCHAR DVDRWrite : 1; UCHAR DVDRAMWrite : 1; UCHAR Reserved4 : 2; UCHAR AudioPlay : 1; UCHAR Composite : 1; UCHAR DigitalPortOne : 1; UCHAR DigitalPortTwo : 1; UCHAR Mode2Form1 : 1; UCHAR Mode2Form2 : 1; UCHAR MultiSession : 1; UCHAR BufferUnderrunFree : 1; UCHAR CDDA : 1; UCHAR CDAAAccurate : 1; UCHAR RWSupported : 1; UCHAR RWDeinterleaved : 1; UCHAR C2Pointers : 1; UCHAR ISRC : 1; UCHAR UPC : 1; UCHAR ReadBarCodeCapable : 1; UCHAR Lock : 1; UCHAR LockState : 1; UCHAR PreventJumper : 1; UCHAR Eject : 1; UCHAR Reserved6 : 1; UCHAR LoadingMechanismType : 3; UCHAR SeparateVolume : 1; UCHAR SeparateChannelMute : 1; UCHAR SupportsDiskPresent : 1; UCHAR SWSlotSelection : 1; UCHAR SideChangeCapable : 1; UCHAR RWInLeadInReadable : 1; UCHAR Reserved7 : 2; union { UCHAR ReadSpeedMaximum[2]; UCHAR ObsoleteReserved[2]; }; UCHAR NumberVolumeLevels[2]; UCHAR BufferSize[2]; union { UCHAR ReadSpeedCurrent[2]; UCHAR ObsoleteReserved2[2]; }; UCHAR ObsoleteReserved3; UCHAR Reserved8 : 1; UCHAR BCK : 1; UCHAR RCK : 1; UCHAR LSBF : 1; UCHAR Length : 2; UCHAR Reserved9 : 2; union { UCHAR WriteSpeedMaximum[2]; UCHAR ObsoleteReserved4[2]; }; union { UCHAR WriteSpeedCurrent[2]; UCHAR ObsoleteReserved11[2]; }; union { UCHAR CopyManagementRevision[2]; UCHAR Reserved10[2]; }; } CDVD_CAPABILITIES_PAGE; typedef CDVD_CAPABILITIES_PAGE *PCDVD_CAPABILITIES_PAGE; /* LUN list */ typedef struct _LUN_LIST { UCHAR LunListLength[4]; UCHAR Reserved[4]; UCHAR Lun[1][8]; } LUN_LIST; typedef LUN_LIST *PLUN_LIST; /* Mode parameter read/write */ typedef struct _MODE_PARM_READ_WRITE { MODE_PARAMETER_HEADER ParameterListHeader; MODE_PARAMETER_BLOCK ParameterListBlock; } MODE_PARM_READ_WRITE_DATA; typedef MODE_PARM_READ_WRITE_DATA *PMODE_PARM_READ_WRITE_DATA; /* Port output */ typedef struct _PORT_OUTPUT { UCHAR ChannelSelection; UCHAR Volume; } PORT_OUTPUT; typedef PORT_OUTPUT *PPORT_OUTPUT; /* Audio output */ typedef struct _AUDIO_OUTPUT { UCHAR CodePage; UCHAR ParameterLength; UCHAR Immediate; UCHAR Reserved[2]; UCHAR LbaFormat; UCHAR LogicalBlocksPerSecond[2]; PORT_OUTPUT PortOutput[4]; } AUDIO_OUTPUT; typedef AUDIO_OUTPUT *PAUDIO_OUTPUT; /* Mechanical status information header */ typedef struct _MECHANICAL_STATUS_INFORMATION_HEADER { UCHAR CurrentSlot : 5; UCHAR ChangerState : 2; UCHAR Fault : 1; UCHAR Reserved : 5; UCHAR MechanismState : 3; UCHAR CurrentLogicalBlockAddress[3]; UCHAR NumberAvailableSlots; UCHAR SlotTableLength[2]; } MECHANICAL_STATUS_INFORMATION_HEADER; typedef MECHANICAL_STATUS_INFORMATION_HEADER *PMECHANICAL_STATUS_INFORMATION_HEADER; /* Slot table information */ typedef struct _SLOT_TABLE_INFORMATION { UCHAR DiscChanged : 1; UCHAR Reserved : 6; UCHAR DiscPresent : 1; UCHAR Reserved2[3]; } SLOT_TABLE_INFORMATION; typedef SLOT_TABLE_INFORMATION *PSLOT_TABLE_INFORMATION; /* Mechanical status */ typedef struct _MECHANICAL_STATUS { MECHANICAL_STATUS_INFORMATION_HEADER MechanicalStatusHeader; SLOT_TABLE_INFORMATION SlotTableInfo[1]; } MECHANICAL_STATUS; typedef MECHANICAL_STATUS *PMECHANICAL_STATUS; /* Tape position data */ typedef struct _TAPE_POSITION_DATA { UCHAR Reserved1 : 2; UCHAR BlockPositionUnsupported : 1; UCHAR Reserved2 : 3; UCHAR EndOfPartition : 1; UCHAR BeginningOfPartition : 1; UCHAR PartitionNumber; USHORT Reserved9; UCHAR FirstBlock[4]; UCHAR LastBlock[4]; UCHAR Reserved4; UCHAR NumberOfBlocks[3]; UCHAR NumberOfBytes[4]; } TAPE_POSITION_DATA; typedef TAPE_POSITION_DATA *PTAPE_POSITION_DATA; /* Eight byte */ typedef union _EIGHT_BYTE { struct { UCHAR Byte0; UCHAR Byte1; UCHAR Byte2; UCHAR Byte3; UCHAR Byte4; UCHAR Byte5; UCHAR Byte6; UCHAR Byte7; }; ULONGLONG AsULongLong; } EIGHT_BYTE; typedef EIGHT_BYTE *PEIGHT_BYTE; /* Four byte */ typedef union _FOUR_BYTE { struct { UCHAR Byte0; UCHAR Byte1; UCHAR Byte2; UCHAR Byte3; }; ULONG AsULong; } FOUR_BYTE; typedef FOUR_BYTE *PFOUR_BYTE; /* Two byte */ typedef union _TWO_BYTE { struct { UCHAR Byte0; UCHAR Byte1; }; USHORT AsUShort; } TWO_BYTE; typedef TWO_BYTE *PTWO_BYTE; /* Revert to default packing. */ #pragma pack( pop ) /* Byte-reversing macros */ #define REVERSE_BYTES_QUAD( p1, p2 ) \ { \ PEIGHT_BYTE v1 = (PEIGHT_BYTE)(p1); \ PEIGHT_BYTE v2 = (PEIGHT_BYTE)(p2); \ v1->Byte7 = v2->Byte0; \ v1->Byte6 = v2->Byte1; \ v1->Byte5 = v2->Byte2; \ v1->Byte4 = v2->Byte3; \ v1->Byte3 = v2->Byte4; \ v1->Byte2 = v2->Byte5; \ v1->Byte1 = v2->Byte6; \ v1->Byte0 = v2->Byte7; \ } #define REVERSE_BYTES( p1, p2 ) \ { \ PFOUR_BYTE v1 = (PFOUR_BYTE)(p1); \ PFOUR_BYTE v2 = (PFOUR_BYTE)(p2); \ v1->Byte3 = v2->Byte0; \ v1->Byte2 = v2->Byte1; \ v1->Byte1 = v2->Byte2; \ v1->Byte0 = v2->Byte3; \ } #define REVERSE_BYTES_SHORT( p1, p2 ) \ { \ PTWO_BYTE v1 = (PTWO_BYTE)(p1); \ PTWO_BYTE v2 = (PTWO_BYTE)(p2); \ v1->Byte1 = v2->Byte0; \ v1->Byte0 = v2->Byte1; \ } #define REVERSE_SHORT( x ) \ { \ UCHAR v1; \ PTWO_BYTE v2 = (PTWO_BYTE)(x); \ v1 = v2->Byte0; \ v2->Byte0 = v2->Byte1; \ v2->Byte1 = v1; \ } #define REVERSE_LONG( x ) \ { \ UCHAR v1; \ PFOUR_BYTE v2 = (PFOUR_BYTE)(x); \ v1 = v2->Byte3; \ v2->Byte3 = v2->Byte0; \ v2->Byte0 = v1; \ v1 = v2->Byte2; \ v2->Byte2 = v2->Byte1; \ v2->Byte1 = v1; \ } #define WHICH_BIT( p1, p2 ) \ { \ UCHAR v; \ for( v = 0; v < 32; v++ ) { \ if( ((p1) >> v) == 1) { \ break; \ } \ } \ ASSERT( v != 32 ); \ (p2) = v; \ } #ifdef __cplusplus } /* extern "C" */ #endif #endif /* _NTSCSI_ */