1 /* 2 * storport.h 3 * 4 * StorPort 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 #ifdef _NTSCSI_ 24 #error STORPORT.H must be included instead of SCSI.H 25 #endif 26 27 #ifdef _NTSRB_ 28 #error STORPORT.H must be included instead of SRB.H 29 #endif 30 31 #ifndef _NTSTORPORT_ 32 #define _NTSTORPORT_ 33 34 #ifdef __cplusplus 35 extern "C" { 36 #endif 37 38 // 39 // Common definitions with SRB.H 40 // 41 42 /* NOTE: the current SCSI_MAXIMUM_TARGETS_PER_BUS is applicable 43 * only on scsiport miniports. For storport miniports, the max 44 * target supported is 255. */ 45 #if (NTDDI_VERSION >= NTDDI_WIN8) 46 #define SCSI_MAXIMUM_BUSES_PER_ADAPTER 255 47 #endif 48 #define SCSI_MAXIMUM_TARGETS_PER_BUS 128 49 #define SCSI_MAXIMUM_LUNS_PER_TARGET 255 50 #define SCSI_MINIMUM_PHYSICAL_BREAKS 16 51 #define SCSI_MAXIMUM_PHYSICAL_BREAKS 255 52 53 /* These constants are for backward compatibility. 54 * They used to be the maximum supported. */ 55 #define SCSI_MAXIMUM_BUSES 8 56 #define SCSI_MAXIMUM_TARGETS 8 57 #define SCSI_MAXIMUM_LOGICAL_UNITS 8 58 59 /* PORT_CONFIGURATION_INFORMATION.Dma64BitAddresses constants */ 60 #define SCSI_DMA64_MINIPORT_SUPPORTED 0x01 61 #define SCSI_DMA64_SYSTEM_SUPPORTED 0x80 62 #if (NTDDI_VERSION > NTDDI_WS03SP1) 63 #define SCSI_DMA64_MINIPORT_FULL64BIT_SUPPORTED 0x02 64 #endif 65 66 #define SP_UNINITIALIZED_VALUE ((ULONG) ~0) 67 #define SP_UNTAGGED ((UCHAR) ~0) 68 69 // End of common definitions with SRB.H 70 71 72 #if defined(_STORPORT_) 73 #define STORPORT_API 74 #else 75 #define STORPORT_API DECLSPEC_IMPORT 76 #endif 77 78 #define DIRECT_ACCESS_DEVICE 0x00 79 #define SEQUENTIAL_ACCESS_DEVICE 0x01 80 #define PRINTER_DEVICE 0x02 81 #define PROCESSOR_DEVICE 0x03 82 #define WRITE_ONCE_READ_MULTIPLE_DEVICE 0x04 83 #define READ_ONLY_DIRECT_ACCESS_DEVICE 0x05 84 #define SCANNER_DEVICE 0x06 85 #define OPTICAL_DEVICE 0x07 86 #define MEDIUM_CHANGER 0x08 87 #define COMMUNICATION_DEVICE 0x09 88 #define ARRAY_CONTROLLER_DEVICE 0x0C 89 #define SCSI_ENCLOSURE_DEVICE 0x0D 90 #define REDUCED_BLOCK_DEVICE 0x0E 91 #define OPTICAL_CARD_READER_WRITER_DEVICE 0x0F 92 #define BRIDGE_CONTROLLER_DEVICE 0x10 93 #define OBJECT_BASED_STORAGE_DEVICE 0x11 94 #define LOGICAL_UNIT_NOT_PRESENT_DEVICE 0x7F 95 96 #define DEVICE_CONNECTED 0x00 97 98 #define CDB6GENERIC_LENGTH 6 99 #define CDB10GENERIC_LENGTH 10 100 #define CDB12GENERIC_LENGTH 12 101 102 #define INQUIRYDATABUFFERSIZE 36 103 #define SENSE_BUFFER_SIZE 18 104 #define MAX_SENSE_BUFFER_SIZE 255 105 106 #define FILE_DEVICE_SCSI 0x0000001b 107 #define IOCTL_SCSI_EXECUTE_IN ((FILE_DEVICE_SCSI << 16) + 0x0011) 108 #define IOCTL_SCSI_EXECUTE_OUT ((FILE_DEVICE_SCSI << 16) + 0x0012) 109 #define IOCTL_SCSI_EXECUTE_NONE ((FILE_DEVICE_SCSI << 16) + 0x0013) 110 111 #define MODE_PAGE_VENDOR_SPECIFIC 0x00 112 #define MODE_PAGE_ERROR_RECOVERY 0x01 113 #define MODE_PAGE_DISCONNECT 0x02 114 #define MODE_PAGE_FORMAT_DEVICE 0x03 115 #define MODE_PAGE_MRW 0x03 116 #define MODE_PAGE_RIGID_GEOMETRY 0x04 117 #define MODE_PAGE_FLEXIBILE 0x05 118 #define MODE_PAGE_WRITE_PARAMETERS 0x05 119 #define MODE_PAGE_VERIFY_ERROR 0x07 120 #define MODE_PAGE_CACHING 0x08 121 #define MODE_PAGE_PERIPHERAL 0x09 122 #define MODE_PAGE_CONTROL 0x0A 123 #define MODE_PAGE_MEDIUM_TYPES 0x0B 124 #define MODE_PAGE_NOTCH_PARTITION 0x0C 125 #define MODE_PAGE_CD_AUDIO_CONTROL 0x0E 126 #define MODE_PAGE_DATA_COMPRESS 0x0F 127 #define MODE_PAGE_DEVICE_CONFIG 0x10 128 #define MODE_PAGE_XOR_CONTROL 0x10 129 #define MODE_PAGE_MEDIUM_PARTITION 0x11 130 #define MODE_PAGE_ENCLOSURE_SERVICES_MANAGEMENT 0x14 131 #define MODE_PAGE_EXTENDED 0x15 132 #define MODE_PAGE_EXTENDED_DEVICE_SPECIFIC 0x16 133 #define MODE_PAGE_CDVD_FEATURE_SET 0x18 134 #define MODE_PAGE_PROTOCOL_SPECIFIC_LUN 0x18 135 #define MODE_PAGE_PROTOCOL_SPECIFIC_PORT 0x19 136 #define MODE_PAGE_POWER_CONDITION 0x1A 137 #define MODE_PAGE_LUN_MAPPING 0x1B 138 #define MODE_PAGE_FAULT_REPORTING 0x1C 139 #define MODE_PAGE_CDVD_INACTIVITY 0x1D 140 #define MODE_PAGE_ELEMENT_ADDRESS 0x1D 141 #define MODE_PAGE_TRANSPORT_GEOMETRY 0x1E 142 #define MODE_PAGE_DEVICE_CAPABILITIES 0x1F 143 #define MODE_PAGE_CAPABILITIES 0x2A 144 #define MODE_SENSE_RETURN_ALL 0x3F 145 146 #define MODE_SENSE_CURRENT_VALUES 0x00 147 #define MODE_SENSE_CHANGEABLE_VALUES 0x40 148 #define MODE_SENSE_DEFAULT_VAULES 0x80 149 #define MODE_SENSE_SAVED_VALUES 0xc0 150 151 #define SCSIOP_TEST_UNIT_READY 0x00 152 #define SCSIOP_REZERO_UNIT 0x01 153 #define SCSIOP_REWIND 0x01 154 #define SCSIOP_REQUEST_BLOCK_ADDR 0x02 155 #define SCSIOP_REQUEST_SENSE 0x03 156 #define SCSIOP_FORMAT_UNIT 0x04 157 #define SCSIOP_READ_BLOCK_LIMITS 0x05 158 #define SCSIOP_REASSIGN_BLOCKS 0x07 159 #define SCSIOP_INIT_ELEMENT_STATUS 0x07 160 #define SCSIOP_READ6 0x08 161 #define SCSIOP_RECEIVE 0x08 162 #define SCSIOP_WRITE6 0x0A 163 #define SCSIOP_PRINT 0x0A 164 #define SCSIOP_SEND 0x0A 165 #define SCSIOP_SEEK6 0x0B 166 #define SCSIOP_TRACK_SELECT 0x0B 167 #define SCSIOP_SLEW_PRINT 0x0B 168 #define SCSIOP_SET_CAPACITY 0x0B 169 #define SCSIOP_SEEK_BLOCK 0x0C 170 #define SCSIOP_PARTITION 0x0D 171 #define SCSIOP_READ_REVERSE 0x0F 172 #define SCSIOP_WRITE_FILEMARKS 0x10 173 #define SCSIOP_FLUSH_BUFFER 0x10 174 #define SCSIOP_SPACE 0x11 175 #define SCSIOP_INQUIRY 0x12 176 #define SCSIOP_VERIFY6 0x13 177 #define SCSIOP_RECOVER_BUF_DATA 0x14 178 #define SCSIOP_MODE_SELECT 0x15 179 #define SCSIOP_RESERVE_UNIT 0x16 180 #define SCSIOP_RELEASE_UNIT 0x17 181 #define SCSIOP_COPY 0x18 182 #define SCSIOP_ERASE 0x19 183 #define SCSIOP_MODE_SENSE 0x1A 184 #define SCSIOP_START_STOP_UNIT 0x1B 185 #define SCSIOP_STOP_PRINT 0x1B 186 #define SCSIOP_LOAD_UNLOAD 0x1B 187 #define SCSIOP_RECEIVE_DIAGNOSTIC 0x1C 188 #define SCSIOP_SEND_DIAGNOSTIC 0x1D 189 #define SCSIOP_MEDIUM_REMOVAL 0x1E 190 #define SCSIOP_READ_FORMATTED_CAPACITY 0x23 191 #define SCSIOP_READ_CAPACITY 0x25 192 #define SCSIOP_READ 0x28 193 #define SCSIOP_WRITE 0x2A 194 #define SCSIOP_SEEK 0x2B 195 #define SCSIOP_LOCATE 0x2B 196 #define SCSIOP_POSITION_TO_ELEMENT 0x2B 197 #define SCSIOP_WRITE_VERIFY 0x2E 198 #define SCSIOP_VERIFY 0x2F 199 #define SCSIOP_SEARCH_DATA_HIGH 0x30 200 #define SCSIOP_SEARCH_DATA_EQUAL 0x31 201 #define SCSIOP_SEARCH_DATA_LOW 0x32 202 #define SCSIOP_SET_LIMITS 0x33 203 #define SCSIOP_READ_POSITION 0x34 204 #define SCSIOP_SYNCHRONIZE_CACHE 0x35 205 #define SCSIOP_COMPARE 0x39 206 #define SCSIOP_COPY_COMPARE 0x3A 207 #define SCSIOP_WRITE_DATA_BUFF 0x3B 208 #define SCSIOP_READ_DATA_BUFF 0x3C 209 #define SCSIOP_WRITE_LONG 0x3F 210 #define SCSIOP_CHANGE_DEFINITION 0x40 211 #define SCSIOP_WRITE_SAME 0x41 212 #define SCSIOP_READ_SUB_CHANNEL 0x42 213 #define SCSIOP_READ_TOC 0x43 214 #define SCSIOP_READ_HEADER 0x44 215 #define SCSIOP_REPORT_DENSITY_SUPPORT 0x44 216 #define SCSIOP_PLAY_AUDIO 0x45 217 #define SCSIOP_GET_CONFIGURATION 0x46 218 #define SCSIOP_PLAY_AUDIO_MSF 0x47 219 #define SCSIOP_PLAY_TRACK_INDEX 0x48 220 #define SCSIOP_PLAY_TRACK_RELATIVE 0x49 221 #define SCSIOP_GET_EVENT_STATUS 0x4A 222 #define SCSIOP_PAUSE_RESUME 0x4B 223 #define SCSIOP_LOG_SELECT 0x4C 224 #define SCSIOP_LOG_SENSE 0x4D 225 #define SCSIOP_STOP_PLAY_SCAN 0x4E 226 #define SCSIOP_XDWRITE 0x50 227 #define SCSIOP_XPWRITE 0x51 228 #define SCSIOP_READ_DISK_INFORMATION 0x51 229 #define SCSIOP_READ_DISC_INFORMATION 0x51 230 #define SCSIOP_READ_TRACK_INFORMATION 0x52 231 #define SCSIOP_XDWRITE_READ 0x53 232 #define SCSIOP_RESERVE_TRACK_RZONE 0x53 233 #define SCSIOP_SEND_OPC_INFORMATION 0x54 234 #define SCSIOP_MODE_SELECT10 0x55 235 #define SCSIOP_RESERVE_UNIT10 0x56 236 #define SCSIOP_RESERVE_ELEMENT 0x56 237 #define SCSIOP_RELEASE_UNIT10 0x57 238 #define SCSIOP_RELEASE_ELEMENT 0x57 239 #define SCSIOP_REPAIR_TRACK 0x58 240 #define SCSIOP_MODE_SENSE10 0x5A 241 #define SCSIOP_CLOSE_TRACK_SESSION 0x5B 242 #define SCSIOP_READ_BUFFER_CAPACITY 0x5C 243 #define SCSIOP_SEND_CUE_SHEET 0x5D 244 #define SCSIOP_PERSISTENT_RESERVE_IN 0x5E 245 #define SCSIOP_PERSISTENT_RESERVE_OUT 0x5F 246 #define SCSIOP_XDWRITE_EXTENDED16 0x80 247 #define SCSIOP_WRITE_FILEMARKS16 0x80 248 #define SCSIOP_REBUILD16 0x81 249 #define SCSIOP_READ_REVERSE16 0x81 250 #define SCSIOP_REGENERATE16 0x82 251 #define SCSIOP_EXTENDED_COPY 0x83 252 #define SCSIOP_RECEIVE_COPY_RESULTS 0x84 253 #define SCSIOP_ATA_PASSTHROUGH16 0x85 254 #define SCSIOP_ACCESS_CONTROL_IN 0x86 255 #define SCSIOP_ACCESS_CONTROL_OUT 0x87 256 #define SCSIOP_READ16 0x88 257 #define SCSIOP_WRITE16 0x8A 258 #define SCSIOP_READ_ATTRIBUTES 0x8C 259 #define SCSIOP_WRITE_ATTRIBUTES 0x8D 260 #define SCSIOP_WRITE_VERIFY16 0x8E 261 #define SCSIOP_VERIFY16 0x8F 262 #define SCSIOP_PREFETCH16 0x90 263 #define SCSIOP_SYNCHRONIZE_CACHE16 0x91 264 #define SCSIOP_SPACE16 0x91 265 #define SCSIOP_LOCK_UNLOCK_CACHE16 0x92 266 #define SCSIOP_LOCATE16 0x92 267 #define SCSIOP_WRITE_SAME16 0x93 268 #define SCSIOP_ERASE16 0x93 269 #define SCSIOP_READ_CAPACITY16 0x9E 270 #define SCSIOP_SERVICE_ACTION_IN16 0x9E 271 #define SCSIOP_SERVICE_ACTION_OUT16 0x9F 272 #define SCSIOP_REPORT_LUNS 0xA0 273 #define SCSIOP_BLANK 0xA1 274 #define SCSIOP_ATA_PASSTHROUGH12 0xA1 275 #define SCSIOP_SEND_EVENT 0xA2 276 #define SCSIOP_SEND_KEY 0xA3 277 #define SCSIOP_MAINTENANCE_IN 0xA3 278 #define SCSIOP_REPORT_KEY 0xA4 279 #define SCSIOP_MAINTENANCE_OUT 0xA4 280 #define SCSIOP_MOVE_MEDIUM 0xA5 281 #define SCSIOP_LOAD_UNLOAD_SLOT 0xA6 282 #define SCSIOP_EXCHANGE_MEDIUM 0xA6 283 #define SCSIOP_SET_READ_AHEAD 0xA7 284 #define SCSIOP_MOVE_MEDIUM_ATTACHED 0xA7 285 #define SCSIOP_READ12 0xA8 286 #define SCSIOP_GET_MESSAGE 0xA8 287 #define SCSIOP_SERVICE_ACTION_OUT12 0xA9 288 #define SCSIOP_WRITE12 0xAA 289 #define SCSIOP_SEND_MESSAGE 0xAB 290 #define SCSIOP_SERVICE_ACTION_IN12 0xAB 291 #define SCSIOP_GET_PERFORMANCE 0xAC 292 #define SCSIOP_READ_DVD_STRUCTURE 0xAD 293 #define SCSIOP_WRITE_VERIFY12 0xAE 294 #define SCSIOP_VERIFY12 0xAF 295 #define SCSIOP_SEARCH_DATA_HIGH12 0xB0 296 #define SCSIOP_SEARCH_DATA_EQUAL12 0xB1 297 #define SCSIOP_SEARCH_DATA_LOW12 0xB2 298 #define SCSIOP_SET_LIMITS12 0xB3 299 #define SCSIOP_READ_ELEMENT_STATUS_ATTACHED 0xB4 300 #define SCSIOP_REQUEST_VOL_ELEMENT 0xB5 301 #define SCSIOP_SEND_VOLUME_TAG 0xB6 302 #define SCSIOP_SET_STREAMING 0xB6 303 #define SCSIOP_READ_DEFECT_DATA 0xB7 304 #define SCSIOP_READ_ELEMENT_STATUS 0xB8 305 #define SCSIOP_READ_CD_MSF 0xB9 306 #define SCSIOP_SCAN_CD 0xBA 307 #define SCSIOP_REDUNDANCY_GROUP_IN 0xBA 308 #define SCSIOP_SET_CD_SPEED 0xBB 309 #define SCSIOP_REDUNDANCY_GROUP_OUT 0xBB 310 #define SCSIOP_PLAY_CD 0xBC 311 #define SCSIOP_SPARE_IN 0xBC 312 #define SCSIOP_MECHANISM_STATUS 0xBD 313 #define SCSIOP_SPARE_OUT 0xBD 314 #define SCSIOP_READ_CD 0xBE 315 #define SCSIOP_VOLUME_SET_IN 0xBE 316 #define SCSIOP_SEND_DVD_STRUCTURE 0xBF 317 #define SCSIOP_VOLUME_SET_OUT 0xBF 318 #define SCSIOP_INIT_ELEMENT_RANGE 0xE7 319 320 #define SCSISTAT_GOOD 0x00 321 #define SCSISTAT_CHECK_CONDITION 0x02 322 #define SCSISTAT_CONDITION_MET 0x04 323 #define SCSISTAT_BUSY 0x08 324 #define SCSISTAT_INTERMEDIATE 0x10 325 #define SCSISTAT_INTERMEDIATE_COND_MET 0x14 326 #define SCSISTAT_RESERVATION_CONFLICT 0x18 327 #define SCSISTAT_COMMAND_TERMINATED 0x22 328 #define SCSISTAT_QUEUE_FULL 0x28 329 330 #define SETBITON 1 331 #define SETBITOFF 0 332 333 #define SP_RETURN_NOT_FOUND 0 334 #define SP_RETURN_FOUND 1 335 #define SP_RETURN_ERROR 2 336 #define SP_RETURN_BAD_CONFIG 3 337 338 /* SCSI_REQUEST_BLOCK.Function constants */ 339 #define SRB_FUNCTION_EXECUTE_SCSI 0x00 340 #define SRB_FUNCTION_CLAIM_DEVICE 0x01 341 #define SRB_FUNCTION_IO_CONTROL 0x02 342 #define SRB_FUNCTION_RECEIVE_EVENT 0x03 343 #define SRB_FUNCTION_RELEASE_QUEUE 0x04 344 #define SRB_FUNCTION_ATTACH_DEVICE 0x05 345 #define SRB_FUNCTION_RELEASE_DEVICE 0x06 346 #define SRB_FUNCTION_SHUTDOWN 0x07 347 #define SRB_FUNCTION_FLUSH 0x08 348 #define SRB_FUNCTION_ABORT_COMMAND 0x10 349 #define SRB_FUNCTION_RELEASE_RECOVERY 0x11 350 #define SRB_FUNCTION_RESET_BUS 0x12 351 #define SRB_FUNCTION_RESET_DEVICE 0x13 352 #define SRB_FUNCTION_TERMINATE_IO 0x14 353 #define SRB_FUNCTION_FLUSH_QUEUE 0x15 354 #define SRB_FUNCTION_REMOVE_DEVICE 0x16 355 #define SRB_FUNCTION_WMI 0x17 356 #define SRB_FUNCTION_LOCK_QUEUE 0x18 357 #define SRB_FUNCTION_UNLOCK_QUEUE 0x19 358 #define SRB_FUNCTION_RESET_LOGICAL_UNIT 0x20 359 #define SRB_FUNCTION_SET_LINK_TIMEOUT 0x21 360 #define SRB_FUNCTION_LINK_TIMEOUT_OCCURRED 0x22 361 #define SRB_FUNCTION_LINK_TIMEOUT_COMPLETE 0x23 362 #define SRB_FUNCTION_POWER 0x24 363 #define SRB_FUNCTION_PNP 0x25 364 #define SRB_FUNCTION_DUMP_POINTERS 0x26 365 366 /* SCSI_REQUEST_BLOCK.SrbStatus constants */ 367 #define SRB_STATUS_PENDING 0x00 368 #define SRB_STATUS_SUCCESS 0x01 369 #define SRB_STATUS_ABORTED 0x02 370 #define SRB_STATUS_ABORT_FAILED 0x03 371 #define SRB_STATUS_ERROR 0x04 372 #define SRB_STATUS_BUSY 0x05 373 #define SRB_STATUS_INVALID_REQUEST 0x06 374 #define SRB_STATUS_INVALID_PATH_ID 0x07 375 #define SRB_STATUS_NO_DEVICE 0x08 376 #define SRB_STATUS_TIMEOUT 0x09 377 #define SRB_STATUS_SELECTION_TIMEOUT 0x0A 378 #define SRB_STATUS_COMMAND_TIMEOUT 0x0B 379 #define SRB_STATUS_MESSAGE_REJECTED 0x0D 380 #define SRB_STATUS_BUS_RESET 0x0E 381 #define SRB_STATUS_PARITY_ERROR 0x0F 382 #define SRB_STATUS_REQUEST_SENSE_FAILED 0x10 383 #define SRB_STATUS_NO_HBA 0x11 384 #define SRB_STATUS_DATA_OVERRUN 0x12 385 #define SRB_STATUS_UNEXPECTED_BUS_FREE 0x13 386 #define SRB_STATUS_PHASE_SEQUENCE_FAILURE 0x14 387 #define SRB_STATUS_BAD_SRB_BLOCK_LENGTH 0x15 388 #define SRB_STATUS_REQUEST_FLUSHED 0x16 389 #define SRB_STATUS_INVALID_LUN 0x20 390 #define SRB_STATUS_INVALID_TARGET_ID 0x21 391 #define SRB_STATUS_BAD_FUNCTION 0x22 392 #define SRB_STATUS_ERROR_RECOVERY 0x23 393 #define SRB_STATUS_NOT_POWERED 0x24 394 #define SRB_STATUS_LINK_DOWN 0x25 395 #define SRB_STATUS_INTERNAL_ERROR 0x30 396 #define SRB_STATUS_QUEUE_FROZEN 0x40 397 #define SRB_STATUS_AUTOSENSE_VALID 0x80 398 #define SRB_STATUS(Status) (Status & ~(SRB_STATUS_AUTOSENSE_VALID | SRB_STATUS_QUEUE_FROZEN)) 399 400 /* SCSI_REQUEST_BLOCK.SrbFlags constants */ 401 #define SRB_FLAGS_QUEUE_ACTION_ENABLE 0x00000002 402 #define SRB_FLAGS_DISABLE_DISCONNECT 0x00000004 403 #define SRB_FLAGS_DISABLE_SYNCH_TRANSFER 0x00000008 404 405 #define SRB_FLAGS_BYPASS_FROZEN_QUEUE 0x00000010 406 #define SRB_FLAGS_DISABLE_AUTOSENSE 0x00000020 407 #define SRB_FLAGS_DATA_IN 0x00000040 408 #define SRB_FLAGS_DATA_OUT 0x00000080 409 #define SRB_FLAGS_NO_DATA_TRANSFER 0x00000000 410 #define SRB_FLAGS_UNSPECIFIED_DIRECTION (SRB_FLAGS_DATA_IN | SRB_FLAGS_DATA_OUT) 411 412 #define SRB_FLAGS_NO_QUEUE_FREEZE 0x00000100 413 #define SRB_FLAGS_ADAPTER_CACHE_ENABLE 0x00000200 414 #define SRB_FLAGS_FREE_SENSE_BUFFER 0x00000400 415 416 #define SRB_FLAGS_IS_ACTIVE 0x00010000 417 #define SRB_FLAGS_ALLOCATED_FROM_ZONE 0x00020000 418 #define SRB_FLAGS_SGLIST_FROM_POOL 0x00040000 419 #define SRB_FLAGS_BYPASS_LOCKED_QUEUE 0x00080000 420 421 #define SRB_FLAGS_NO_KEEP_AWAKE 0x00100000 422 #define SRB_FLAGS_PORT_DRIVER_ALLOCSENSE 0x00200000 423 424 #define SRB_FLAGS_PORT_DRIVER_SENSEHASPORT 0x00400000 425 #define SRB_FLAGS_DONT_START_NEXT_PACKET 0x00800000 426 427 #define SRB_FLAGS_PORT_DRIVER_RESERVED 0x0F000000 428 #define SRB_FLAGS_CLASS_DRIVER_RESERVED 0xF0000000 429 430 #define SRB_SIMPLE_TAG_REQUEST 0x20 431 #define SRB_HEAD_OF_QUEUE_TAG_REQUEST 0x21 432 #define SRB_ORDERED_QUEUE_TAG_REQUEST 0x22 433 434 #define SRB_WMI_FLAGS_ADAPTER_REQUEST 0x01 435 #define SRB_POWER_FLAGS_ADAPTER_REQUEST 0x01 436 #define SRB_PNP_FLAGS_ADAPTER_REQUEST 0x01 437 438 #define STOR_MAP_NO_BUFFERS (0) 439 #define STOR_MAP_ALL_BUFFERS (1) 440 #define STOR_MAP_NON_READ_WRITE_BUFFERS (2) 441 442 #define VPD_SUPPORTED_PAGES 0x00 443 #define VPD_SERIAL_NUMBER 0x80 444 #define VPD_DEVICE_IDENTIFIERS 0x83 445 #define VPD_MEDIA_SERIAL_NUMBER 0x84 446 #define VPD_SOFTWARE_INTERFACE_IDENTIFIERS 0x84 447 #define VPD_NETWORK_MANAGEMENT_ADDRESSES 0x85 448 #define VPD_EXTENDED_INQUIRY_DATA 0x86 449 #define VPD_MODE_PAGE_POLICY 0x87 450 #define VPD_SCSI_PORTS 0x88 451 452 #define SCSI_SENSE_NO_SENSE 0x00 453 #define SCSI_SENSE_RECOVERED_ERROR 0x01 454 #define SCSI_SENSE_NOT_READY 0x02 455 #define SCSI_SENSE_MEDIUM_ERROR 0x03 456 #define SCSI_SENSE_HARDWARE_ERROR 0x04 457 #define SCSI_SENSE_ILLEGAL_REQUEST 0x05 458 #define SCSI_SENSE_UNIT_ATTENTION 0x06 459 #define SCSI_SENSE_DATA_PROTECT 0x07 460 #define SCSI_SENSE_BLANK_CHECK 0x08 461 #define SCSI_SENSE_UNIQUE 0x09 462 #define SCSI_SENSE_COPY_ABORTED 0x0A 463 #define SCSI_SENSE_ABORTED_COMMAND 0x0B 464 #define SCSI_SENSE_EQUAL 0x0C 465 #define SCSI_SENSE_VOL_OVERFLOW 0x0D 466 #define SCSI_SENSE_MISCOMPARE 0x0E 467 #define SCSI_SENSE_RESERVED 0x0F 468 469 typedef enum _STOR_SYNCHRONIZATION_MODEL 470 { 471 StorSynchronizeHalfDuplex, 472 StorSynchronizeFullDuplex 473 } STOR_SYNCHRONIZATION_MODEL; 474 475 typedef enum _STOR_DMA_WIDTH 476 { 477 DmaUnknown, 478 Dma32Bit, 479 Dma64BitScatterGather, 480 Dma64Bit 481 } STOR_DMA_WIDTH; 482 483 typedef enum _STOR_SPINLOCK 484 { 485 DpcLock = 1, 486 StartIoLock, 487 InterruptLock 488 } STOR_SPINLOCK; 489 490 typedef enum _SCSI_ADAPTER_CONTROL_TYPE 491 { 492 ScsiQuerySupportedControlTypes = 0, 493 ScsiStopAdapter, 494 ScsiRestartAdapter, 495 ScsiSetBootConfig, 496 ScsiSetRunningConfig, 497 ScsiAdapterControlMax, 498 MakeAdapterControlTypeSizeOfUlong = 0xffffffff 499 } SCSI_ADAPTER_CONTROL_TYPE, *PSCSI_ADAPTER_CONTROL_TYPE; 500 501 typedef enum _SCSI_ADAPTER_CONTROL_STATUS 502 { 503 ScsiAdapterControlSuccess = 0, 504 ScsiAdapterControlUnsuccessful 505 } SCSI_ADAPTER_CONTROL_STATUS, *PSCSI_ADAPTER_CONTROL_STATUS; 506 507 typedef enum _SCSI_NOTIFICATION_TYPE 508 { 509 RequestComplete, 510 NextRequest, 511 NextLuRequest, 512 ResetDetected, 513 _obsolete1, 514 _obsolete2, 515 RequestTimerCall, 516 BusChangeDetected, 517 WMIEvent, 518 WMIReregister, 519 LinkUp, 520 LinkDown, 521 QueryTickCount, 522 BufferOverrunDetected, 523 TraceNotification, 524 GetExtendedFunctionTable, 525 EnablePassiveInitialization = 0x1000, 526 InitializeDpc, 527 IssueDpc, 528 AcquireSpinLock, 529 ReleaseSpinLock 530 } SCSI_NOTIFICATION_TYPE, *PSCSI_NOTIFICATION_TYPE; 531 532 typedef enum _STOR_DEVICE_POWER_STATE 533 { 534 StorPowerDeviceUnspecified = 0, 535 StorPowerDeviceD0, 536 StorPowerDeviceD1, 537 StorPowerDeviceD2, 538 StorPowerDeviceD3, 539 StorPowerDeviceMaximum 540 } STOR_DEVICE_POWER_STATE, *PSTOR_DEVICE_POWER_STATE; 541 542 typedef enum _STOR_POWER_ACTION 543 { 544 StorPowerActionNone = 0, 545 StorPowerActionReserved, 546 StorPowerActionSleep, 547 StorPowerActionHibernate, 548 StorPowerActionShutdown, 549 StorPowerActionShutdownReset, 550 StorPowerActionShutdownOff, 551 StorPowerActionWarmEject 552 } STOR_POWER_ACTION, *PSTOR_POWER_ACTION; 553 554 typedef enum _STOR_PNP_ACTION 555 { 556 StorStartDevice = 0x0, 557 StorRemoveDevice = 0x2, 558 StorStopDevice = 0x4, 559 StorQueryCapabilities = 0x9, 560 StorQueryResourceRequirements = 0xB, 561 StorFilterResourceRequirements = 0xD, 562 StorSurpriseRemoval = 0x17 563 } STOR_PNP_ACTION, *PSTOR_PNP_ACTION; 564 565 typedef enum _VPD_CODE_SET 566 { 567 VpdCodeSetReserved = 0, 568 VpdCodeSetBinary = 1, 569 VpdCodeSetAscii = 2, 570 VpdCodeSetUTF8 = 3 571 } VPD_CODE_SET, *PVPD_CODE_SET; 572 573 typedef enum _VPD_ASSOCIATION 574 { 575 VpdAssocDevice = 0, 576 VpdAssocPort = 1, 577 VpdAssocTarget = 2, 578 VpdAssocReserved1 = 3, 579 VpdAssocReserved2 = 4 580 } VPD_ASSOCIATION, *PVPD_ASSOCIATION; 581 582 typedef enum _VPD_IDENTIFIER_TYPE 583 { 584 VpdIdentifierTypeVendorSpecific = 0, 585 VpdIdentifierTypeVendorId = 1, 586 VpdIdentifierTypeEUI64 = 2, 587 VpdIdentifierTypeFCPHName = 3, 588 VpdIdentifierTypePortRelative = 4, 589 VpdIdentifierTypeTargetPortGroup = 5, 590 VpdIdentifierTypeLogicalUnitGroup = 6, 591 VpdIdentifierTypeMD5LogicalUnitId = 7, 592 VpdIdentifierTypeSCSINameString = 8 593 } VPD_IDENTIFIER_TYPE, *PVPD_IDENTIFIER_TYPE; 594 595 typedef enum _STORPORT_FUNCTION_CODE 596 { 597 ExtFunctionAllocatePool, 598 ExtFunctionFreePool, 599 ExtFunctionAllocateMdl, 600 ExtFunctionFreeMdl, 601 ExtFunctionBuildMdlForNonPagedPool, 602 ExtFunctionGetSystemAddress, 603 ExtFunctionGetOriginalMdl, 604 ExtFunctionCompleteServiceIrp, 605 ExtFunctionGetDeviceObjects, 606 ExtFunctionBuildScatterGatherList, 607 ExtFunctionPutScatterGatherList, 608 ExtFunctionAcquireMSISpinLock, 609 ExtFunctionReleaseMSISpinLock, 610 ExtFunctionGetMessageInterruptInformation, 611 ExtFunctionInitializePerformanceOptimizations, 612 ExtFunctionGetStartIoPerformanceParameters, 613 ExtFunctionLogSystemEvent, 614 #if (NTDDI_VERSION >= NTDDI_WIN7) 615 ExtFunctionGetCurrentProcessorNumber, 616 ExtFunctionGetActiveGroupCount, 617 ExtFunctionGetGroupAffinity, 618 ExtFunctionGetActiveNodeCount, 619 ExtFunctionGetNodeAffinity, 620 ExtFunctionGetHighestNodeNumber, 621 ExtFunctionGetLogicalProcessorRelationship, 622 ExtFunctionAllocateContiguousMemorySpecifyCacheNode, 623 ExtFunctionFreeContiguousMemorySpecifyCache 624 #endif 625 } STORPORT_FUNCTION_CODE, *PSTORPORT_FUNCTION_CODE; 626 627 typedef enum _STOR_EVENT_ASSOCIATION_ENUM 628 { 629 StorEventAdapterAssociation = 0, 630 StorEventLunAssociation, 631 StorEventTargetAssociation, 632 StorEventInvalidAssociation 633 } STOR_EVENT_ASSOCIATION_ENUM; 634 635 typedef enum _GETSGSTATUS 636 { 637 SG_ALLOCATED = 0, 638 SG_BUFFER_TOO_SMALL 639 } GETSGSTATUS, *PGETSGSTATUS; 640 641 typedef struct _SCSI_REQUEST_BLOCK 642 { 643 USHORT Length; 644 UCHAR Function; 645 UCHAR SrbStatus; 646 UCHAR ScsiStatus; 647 UCHAR PathId; 648 UCHAR TargetId; 649 UCHAR Lun; 650 UCHAR QueueTag; 651 UCHAR QueueAction; 652 UCHAR CdbLength; 653 UCHAR SenseInfoBufferLength; 654 ULONG SrbFlags; 655 ULONG DataTransferLength; 656 ULONG TimeOutValue; 657 PVOID DataBuffer; 658 PVOID SenseInfoBuffer; 659 struct _SCSI_REQUEST_BLOCK *NextSrb; 660 PVOID OriginalRequest; 661 PVOID SrbExtension; 662 union 663 { 664 ULONG InternalStatus; 665 ULONG QueueSortKey; 666 ULONG LinkTimeoutValue; 667 }; 668 #if defined(_WIN64) 669 ULONG Reserved; 670 #endif 671 UCHAR Cdb[16]; 672 } SCSI_REQUEST_BLOCK, *PSCSI_REQUEST_BLOCK; 673 674 typedef struct _SCSI_WMI_REQUEST_BLOCK 675 { 676 USHORT Length; 677 UCHAR Function; 678 UCHAR SrbStatus; 679 UCHAR WMISubFunction; 680 UCHAR PathId; 681 UCHAR TargetId; 682 UCHAR Lun; 683 UCHAR Reserved1; 684 UCHAR WMIFlags; 685 UCHAR Reserved2[2]; 686 ULONG SrbFlags; 687 ULONG DataTransferLength; 688 ULONG TimeOutValue; 689 PVOID DataBuffer; 690 PVOID DataPath; 691 PVOID Reserved3; 692 PVOID OriginalRequest; 693 PVOID SrbExtension; 694 ULONG Reserved4; 695 #if (NTDDI_VERSION >= NTDDI_WS03SP1) && defined(_WIN64) 696 ULONG Reserved6; 697 #endif 698 UCHAR Reserved5[16]; 699 } SCSI_WMI_REQUEST_BLOCK, *PSCSI_WMI_REQUEST_BLOCK; 700 701 typedef struct _SCSI_POWER_REQUEST_BLOCK 702 { 703 USHORT Length; 704 UCHAR Function; 705 UCHAR SrbStatus; 706 UCHAR SrbPowerFlags; 707 UCHAR PathId; 708 UCHAR TargetId; 709 UCHAR Lun; 710 STOR_DEVICE_POWER_STATE DevicePowerState; 711 ULONG SrbFlags; 712 ULONG DataTransferLength; 713 ULONG TimeOutValue; 714 PVOID DataBuffer; 715 PVOID SenseInfoBuffer; 716 struct _SCSI_REQUEST_BLOCK *NextSrb; 717 PVOID OriginalRequest; 718 PVOID SrbExtension; 719 STOR_POWER_ACTION PowerAction; 720 #if defined(_WIN64) 721 ULONG Reserved; 722 #endif 723 UCHAR Reserved5[16]; 724 } SCSI_POWER_REQUEST_BLOCK, *PSCSI_POWER_REQUEST_BLOCK; 725 726 typedef struct _STOR_DEVICE_CAPABILITIES 727 { 728 USHORT Version; 729 ULONG DeviceD1:1; 730 ULONG DeviceD2:1; 731 ULONG LockSupported:1; 732 ULONG EjectSupported:1; 733 ULONG Removable:1; 734 ULONG DockDevice:1; 735 ULONG UniqueID:1; 736 ULONG SilentInstall:1; 737 ULONG SurpriseRemovalOK:1; 738 ULONG NoDisplayInUI:1; 739 } STOR_DEVICE_CAPABILITIES, *PSTOR_DEVICE_CAPABILITIES; 740 741 typedef struct _SCSI_PNP_REQUEST_BLOCK 742 { 743 USHORT Length; 744 UCHAR Function; 745 UCHAR SrbStatus; 746 UCHAR PnPSubFunction; 747 UCHAR PathId; 748 UCHAR TargetId; 749 UCHAR Lun; 750 STOR_PNP_ACTION PnPAction; 751 ULONG SrbFlags; 752 ULONG DataTransferLength; 753 ULONG TimeOutValue; 754 PVOID DataBuffer; 755 PVOID SenseInfoBuffer; 756 struct _SCSI_REQUEST_BLOCK *NextSrb; 757 PVOID OriginalRequest; 758 PVOID SrbExtension; 759 ULONG SrbPnPFlags; 760 #if defined(_WIN64) 761 ULONG Reserved; 762 #endif 763 UCHAR Reserved4[16]; 764 } SCSI_PNP_REQUEST_BLOCK, *PSCSI_PNP_REQUEST_BLOCK; 765 766 #include <pshpack1.h> 767 typedef union _CDB 768 { 769 struct _CDB6GENERIC 770 { 771 UCHAR OperationCode; 772 UCHAR Immediate:1; 773 UCHAR CommandUniqueBits:4; 774 UCHAR LogicalUnitNumber:3; 775 UCHAR CommandUniqueBytes[3]; 776 UCHAR Link:1; 777 UCHAR Flag:1; 778 UCHAR Reserved:4; 779 UCHAR VendorUnique:2; 780 } CDB6GENERIC, *PCDB6GENERIC; 781 struct _CDB6READWRITE 782 { 783 UCHAR OperationCode; 784 UCHAR LogicalBlockMsb1:5; 785 UCHAR LogicalUnitNumber:3; 786 UCHAR LogicalBlockMsb0; 787 UCHAR LogicalBlockLsb; 788 UCHAR TransferBlocks; 789 UCHAR Control; 790 } CDB6READWRITE, *PCDB6READWRITE; 791 struct _CDB6INQUIRY 792 { 793 UCHAR OperationCode; 794 UCHAR Reserved1:5; 795 UCHAR LogicalUnitNumber:3; 796 UCHAR PageCode; 797 UCHAR IReserved; 798 UCHAR AllocationLength; 799 UCHAR Control; 800 } CDB6INQUIRY, *PCDB6INQUIRY; 801 struct _CDB6INQUIRY3 802 { 803 UCHAR OperationCode; 804 UCHAR EnableVitalProductData:1; 805 UCHAR CommandSupportData:1; 806 UCHAR Reserved1:6; 807 UCHAR PageCode; 808 UCHAR Reserved2; 809 UCHAR AllocationLength; 810 UCHAR Control; 811 } CDB6INQUIRY3, *PCDB6INQUIRY3; 812 struct _CDB6VERIFY 813 { 814 UCHAR OperationCode; 815 UCHAR Fixed:1; 816 UCHAR ByteCompare:1; 817 UCHAR Immediate:1; 818 UCHAR Reserved:2; 819 UCHAR LogicalUnitNumber:3; 820 UCHAR VerificationLength[3]; 821 UCHAR Control; 822 } CDB6VERIFY, *PCDB6VERIFY; 823 struct _CDB6FORMAT 824 { 825 UCHAR OperationCode; 826 UCHAR FormatControl:5; 827 UCHAR LogicalUnitNumber:3; 828 UCHAR FReserved1; 829 UCHAR InterleaveMsb; 830 UCHAR InterleaveLsb; 831 UCHAR FReserved2; 832 } CDB6FORMAT, *PCDB6FORMAT; 833 struct _CDB10 834 { 835 UCHAR OperationCode; 836 UCHAR RelativeAddress:1; 837 UCHAR Reserved1:2; 838 UCHAR ForceUnitAccess:1; 839 UCHAR DisablePageOut:1; 840 UCHAR LogicalUnitNumber:3; 841 UCHAR LogicalBlockByte0; 842 UCHAR LogicalBlockByte1; 843 UCHAR LogicalBlockByte2; 844 UCHAR LogicalBlockByte3; 845 UCHAR Reserved2; 846 UCHAR TransferBlocksMsb; 847 UCHAR TransferBlocksLsb; 848 UCHAR Control; 849 } CDB10, *PCDB10; 850 struct _CDB12 851 { 852 UCHAR OperationCode; 853 UCHAR RelativeAddress:1; 854 UCHAR Reserved1:2; 855 UCHAR ForceUnitAccess:1; 856 UCHAR DisablePageOut:1; 857 UCHAR LogicalUnitNumber:3; 858 UCHAR LogicalBlock[4]; 859 UCHAR TransferLength[4]; 860 UCHAR Reserved2; 861 UCHAR Control; 862 } CDB12, *PCDB12; 863 struct _CDB16 864 { 865 UCHAR OperationCode; 866 UCHAR Reserved1:3; 867 UCHAR ForceUnitAccess:1; 868 UCHAR DisablePageOut:1; 869 UCHAR Protection:3; 870 UCHAR LogicalBlock[8]; 871 UCHAR TransferLength[4]; 872 UCHAR Reserved2; 873 UCHAR Control; 874 } CDB16, *PCDB16; 875 struct _PAUSE_RESUME 876 { 877 UCHAR OperationCode; 878 UCHAR Reserved1:5; 879 UCHAR LogicalUnitNumber:3; 880 UCHAR Reserved2[6]; 881 UCHAR Action; 882 UCHAR Control; 883 } PAUSE_RESUME, *PPAUSE_RESUME; 884 struct _READ_TOC 885 { 886 UCHAR OperationCode; 887 UCHAR Reserved0:1; 888 UCHAR Msf:1; 889 UCHAR Reserved1:3; 890 UCHAR LogicalUnitNumber:3; 891 UCHAR Format2:4; 892 UCHAR Reserved2:4; 893 UCHAR Reserved3[3]; 894 UCHAR StartingTrack; 895 UCHAR AllocationLength[2]; 896 UCHAR Control:6; 897 UCHAR Format:2; 898 } READ_TOC, *PREAD_TOC; 899 struct _READ_DISK_INFORMATION 900 { 901 UCHAR OperationCode; 902 UCHAR Reserved1:5; 903 UCHAR Lun:3; 904 UCHAR Reserved2[5]; 905 UCHAR AllocationLength[2]; 906 UCHAR Control; 907 } READ_DISK_INFORMATION, *PREAD_DISK_INFORMATION; 908 struct _READ_TRACK_INFORMATION 909 { 910 UCHAR OperationCode; 911 UCHAR Track:1; 912 UCHAR Reserved1:3; 913 UCHAR Reserved2:1; 914 UCHAR Lun:3; 915 UCHAR BlockAddress[4]; 916 UCHAR Reserved3; 917 UCHAR AllocationLength[2]; 918 UCHAR Control; 919 } READ_TRACK_INFORMATION, *PREAD_TRACK_INFORMATION; 920 struct _RESERVE_TRACK_RZONE 921 { 922 UCHAR OperationCode; 923 UCHAR Reserved1[4]; 924 UCHAR ReservationSize[4]; 925 UCHAR Control; 926 } RESERVE_TRACK_RZONE, *PRESERVE_TRACK_RZONE; 927 struct _SEND_OPC_INFORMATION 928 { 929 UCHAR OperationCode; 930 UCHAR DoOpc:1; 931 UCHAR Reserved1:7; 932 UCHAR Exclude0:1; 933 UCHAR Exclude1:1; 934 UCHAR Reserved2:6; 935 UCHAR Reserved3[4]; 936 UCHAR ParameterListLength[2]; 937 UCHAR Reserved4; 938 } SEND_OPC_INFORMATION, *PSEND_OPC_INFORMATION; 939 struct _REPAIR_TRACK 940 { 941 UCHAR OperationCode; 942 UCHAR Immediate:1; 943 UCHAR Reserved1:7; 944 UCHAR Reserved2[2]; 945 UCHAR TrackNumber[2]; 946 UCHAR Reserved3[3]; 947 UCHAR Control; 948 } REPAIR_TRACK, *PREPAIR_TRACK; 949 struct _CLOSE_TRACK 950 { 951 UCHAR OperationCode; 952 UCHAR Immediate:1; 953 UCHAR Reserved1:7; 954 UCHAR Track:1; 955 UCHAR Session:1; 956 UCHAR Reserved2:6; 957 UCHAR Reserved3; 958 UCHAR TrackNumber[2]; 959 UCHAR Reserved4[3]; 960 UCHAR Control; 961 } CLOSE_TRACK, *PCLOSE_TRACK; 962 struct _READ_BUFFER_CAPACITY 963 { 964 UCHAR OperationCode; 965 UCHAR BlockInfo:1; 966 UCHAR Reserved1:7; 967 UCHAR Reserved2[5]; 968 UCHAR AllocationLength[2]; 969 UCHAR Control; 970 } READ_BUFFER_CAPACITY, *PREAD_BUFFER_CAPACITY; 971 struct _SEND_CUE_SHEET 972 { 973 UCHAR OperationCode; 974 UCHAR Reserved[5]; 975 UCHAR CueSheetSize[3]; 976 UCHAR Control; 977 } SEND_CUE_SHEET, *PSEND_CUE_SHEET; 978 struct _READ_HEADER 979 { 980 UCHAR OperationCode; 981 UCHAR Reserved1:1; 982 UCHAR Msf:1; 983 UCHAR Reserved2:3; 984 UCHAR Lun:3; 985 UCHAR LogicalBlockAddress[4]; 986 UCHAR Reserved3; 987 UCHAR AllocationLength[2]; 988 UCHAR Control; 989 } READ_HEADER, *PREAD_HEADER; 990 struct _PLAY_AUDIO 991 { 992 UCHAR OperationCode; 993 UCHAR Reserved1:5; 994 UCHAR LogicalUnitNumber:3; 995 UCHAR StartingBlockAddress[4]; 996 UCHAR Reserved2; 997 UCHAR PlayLength[2]; 998 UCHAR Control; 999 } PLAY_AUDIO, *PPLAY_AUDIO; 1000 struct _PLAY_AUDIO_MSF 1001 { 1002 UCHAR OperationCode; 1003 UCHAR Reserved1:5; 1004 UCHAR LogicalUnitNumber:3; 1005 UCHAR Reserved2; 1006 UCHAR StartingM; 1007 UCHAR StartingS; 1008 UCHAR StartingF; 1009 UCHAR EndingM; 1010 UCHAR EndingS; 1011 UCHAR EndingF; 1012 UCHAR Control; 1013 } PLAY_AUDIO_MSF, *PPLAY_AUDIO_MSF; 1014 struct _BLANK_MEDIA 1015 { 1016 UCHAR OperationCode; 1017 UCHAR BlankType:3; 1018 UCHAR Reserved1:1; 1019 UCHAR Immediate:1; 1020 UCHAR Reserved2:3; 1021 UCHAR AddressOrTrack[4]; 1022 UCHAR Reserved3[5]; 1023 UCHAR Control; 1024 } BLANK_MEDIA, *PBLANK_MEDIA; 1025 struct _PLAY_CD 1026 { 1027 UCHAR OperationCode; 1028 UCHAR Reserved1:1; 1029 UCHAR CMSF:1; 1030 UCHAR ExpectedSectorType:3; 1031 UCHAR Lun:3; 1032 _ANONYMOUS_UNION union 1033 { 1034 struct _LBA 1035 { 1036 UCHAR StartingBlockAddress[4]; 1037 UCHAR PlayLength[4]; 1038 } LBA; 1039 struct _MSF 1040 { 1041 UCHAR Reserved1; 1042 UCHAR StartingM; 1043 UCHAR StartingS; 1044 UCHAR StartingF; 1045 UCHAR EndingM; 1046 UCHAR EndingS; 1047 UCHAR EndingF; 1048 UCHAR Reserved2; 1049 } MSF; 1050 } DUMMYUNIONNAME; 1051 UCHAR Audio:1; 1052 UCHAR Composite:1; 1053 UCHAR Port1:1; 1054 UCHAR Port2:1; 1055 UCHAR Reserved2:3; 1056 UCHAR Speed:1; 1057 UCHAR Control; 1058 } PLAY_CD, *PPLAY_CD; 1059 struct _SCAN_CD 1060 { 1061 UCHAR OperationCode; 1062 UCHAR RelativeAddress:1; 1063 UCHAR Reserved1:3; 1064 UCHAR Direct:1; 1065 UCHAR Lun:3; 1066 UCHAR StartingAddress[4]; 1067 UCHAR Reserved2[3]; 1068 UCHAR Reserved3:6; 1069 UCHAR Type:2; 1070 UCHAR Reserved4; 1071 UCHAR Control; 1072 } SCAN_CD, *PSCAN_CD; 1073 struct _STOP_PLAY_SCAN 1074 { 1075 UCHAR OperationCode; 1076 UCHAR Reserved1:5; 1077 UCHAR Lun:3; 1078 UCHAR Reserved2[7]; 1079 UCHAR Control; 1080 } STOP_PLAY_SCAN, *PSTOP_PLAY_SCAN; 1081 struct _SUBCHANNEL 1082 { 1083 UCHAR OperationCode; 1084 UCHAR Reserved0:1; 1085 UCHAR Msf:1; 1086 UCHAR Reserved1:3; 1087 UCHAR LogicalUnitNumber:3; 1088 UCHAR Reserved2:6; 1089 UCHAR SubQ:1; 1090 UCHAR Reserved3:1; 1091 UCHAR Format; 1092 UCHAR Reserved4[2]; 1093 UCHAR TrackNumber; 1094 UCHAR AllocationLength[2]; 1095 UCHAR Control; 1096 } SUBCHANNEL, *PSUBCHANNEL; 1097 struct _READ_CD 1098 { 1099 UCHAR OperationCode; 1100 UCHAR RelativeAddress:1; 1101 UCHAR Reserved0:1; 1102 UCHAR ExpectedSectorType:3; 1103 UCHAR Lun:3; 1104 UCHAR StartingLBA[4]; 1105 UCHAR TransferBlocks[3]; 1106 UCHAR Reserved2:1; 1107 UCHAR ErrorFlags:2; 1108 UCHAR IncludeEDC:1; 1109 UCHAR IncludeUserData:1; 1110 UCHAR HeaderCode:2; 1111 UCHAR IncludeSyncData:1; 1112 UCHAR SubChannelSelection:3; 1113 UCHAR Reserved3:5; 1114 UCHAR Control; 1115 } READ_CD, *PREAD_CD; 1116 struct _READ_CD_MSF 1117 { 1118 UCHAR OperationCode; 1119 UCHAR RelativeAddress:1; 1120 UCHAR Reserved1:1; 1121 UCHAR ExpectedSectorType:3; 1122 UCHAR Lun:3; 1123 UCHAR Reserved2; 1124 UCHAR StartingM; 1125 UCHAR StartingS; 1126 UCHAR StartingF; 1127 UCHAR EndingM; 1128 UCHAR EndingS; 1129 UCHAR EndingF; 1130 UCHAR Reserved3; 1131 UCHAR Reserved4:1; 1132 UCHAR ErrorFlags:2; 1133 UCHAR IncludeEDC:1; 1134 UCHAR IncludeUserData:1; 1135 UCHAR HeaderCode:2; 1136 UCHAR IncludeSyncData:1; 1137 UCHAR SubChannelSelection:3; 1138 UCHAR Reserved5:5; 1139 UCHAR Control; 1140 } READ_CD_MSF, *PREAD_CD_MSF; 1141 struct _PLXTR_READ_CDDA 1142 { 1143 UCHAR OperationCode; 1144 UCHAR Reserved0:5; 1145 UCHAR LogicalUnitNumber:3; 1146 UCHAR LogicalBlockByte0; 1147 UCHAR LogicalBlockByte1; 1148 UCHAR LogicalBlockByte2; 1149 UCHAR LogicalBlockByte3; 1150 UCHAR TransferBlockByte0; 1151 UCHAR TransferBlockByte1; 1152 UCHAR TransferBlockByte2; 1153 UCHAR TransferBlockByte3; 1154 UCHAR SubCode; 1155 UCHAR Control; 1156 } PLXTR_READ_CDDA, *PPLXTR_READ_CDDA; 1157 struct _NEC_READ_CDDA 1158 { 1159 UCHAR OperationCode; 1160 UCHAR Reserved0; 1161 UCHAR LogicalBlockByte0; 1162 UCHAR LogicalBlockByte1; 1163 UCHAR LogicalBlockByte2; 1164 UCHAR LogicalBlockByte3; 1165 UCHAR Reserved1; 1166 UCHAR TransferBlockByte0; 1167 UCHAR TransferBlockByte1; 1168 UCHAR Control; 1169 } NEC_READ_CDDA, *PNEC_READ_CDDA; 1170 struct _MODE_SENSE 1171 { 1172 UCHAR OperationCode; 1173 UCHAR Reserved1:3; 1174 UCHAR Dbd:1; 1175 UCHAR Reserved2:1; 1176 UCHAR LogicalUnitNumber:3; 1177 UCHAR PageCode:6; 1178 UCHAR Pc:2; 1179 UCHAR Reserved3; 1180 UCHAR AllocationLength; 1181 UCHAR Control; 1182 } MODE_SENSE, *PMODE_SENSE; 1183 struct _MODE_SENSE10 1184 { 1185 UCHAR OperationCode; 1186 UCHAR Reserved1:3; 1187 UCHAR Dbd:1; 1188 UCHAR Reserved2:1; 1189 UCHAR LogicalUnitNumber:3; 1190 UCHAR PageCode:6; 1191 UCHAR Pc:2; 1192 UCHAR Reserved3[4]; 1193 UCHAR AllocationLength[2]; 1194 UCHAR Control; 1195 } MODE_SENSE10, *PMODE_SENSE10; 1196 struct _MODE_SELECT 1197 { 1198 UCHAR OperationCode; 1199 UCHAR SPBit:1; 1200 UCHAR Reserved1:3; 1201 UCHAR PFBit:1; 1202 UCHAR LogicalUnitNumber:3; 1203 UCHAR Reserved2[2]; 1204 UCHAR ParameterListLength; 1205 UCHAR Control; 1206 } MODE_SELECT, *PMODE_SELECT; 1207 struct _MODE_SELECT10 1208 { 1209 UCHAR OperationCode; 1210 UCHAR SPBit:1; 1211 UCHAR Reserved1:3; 1212 UCHAR PFBit:1; 1213 UCHAR LogicalUnitNumber:3; 1214 UCHAR Reserved2[5]; 1215 UCHAR ParameterListLength[2]; 1216 UCHAR Control; 1217 } MODE_SELECT10, *PMODE_SELECT10; 1218 struct _LOCATE 1219 { 1220 UCHAR OperationCode; 1221 UCHAR Immediate:1; 1222 UCHAR CPBit:1; 1223 UCHAR BTBit:1; 1224 UCHAR Reserved1:2; 1225 UCHAR LogicalUnitNumber:3; 1226 UCHAR Reserved3; 1227 UCHAR LogicalBlockAddress[4]; 1228 UCHAR Reserved4; 1229 UCHAR Partition; 1230 UCHAR Control; 1231 } LOCATE, *PLOCATE; 1232 struct _LOGSENSE 1233 { 1234 UCHAR OperationCode; 1235 UCHAR SPBit:1; 1236 UCHAR PPCBit:1; 1237 UCHAR Reserved1:3; 1238 UCHAR LogicalUnitNumber:3; 1239 UCHAR PageCode:6; 1240 UCHAR PCBit:2; 1241 UCHAR Reserved2; 1242 UCHAR Reserved3; 1243 UCHAR ParameterPointer[2]; 1244 UCHAR AllocationLength[2]; 1245 UCHAR Control; 1246 } LOGSENSE, *PLOGSENSE; 1247 struct _LOGSELECT 1248 { 1249 UCHAR OperationCode; 1250 UCHAR SPBit:1; 1251 UCHAR PCRBit:1; 1252 UCHAR Reserved1:3; 1253 UCHAR LogicalUnitNumber:3; 1254 UCHAR Reserved:6; 1255 UCHAR PCBit:2; 1256 UCHAR Reserved2[4]; 1257 UCHAR ParameterListLength[2]; 1258 UCHAR Control; 1259 } LOGSELECT, *PLOGSELECT; 1260 struct _PRINT 1261 { 1262 UCHAR OperationCode; 1263 UCHAR Reserved:5; 1264 UCHAR LogicalUnitNumber:3; 1265 UCHAR TransferLength[3]; 1266 UCHAR Control; 1267 } PRINT, *PPRINT; 1268 struct _SEEK 1269 { 1270 UCHAR OperationCode; 1271 UCHAR Reserved1:5; 1272 UCHAR LogicalUnitNumber:3; 1273 UCHAR LogicalBlockAddress[4]; 1274 UCHAR Reserved2[3]; 1275 UCHAR Control; 1276 } SEEK, *PSEEK; 1277 struct _ERASE 1278 { 1279 UCHAR OperationCode; 1280 UCHAR Long:1; 1281 UCHAR Immediate:1; 1282 UCHAR Reserved1:3; 1283 UCHAR LogicalUnitNumber:3; 1284 UCHAR Reserved2[3]; 1285 UCHAR Control; 1286 } ERASE, *PERASE; 1287 struct _START_STOP 1288 { 1289 UCHAR OperationCode; 1290 UCHAR Immediate:1; 1291 UCHAR Reserved1:4; 1292 UCHAR LogicalUnitNumber:3; 1293 UCHAR Reserved2[2]; 1294 UCHAR Start:1; 1295 UCHAR LoadEject:1; 1296 UCHAR Reserved3:6; 1297 UCHAR Control; 1298 } START_STOP, *PSTART_STOP; 1299 struct _MEDIA_REMOVAL 1300 { 1301 UCHAR OperationCode; 1302 UCHAR Reserved1:5; 1303 UCHAR LogicalUnitNumber:3; 1304 UCHAR Reserved2[2]; 1305 UCHAR Prevent:1; 1306 UCHAR Persistant:1; 1307 UCHAR Reserved3:6; 1308 UCHAR Control; 1309 } MEDIA_REMOVAL, *PMEDIA_REMOVAL; 1310 struct _SEEK_BLOCK 1311 { 1312 UCHAR OperationCode; 1313 UCHAR Immediate:1; 1314 UCHAR Reserved1:7; 1315 UCHAR BlockAddress[3]; 1316 UCHAR Link:1; 1317 UCHAR Flag:1; 1318 UCHAR Reserved2:4; 1319 UCHAR VendorUnique:2; 1320 } SEEK_BLOCK, *PSEEK_BLOCK; 1321 struct _REQUEST_BLOCK_ADDRESS 1322 { 1323 UCHAR OperationCode; 1324 UCHAR Reserved1[3]; 1325 UCHAR AllocationLength; 1326 UCHAR Link:1; 1327 UCHAR Flag:1; 1328 UCHAR Reserved2:4; 1329 UCHAR VendorUnique:2; 1330 } REQUEST_BLOCK_ADDRESS, *PREQUEST_BLOCK_ADDRESS; 1331 struct _PARTITION 1332 { 1333 UCHAR OperationCode; 1334 UCHAR Immediate:1; 1335 UCHAR Sel:1; 1336 UCHAR PartitionSelect:6; 1337 UCHAR Reserved1[3]; 1338 UCHAR Control; 1339 } PARTITION, *PPARTITION; 1340 struct _WRITE_TAPE_MARKS 1341 { 1342 UCHAR OperationCode; 1343 UCHAR Immediate:1; 1344 UCHAR WriteSetMarks:1; 1345 UCHAR Reserved:3; 1346 UCHAR LogicalUnitNumber:3; 1347 UCHAR TransferLength[3]; 1348 UCHAR Control; 1349 } WRITE_TAPE_MARKS, *PWRITE_TAPE_MARKS; 1350 struct _SPACE_TAPE_MARKS 1351 { 1352 UCHAR OperationCode; 1353 UCHAR Code:3; 1354 UCHAR Reserved:2; 1355 UCHAR LogicalUnitNumber:3; 1356 UCHAR NumMarksMSB; 1357 UCHAR NumMarks; 1358 UCHAR NumMarksLSB; 1359 union 1360 { 1361 UCHAR value; 1362 struct 1363 { 1364 UCHAR Link:1; 1365 UCHAR Flag:1; 1366 UCHAR Reserved:4; 1367 UCHAR VendorUnique:2; 1368 } Fields; 1369 } Byte6; 1370 } SPACE_TAPE_MARKS, *PSPACE_TAPE_MARKS; 1371 struct _READ_POSITION 1372 { 1373 UCHAR Operation; 1374 UCHAR BlockType:1; 1375 UCHAR Reserved1:4; 1376 UCHAR Lun:3; 1377 UCHAR Reserved2[7]; 1378 UCHAR Control; 1379 } READ_POSITION, *PREAD_POSITION; 1380 struct _CDB6READWRITETAPE 1381 { 1382 UCHAR OperationCode; 1383 UCHAR VendorSpecific:5; 1384 UCHAR Reserved:3; 1385 UCHAR TransferLenMSB; 1386 UCHAR TransferLen; 1387 UCHAR TransferLenLSB; 1388 UCHAR Link:1; 1389 UCHAR Flag:1; 1390 UCHAR Reserved1:4; 1391 UCHAR VendorUnique:2; 1392 } CDB6READWRITETAPE, *PCDB6READWRITETAPE; 1393 struct _INIT_ELEMENT_STATUS 1394 { 1395 UCHAR OperationCode; 1396 UCHAR Reserved1:5; 1397 UCHAR LogicalUnitNubmer:3; 1398 UCHAR Reserved2[3]; 1399 UCHAR Reserved3:7; 1400 UCHAR NoBarCode:1; 1401 } INIT_ELEMENT_STATUS, *PINIT_ELEMENT_STATUS; 1402 struct _INITIALIZE_ELEMENT_RANGE 1403 { 1404 UCHAR OperationCode; 1405 UCHAR Range:1; 1406 UCHAR Reserved1:4; 1407 UCHAR LogicalUnitNubmer:3; 1408 UCHAR FirstElementAddress[2]; 1409 UCHAR Reserved2[2]; 1410 UCHAR NumberOfElements[2]; 1411 UCHAR Reserved3; 1412 UCHAR Reserved4:7; 1413 UCHAR NoBarCode:1; 1414 } INITIALIZE_ELEMENT_RANGE, *PINITIALIZE_ELEMENT_RANGE; 1415 struct _POSITION_TO_ELEMENT 1416 { 1417 UCHAR OperationCode; 1418 UCHAR Reserved1:5; 1419 UCHAR LogicalUnitNumber:3; 1420 UCHAR TransportElementAddress[2]; 1421 UCHAR DestinationElementAddress[2]; 1422 UCHAR Reserved2[2]; 1423 UCHAR Flip:1; 1424 UCHAR Reserved3:7; 1425 UCHAR Control; 1426 } POSITION_TO_ELEMENT, *PPOSITION_TO_ELEMENT; 1427 struct _MOVE_MEDIUM 1428 { 1429 UCHAR OperationCode; 1430 UCHAR Reserved1:5; 1431 UCHAR LogicalUnitNumber:3; 1432 UCHAR TransportElementAddress[2]; 1433 UCHAR SourceElementAddress[2]; 1434 UCHAR DestinationElementAddress[2]; 1435 UCHAR Reserved2[2]; 1436 UCHAR Flip:1; 1437 UCHAR Reserved3:7; 1438 UCHAR Control; 1439 } MOVE_MEDIUM, *PMOVE_MEDIUM; 1440 struct _EXCHANGE_MEDIUM 1441 { 1442 UCHAR OperationCode; 1443 UCHAR Reserved1:5; 1444 UCHAR LogicalUnitNumber:3; 1445 UCHAR TransportElementAddress[2]; 1446 UCHAR SourceElementAddress[2]; 1447 UCHAR Destination1ElementAddress[2]; 1448 UCHAR Destination2ElementAddress[2]; 1449 UCHAR Flip1:1; 1450 UCHAR Flip2:1; 1451 UCHAR Reserved3:6; 1452 UCHAR Control; 1453 } EXCHANGE_MEDIUM, *PEXCHANGE_MEDIUM; 1454 struct _READ_ELEMENT_STATUS 1455 { 1456 UCHAR OperationCode; 1457 UCHAR ElementType:4; 1458 UCHAR VolTag:1; 1459 UCHAR LogicalUnitNumber:3; 1460 UCHAR StartingElementAddress[2]; 1461 UCHAR NumberOfElements[2]; 1462 UCHAR Reserved1; 1463 UCHAR AllocationLength[3]; 1464 UCHAR Reserved2; 1465 UCHAR Control; 1466 } READ_ELEMENT_STATUS, *PREAD_ELEMENT_STATUS; 1467 struct _SEND_VOLUME_TAG 1468 { 1469 UCHAR OperationCode; 1470 UCHAR ElementType:4; 1471 UCHAR Reserved1:1; 1472 UCHAR LogicalUnitNumber:3; 1473 UCHAR StartingElementAddress[2]; 1474 UCHAR Reserved2; 1475 UCHAR ActionCode:5; 1476 UCHAR Reserved3:3; 1477 UCHAR Reserved4[2]; 1478 UCHAR ParameterListLength[2]; 1479 UCHAR Reserved5; 1480 UCHAR Control; 1481 } SEND_VOLUME_TAG, *PSEND_VOLUME_TAG; 1482 struct _REQUEST_VOLUME_ELEMENT_ADDRESS 1483 { 1484 UCHAR OperationCode; 1485 UCHAR ElementType:4; 1486 UCHAR VolTag:1; 1487 UCHAR LogicalUnitNumber:3; 1488 UCHAR StartingElementAddress[2]; 1489 UCHAR NumberElements[2]; 1490 UCHAR Reserved1; 1491 UCHAR AllocationLength[3]; 1492 UCHAR Reserved2; 1493 UCHAR Control; 1494 } REQUEST_VOLUME_ELEMENT_ADDRESS, *PREQUEST_VOLUME_ELEMENT_ADDRESS; 1495 struct _LOAD_UNLOAD 1496 { 1497 UCHAR OperationCode; 1498 UCHAR Immediate:1; 1499 UCHAR Reserved1:4; 1500 UCHAR Lun:3; 1501 UCHAR Reserved2[2]; 1502 UCHAR Start:1; 1503 UCHAR LoadEject:1; 1504 UCHAR Reserved3:6; 1505 UCHAR Reserved4[3]; 1506 UCHAR Slot; 1507 UCHAR Reserved5[3]; 1508 } LOAD_UNLOAD, *PLOAD_UNLOAD; 1509 struct _MECH_STATUS 1510 { 1511 UCHAR OperationCode; 1512 UCHAR Reserved:5; 1513 UCHAR Lun:3; 1514 UCHAR Reserved1[6]; 1515 UCHAR AllocationLength[2]; 1516 UCHAR Reserved2[1]; 1517 UCHAR Control; 1518 } MECH_STATUS, *PMECH_STATUS; 1519 struct _SYNCHRONIZE_CACHE10 1520 { 1521 UCHAR OperationCode; 1522 UCHAR RelAddr:1; 1523 UCHAR Immediate:1; 1524 UCHAR Reserved:3; 1525 UCHAR Lun:3; 1526 UCHAR LogicalBlockAddress[4]; 1527 UCHAR Reserved2; 1528 UCHAR BlockCount[2]; 1529 UCHAR Control; 1530 } SYNCHRONIZE_CACHE10, *PSYNCHRONIZE_CACHE10; 1531 struct _GET_EVENT_STATUS_NOTIFICATION 1532 { 1533 UCHAR OperationCode; 1534 UCHAR Immediate:1; 1535 UCHAR Reserved:4; 1536 UCHAR Lun:3; 1537 UCHAR Reserved2[2]; 1538 UCHAR NotificationClassRequest; 1539 UCHAR Reserved3[2]; 1540 UCHAR EventListLength[2]; 1541 UCHAR Control; 1542 } GET_EVENT_STATUS_NOTIFICATION, *PGET_EVENT_STATUS_NOTIFICATION; 1543 struct _GET_PERFORMANCE 1544 { 1545 UCHAR OperationCode; 1546 UCHAR Except:2; 1547 UCHAR Write:1; 1548 UCHAR Tolerance:2; 1549 UCHAR Reserved0:3; 1550 UCHAR StartingLBA[4]; 1551 UCHAR Reserved1[2]; 1552 UCHAR MaximumNumberOfDescriptors[2]; 1553 UCHAR Type; 1554 UCHAR Control; 1555 } GET_PERFORMANCE; 1556 struct _READ_DVD_STRUCTURE 1557 { 1558 UCHAR OperationCode; 1559 UCHAR Reserved1:5; 1560 UCHAR Lun:3; 1561 UCHAR RMDBlockNumber[4]; 1562 UCHAR LayerNumber; 1563 UCHAR Format; 1564 UCHAR AllocationLength[2]; 1565 UCHAR Reserved3:6; 1566 UCHAR AGID:2; 1567 UCHAR Control; 1568 } READ_DVD_STRUCTURE, *PREAD_DVD_STRUCTURE; 1569 struct _SET_STREAMING 1570 { 1571 UCHAR OperationCode; 1572 UCHAR Reserved[8]; 1573 UCHAR ParameterListLength[2]; 1574 UCHAR Control; 1575 } SET_STREAMING; 1576 struct _SEND_DVD_STRUCTURE 1577 { 1578 UCHAR OperationCode; 1579 UCHAR Reserved1:5; 1580 UCHAR Lun:3; 1581 UCHAR Reserved2[5]; 1582 UCHAR Format; 1583 UCHAR ParameterListLength[2]; 1584 UCHAR Reserved3; 1585 UCHAR Control; 1586 } SEND_DVD_STRUCTURE, *PSEND_DVD_STRUCTURE; 1587 struct _SEND_KEY 1588 { 1589 UCHAR OperationCode; 1590 UCHAR Reserved1:5; 1591 UCHAR Lun:3; 1592 UCHAR Reserved2[6]; 1593 UCHAR ParameterListLength[2]; 1594 UCHAR KeyFormat:6; 1595 UCHAR AGID:2; 1596 UCHAR Control; 1597 } SEND_KEY, *PSEND_KEY; 1598 struct _REPORT_KEY 1599 { 1600 UCHAR OperationCode; 1601 UCHAR Reserved1:5; 1602 UCHAR Lun:3; 1603 UCHAR LogicalBlockAddress[4]; 1604 UCHAR Reserved2[2]; 1605 UCHAR AllocationLength[2]; 1606 UCHAR KeyFormat:6; 1607 UCHAR AGID:2; 1608 UCHAR Control; 1609 } REPORT_KEY, *PREPORT_KEY; 1610 struct _SET_READ_AHEAD 1611 { 1612 UCHAR OperationCode; 1613 UCHAR Reserved1:5; 1614 UCHAR Lun:3; 1615 UCHAR TriggerLBA[4]; 1616 UCHAR ReadAheadLBA[4]; 1617 UCHAR Reserved2; 1618 UCHAR Control; 1619 } SET_READ_AHEAD, *PSET_READ_AHEAD; 1620 struct _READ_FORMATTED_CAPACITIES 1621 { 1622 UCHAR OperationCode; 1623 UCHAR Reserved1:5; 1624 UCHAR Lun:3; 1625 UCHAR Reserved2[5]; 1626 UCHAR AllocationLength[2]; 1627 UCHAR Control; 1628 } READ_FORMATTED_CAPACITIES, *PREAD_FORMATTED_CAPACITIES; 1629 struct _REPORT_LUNS 1630 { 1631 UCHAR OperationCode; 1632 UCHAR Reserved1[5]; 1633 UCHAR AllocationLength[4]; 1634 UCHAR Reserved2[1]; 1635 UCHAR Control; 1636 } REPORT_LUNS, *PREPORT_LUNS; 1637 struct _PERSISTENT_RESERVE_IN 1638 { 1639 UCHAR OperationCode; 1640 UCHAR ServiceAction:5; 1641 UCHAR Reserved1:3; 1642 UCHAR Reserved2[5]; 1643 UCHAR AllocationLength[2]; 1644 UCHAR Control; 1645 } PERSISTENT_RESERVE_IN, *PPERSISTENT_RESERVE_IN; 1646 struct _PERSISTENT_RESERVE_OUT 1647 { 1648 UCHAR OperationCode; 1649 UCHAR ServiceAction:5; 1650 UCHAR Reserved1:3; 1651 UCHAR Type:4; 1652 UCHAR Scope:4; 1653 UCHAR Reserved2[4]; 1654 UCHAR ParameterListLength[2]; 1655 UCHAR Control; 1656 } PERSISTENT_RESERVE_OUT, *PPERSISTENT_RESERVE_OUT; 1657 struct _GET_CONFIGURATION 1658 { 1659 UCHAR OperationCode; 1660 UCHAR RequestType:1; 1661 UCHAR Reserved1:7; 1662 UCHAR StartingFeature[2]; 1663 UCHAR Reserved2[3]; 1664 UCHAR AllocationLength[2]; 1665 UCHAR Control; 1666 } GET_CONFIGURATION, *PGET_CONFIGURATION; 1667 struct _SET_CD_SPEED 1668 { 1669 UCHAR OperationCode; 1670 _ANONYMOUS_UNION union 1671 { 1672 UCHAR Reserved1; 1673 _ANONYMOUS_STRUCT struct 1674 { 1675 UCHAR RotationControl:2; 1676 UCHAR Reserved3:6; 1677 } DUMMYSTRUCTNAME; 1678 } DUMMYUNIONNAME; 1679 UCHAR ReadSpeed[2]; 1680 UCHAR WriteSpeed[2]; 1681 UCHAR Reserved2[5]; 1682 UCHAR Control; 1683 } SET_CD_SPEED, *PSET_CD_SPEED; 1684 struct _READ12 1685 { 1686 UCHAR OperationCode; 1687 UCHAR RelativeAddress:1; 1688 UCHAR Reserved1:2; 1689 UCHAR ForceUnitAccess:1; 1690 UCHAR DisablePageOut:1; 1691 UCHAR LogicalUnitNumber:3; 1692 UCHAR LogicalBlock[4]; 1693 UCHAR TransferLength[4]; 1694 UCHAR Reserved2:7; 1695 UCHAR Streaming:1; 1696 UCHAR Control; 1697 } READ12; 1698 struct _WRITE12 1699 { 1700 UCHAR OperationCode; 1701 UCHAR RelativeAddress:1; 1702 UCHAR Reserved1:1; 1703 UCHAR EBP:1; 1704 UCHAR ForceUnitAccess:1; 1705 UCHAR DisablePageOut:1; 1706 UCHAR LogicalUnitNumber:3; 1707 UCHAR LogicalBlock[4]; 1708 UCHAR TransferLength[4]; 1709 UCHAR Reserved2:7; 1710 UCHAR Streaming:1; 1711 UCHAR Control; 1712 } WRITE12; 1713 struct _READ16 1714 { 1715 UCHAR OperationCode; 1716 UCHAR Reserved1:3; 1717 UCHAR ForceUnitAccess:1; 1718 UCHAR DisablePageOut:1; 1719 UCHAR ReadProtect:3; 1720 UCHAR LogicalBlock[8]; 1721 UCHAR TransferLength[4]; 1722 UCHAR Reserved2:7; 1723 UCHAR Streaming:1; 1724 UCHAR Control; 1725 } READ16; 1726 struct _WRITE16 1727 { 1728 UCHAR OperationCode; 1729 UCHAR Reserved1:3; 1730 UCHAR ForceUnitAccess:1; 1731 UCHAR DisablePageOut:1; 1732 UCHAR WriteProtect:3; 1733 UCHAR LogicalBlock[8]; 1734 UCHAR TransferLength[4]; 1735 UCHAR Reserved2:7; 1736 UCHAR Streaming:1; 1737 UCHAR Control; 1738 } WRITE16; 1739 struct _VERIFY16 1740 { 1741 UCHAR OperationCode; 1742 UCHAR Reserved1:1; 1743 UCHAR ByteCheck:1; 1744 UCHAR BlockVerify:1; 1745 UCHAR Reserved2: 1; 1746 UCHAR DisablePageOut:1; 1747 UCHAR VerifyProtect:3; 1748 UCHAR LogicalBlock[8]; 1749 UCHAR VerificationLength[4]; 1750 UCHAR Reserved3:7; 1751 UCHAR Streaming:1; 1752 UCHAR Control; 1753 } VERIFY16; 1754 struct _SYNCHRONIZE_CACHE16 1755 { 1756 UCHAR OperationCode; 1757 UCHAR Reserved1:1; 1758 UCHAR Immediate:1; 1759 UCHAR Reserved2:6; 1760 UCHAR LogicalBlock[8]; 1761 UCHAR BlockCount[4]; 1762 UCHAR Reserved3; 1763 UCHAR Control; 1764 } SYNCHRONIZE_CACHE16; 1765 struct _READ_CAPACITY16 1766 { 1767 UCHAR OperationCode; 1768 UCHAR ServiceAction:5; 1769 UCHAR Reserved1:3; 1770 UCHAR LogicalBlock[8]; 1771 UCHAR BlockCount[4]; 1772 UCHAR PMI:1; 1773 UCHAR Reserved2:7; 1774 UCHAR Control; 1775 } READ_CAPACITY16; 1776 ULONG AsUlong[4]; 1777 UCHAR AsByte[16]; 1778 } CDB, *PCDB; 1779 1780 typedef union _EIGHT_BYTE 1781 { 1782 struct 1783 { 1784 UCHAR Byte0; 1785 UCHAR Byte1; 1786 UCHAR Byte2; 1787 UCHAR Byte3; 1788 UCHAR Byte4; 1789 UCHAR Byte5; 1790 UCHAR Byte6; 1791 UCHAR Byte7; 1792 }; 1793 ULONGLONG AsULongLong; 1794 } EIGHT_BYTE, *PEIGHT_BYTE; 1795 1796 typedef union _FOUR_BYTE 1797 { 1798 struct 1799 { 1800 UCHAR Byte0; 1801 UCHAR Byte1; 1802 UCHAR Byte2; 1803 UCHAR Byte3; 1804 }; 1805 ULONG AsULong; 1806 } FOUR_BYTE, *PFOUR_BYTE; 1807 1808 typedef union _TWO_BYTE 1809 { 1810 struct 1811 { 1812 UCHAR Byte0; 1813 UCHAR Byte1; 1814 }; 1815 USHORT AsUShort; 1816 } TWO_BYTE, *PTWO_BYTE; 1817 #include <poppack.h> 1818 1819 #if (NTDDI_VERSION < NTDDI_WINXP) 1820 typedef struct _INQUIRYDATA 1821 { 1822 UCHAR DeviceType:5; 1823 UCHAR DeviceTypeQualifier:3; 1824 UCHAR DeviceTypeModifier:7; 1825 UCHAR RemovableMedia:1; 1826 UCHAR Versions; 1827 UCHAR ResponseDataFormat:4; 1828 UCHAR HiSupport:1; 1829 UCHAR NormACA:1; 1830 UCHAR ReservedBit:1; 1831 UCHAR AERC:1; 1832 UCHAR AdditionalLength; 1833 UCHAR Reserved[2]; 1834 UCHAR SoftReset:1; 1835 UCHAR CommandQueue:1; 1836 UCHAR Reserved2:1; 1837 UCHAR LinkedCommands:1; 1838 UCHAR Synchronous:1; 1839 UCHAR Wide16Bit:1; 1840 UCHAR Wide32Bit:1; 1841 UCHAR RelativeAddressing:1; 1842 UCHAR VendorId[8]; 1843 UCHAR ProductId[16]; 1844 UCHAR ProductRevisionLevel[4]; 1845 UCHAR VendorSpecific[20]; 1846 UCHAR Reserved3[40]; 1847 } INQUIRYDATA, *PINQUIRYDATA; 1848 #else 1849 #include <pshpack1.h> 1850 typedef struct _INQUIRYDATA 1851 { 1852 UCHAR DeviceType:5; 1853 UCHAR DeviceTypeQualifier:3; 1854 UCHAR DeviceTypeModifier:7; 1855 UCHAR RemovableMedia:1; 1856 union 1857 { 1858 UCHAR Versions; 1859 struct 1860 { 1861 UCHAR ANSIVersion:3; 1862 UCHAR ECMAVersion:3; 1863 UCHAR ISOVersion:2; 1864 }; 1865 }; 1866 UCHAR ResponseDataFormat:4; 1867 UCHAR HiSupport:1; 1868 UCHAR NormACA:1; 1869 UCHAR TerminateTask:1; 1870 UCHAR AERC:1; 1871 UCHAR AdditionalLength; 1872 UCHAR Reserved; 1873 UCHAR Addr16:1; 1874 UCHAR Addr32:1; 1875 UCHAR AckReqQ:1; 1876 UCHAR MediumChanger:1; 1877 UCHAR MultiPort:1; 1878 UCHAR ReservedBit2:1; 1879 UCHAR EnclosureServices:1; 1880 UCHAR ReservedBit3:1; 1881 UCHAR SoftReset:1; 1882 UCHAR CommandQueue:1; 1883 UCHAR TransferDisable:1; 1884 UCHAR LinkedCommands:1; 1885 UCHAR Synchronous:1; 1886 UCHAR Wide16Bit:1; 1887 UCHAR Wide32Bit:1; 1888 UCHAR RelativeAddressing:1; 1889 UCHAR VendorId[8]; 1890 UCHAR ProductId[16]; 1891 UCHAR ProductRevisionLevel[4]; 1892 UCHAR VendorSpecific[20]; 1893 UCHAR Reserved3[40]; 1894 } INQUIRYDATA, *PINQUIRYDATA; 1895 #include <poppack.h> 1896 #endif 1897 1898 typedef struct _VPD_MEDIA_SERIAL_NUMBER_PAGE 1899 { 1900 UCHAR DeviceType:5; 1901 UCHAR DeviceTypeQualifier:3; 1902 UCHAR PageCode; 1903 UCHAR Reserved; 1904 UCHAR PageLength; 1905 UCHAR SerialNumber[0]; 1906 } VPD_MEDIA_SERIAL_NUMBER_PAGE, *PVPD_MEDIA_SERIAL_NUMBER_PAGE; 1907 1908 typedef struct _VPD_SERIAL_NUMBER_PAGE 1909 { 1910 UCHAR DeviceType:5; 1911 UCHAR DeviceTypeQualifier:3; 1912 UCHAR PageCode; 1913 UCHAR Reserved; 1914 UCHAR PageLength; 1915 UCHAR SerialNumber[0]; 1916 } VPD_SERIAL_NUMBER_PAGE, *PVPD_SERIAL_NUMBER_PAGE; 1917 1918 typedef struct _VPD_IDENTIFICATION_DESCRIPTOR 1919 { 1920 UCHAR CodeSet:4; 1921 UCHAR Reserved:4; 1922 UCHAR IdentifierType:4; 1923 UCHAR Association:2; 1924 UCHAR Reserved2:2; 1925 UCHAR Reserved3; 1926 UCHAR IdentifierLength; 1927 UCHAR Identifier[0]; 1928 } VPD_IDENTIFICATION_DESCRIPTOR, *PVPD_IDENTIFICATION_DESCRIPTOR; 1929 1930 typedef struct _VPD_IDENTIFICATION_PAGE 1931 { 1932 UCHAR DeviceType:5; 1933 UCHAR DeviceTypeQualifier:3; 1934 UCHAR PageCode; 1935 UCHAR Reserved; 1936 UCHAR PageLength; 1937 UCHAR Descriptors[0]; 1938 } VPD_IDENTIFICATION_PAGE, *PVPD_IDENTIFICATION_PAGE; 1939 1940 typedef struct _VPD_SUPPORTED_PAGES_PAGE 1941 { 1942 UCHAR DeviceType:5; 1943 UCHAR DeviceTypeQualifier:3; 1944 UCHAR PageCode; 1945 UCHAR Reserved; 1946 UCHAR PageLength; 1947 UCHAR SupportedPageList[0]; 1948 } VPD_SUPPORTED_PAGES_PAGE, *PVPD_SUPPORTED_PAGES_PAGE; 1949 1950 #include <pshpack1.h> 1951 typedef struct _READ_CAPACITY_DATA 1952 { 1953 ULONG LogicalBlockAddress; 1954 ULONG BytesPerBlock; 1955 } READ_CAPACITY_DATA, *PREAD_CAPACITY_DATA; 1956 1957 typedef struct _READ_CAPACITY_DATA_EX 1958 { 1959 LARGE_INTEGER LogicalBlockAddress; 1960 ULONG BytesPerBlock; 1961 } READ_CAPACITY_DATA_EX, *PREAD_CAPACITY_DATA_EX; 1962 1963 typedef struct _MODE_PARAMETER_HEADER 1964 { 1965 UCHAR ModeDataLength; 1966 UCHAR MediumType; 1967 UCHAR DeviceSpecificParameter; 1968 UCHAR BlockDescriptorLength; 1969 }MODE_PARAMETER_HEADER, *PMODE_PARAMETER_HEADER; 1970 1971 typedef struct _MODE_PARAMETER_HEADER10 1972 { 1973 UCHAR ModeDataLength[2]; 1974 UCHAR MediumType; 1975 UCHAR DeviceSpecificParameter; 1976 UCHAR Reserved[2]; 1977 UCHAR BlockDescriptorLength[2]; 1978 }MODE_PARAMETER_HEADER10, *PMODE_PARAMETER_HEADER10; 1979 1980 typedef struct _MODE_PARAMETER_BLOCK 1981 { 1982 UCHAR DensityCode; 1983 UCHAR NumberOfBlocks[3]; 1984 UCHAR Reserved; 1985 UCHAR BlockLength[3]; 1986 }MODE_PARAMETER_BLOCK, *PMODE_PARAMETER_BLOCK; 1987 1988 typedef struct _LUN_LIST 1989 { 1990 UCHAR LunListLength[4]; 1991 UCHAR Reserved[4]; 1992 #if !defined(__midl) 1993 UCHAR Lun[0][8]; 1994 #endif 1995 } LUN_LIST, *PLUN_LIST; 1996 1997 typedef struct _SENSE_DATA 1998 { 1999 UCHAR ErrorCode:7; 2000 UCHAR Valid:1; 2001 UCHAR SegmentNumber; 2002 UCHAR SenseKey:4; 2003 UCHAR Reserved:1; 2004 UCHAR IncorrectLength:1; 2005 UCHAR EndOfMedia:1; 2006 UCHAR FileMark:1; 2007 UCHAR Information[4]; 2008 UCHAR AdditionalSenseLength; 2009 UCHAR CommandSpecificInformation[4]; 2010 UCHAR AdditionalSenseCode; 2011 UCHAR AdditionalSenseCodeQualifier; 2012 UCHAR FieldReplaceableUnitCode; 2013 UCHAR SenseKeySpecific[3]; 2014 } SENSE_DATA, *PSENSE_DATA; 2015 2016 #include <poppack.h> 2017 2018 typedef PHYSICAL_ADDRESS STOR_PHYSICAL_ADDRESS; 2019 2020 typedef struct _ACCESS_RANGE 2021 { 2022 STOR_PHYSICAL_ADDRESS RangeStart; 2023 ULONG RangeLength; 2024 BOOLEAN RangeInMemory; 2025 } ACCESS_RANGE, *PACCESS_RANGE; 2026 2027 typedef struct _MEMORY_REGION 2028 { 2029 PUCHAR VirtualBase; 2030 PHYSICAL_ADDRESS PhysicalBase; 2031 ULONG Length; 2032 } MEMORY_REGION, *PMEMORY_REGION; 2033 2034 typedef struct _PORT_CONFIGURATION_INFORMATION 2035 { 2036 ULONG Length; 2037 ULONG SystemIoBusNumber; 2038 INTERFACE_TYPE AdapterInterfaceType; 2039 ULONG BusInterruptLevel; 2040 ULONG BusInterruptVector; 2041 KINTERRUPT_MODE InterruptMode; 2042 ULONG MaximumTransferLength; 2043 ULONG NumberOfPhysicalBreaks; 2044 ULONG DmaChannel; 2045 ULONG DmaPort; 2046 DMA_WIDTH DmaWidth; 2047 DMA_SPEED DmaSpeed; 2048 ULONG AlignmentMask; 2049 ULONG NumberOfAccessRanges; 2050 ACCESS_RANGE (*AccessRanges)[]; 2051 PVOID Reserved; 2052 UCHAR NumberOfBuses; 2053 CCHAR InitiatorBusId[8]; 2054 BOOLEAN ScatterGather; 2055 BOOLEAN Master; 2056 BOOLEAN CachesData; 2057 BOOLEAN AdapterScansDown; 2058 BOOLEAN AtdiskPrimaryClaimed; 2059 BOOLEAN AtdiskSecondaryClaimed; 2060 BOOLEAN Dma32BitAddresses; 2061 BOOLEAN DemandMode; 2062 UCHAR MapBuffers; 2063 BOOLEAN NeedPhysicalAddresses; 2064 BOOLEAN TaggedQueuing; 2065 BOOLEAN AutoRequestSense; 2066 BOOLEAN MultipleRequestPerLu; 2067 BOOLEAN ReceiveEvent; 2068 BOOLEAN RealModeInitialized; 2069 BOOLEAN BufferAccessScsiPortControlled; 2070 UCHAR MaximumNumberOfTargets; 2071 UCHAR ReservedUchars[2]; 2072 ULONG SlotNumber; 2073 ULONG BusInterruptLevel2; 2074 ULONG BusInterruptVector2; 2075 KINTERRUPT_MODE InterruptMode2; 2076 ULONG DmaChannel2; 2077 ULONG DmaPort2; 2078 DMA_WIDTH DmaWidth2; 2079 DMA_SPEED DmaSpeed2; 2080 ULONG DeviceExtensionSize; 2081 ULONG SpecificLuExtensionSize; 2082 ULONG SrbExtensionSize; 2083 UCHAR Dma64BitAddresses; 2084 BOOLEAN ResetTargetSupported; 2085 UCHAR MaximumNumberOfLogicalUnits; 2086 BOOLEAN WmiDataProvider; 2087 STOR_SYNCHRONIZATION_MODEL SynchronizationModel; 2088 } PORT_CONFIGURATION_INFORMATION, *PPORT_CONFIGURATION_INFORMATION; 2089 2090 typedef struct _STOR_SCATTER_GATHER_ELEMENT 2091 { 2092 STOR_PHYSICAL_ADDRESS PhysicalAddress; 2093 ULONG Length; 2094 ULONG_PTR Reserved; 2095 } STOR_SCATTER_GATHER_ELEMENT, *PSTOR_SCATTER_GATHER_ELEMENT; 2096 2097 typedef struct _STOR_SCATTER_GATHER_LIST 2098 { 2099 ULONG NumberOfElements; 2100 ULONG_PTR Reserved; 2101 STOR_SCATTER_GATHER_ELEMENT List[]; 2102 } STOR_SCATTER_GATHER_LIST, *PSTOR_SCATTER_GATHER_LIST; 2103 2104 typedef struct _DPC_BUFFER 2105 { 2106 CSHORT Type; 2107 UCHAR Number; 2108 UCHAR Importance; 2109 struct 2110 { 2111 PVOID F; 2112 PVOID B; 2113 }; 2114 PVOID DeferredRoutine; 2115 PVOID DeferredContext; 2116 PVOID SystemArgument1; 2117 PVOID SystemArgument2; 2118 PVOID DpcData; 2119 } DPC_BUFFER; 2120 2121 typedef struct _STOR_DPC 2122 { 2123 DPC_BUFFER Dpc; 2124 ULONG_PTR Lock; 2125 } STOR_DPC, *PSTOR_DPC; 2126 2127 typedef struct _STOR_LOCK_HANDLE 2128 { 2129 STOR_SPINLOCK Lock; 2130 struct 2131 { 2132 struct 2133 { 2134 PVOID Next; 2135 PVOID Lock; 2136 } LockQueue; 2137 KIRQL OldIrql; 2138 } Context; 2139 } STOR_LOCK_HANDLE, *PSTOR_LOCK_HANDLE; 2140 2141 typedef struct _STOR_LOG_EVENT_DETAILS 2142 { 2143 ULONG InterfaceRevision; 2144 ULONG Size; 2145 ULONG Flags; 2146 STOR_EVENT_ASSOCIATION_ENUM EventAssociation; 2147 ULONG PathId; 2148 ULONG TargetId; 2149 ULONG LunId; 2150 BOOLEAN StorportSpecificErrorCode; 2151 ULONG ErrorCode; 2152 ULONG UniqueId; 2153 ULONG DumpDataSize; 2154 PVOID DumpData; 2155 ULONG StringCount; 2156 PWSTR *StringList; 2157 } STOR_LOG_EVENT_DETAILS, *PSTOR_LOG_EVENT_DETAILS; 2158 2159 typedef struct _PERF_CONFIGURATION_DATA 2160 { 2161 ULONG Version; 2162 ULONG Size; 2163 ULONG Flags; 2164 ULONG ConcurrentChannels; 2165 ULONG FirstRedirectionMessageNumber; 2166 ULONG LastRedirectionMessageNumber; 2167 ULONG DeviceNode; 2168 ULONG Reserved; 2169 PGROUP_AFFINITY MessageTargets; 2170 } PERF_CONFIGURATION_DATA, *PPERF_CONFIGURATION_DATA; 2171 2172 typedef struct _STARTIO_PERFORMANCE_PARAMETERS 2173 { 2174 ULONG Version; 2175 ULONG Size; 2176 ULONG MessageNumber; 2177 ULONG ChannelNumber; 2178 } STARTIO_PERFORMANCE_PARAMETERS, *PSTARTIO_PERFORMANCE_PARAMETERS; 2179 2180 typedef struct _MESSAGE_INTERRUPT_INFORMATION 2181 { 2182 ULONG MessageId; 2183 ULONG MessageData; 2184 STOR_PHYSICAL_ADDRESS MessageAddress; 2185 ULONG InterruptVector; 2186 ULONG InterruptLevel; 2187 KINTERRUPT_MODE InterruptMode; 2188 } MESSAGE_INTERRUPT_INFORMATION, *PMESSAGE_INTERRUPT_INFORMATION; 2189 2190 typedef 2191 BOOLEAN 2192 (NTAPI *PHW_INITIALIZE)( 2193 _In_ PVOID DeviceExtension); 2194 2195 typedef 2196 BOOLEAN 2197 (NTAPI *PHW_BUILDIO)( 2198 _In_ PVOID DeviceExtension, 2199 _In_ PSCSI_REQUEST_BLOCK Srb); 2200 2201 typedef 2202 BOOLEAN 2203 (NTAPI *PHW_STARTIO)( 2204 _In_ PVOID DeviceExtension, 2205 _In_ PSCSI_REQUEST_BLOCK Srb); 2206 2207 typedef 2208 BOOLEAN 2209 (NTAPI *PHW_INTERRUPT)( 2210 _In_ PVOID DeviceExtension); 2211 2212 typedef 2213 VOID 2214 (NTAPI *PHW_TIMER)( 2215 _In_ PVOID DeviceExtension); 2216 2217 typedef 2218 VOID 2219 (NTAPI *PHW_DMA_STARTED)( 2220 _In_ PVOID DeviceExtension); 2221 2222 typedef 2223 ULONG 2224 (NTAPI *PHW_FIND_ADAPTER)( 2225 IN PVOID DeviceExtension, 2226 IN PVOID HwContext, 2227 IN PVOID BusInformation, 2228 IN PCHAR ArgumentString, 2229 IN OUT PPORT_CONFIGURATION_INFORMATION ConfigInfo, 2230 OUT PBOOLEAN Again); 2231 2232 typedef 2233 BOOLEAN 2234 (NTAPI *PHW_RESET_BUS)( 2235 IN PVOID DeviceExtension, 2236 IN ULONG PathId); 2237 2238 typedef 2239 BOOLEAN 2240 (NTAPI *PHW_ADAPTER_STATE)( 2241 IN PVOID DeviceExtension, 2242 IN PVOID Context, 2243 IN BOOLEAN SaveState); 2244 2245 typedef 2246 SCSI_ADAPTER_CONTROL_STATUS 2247 (NTAPI *PHW_ADAPTER_CONTROL)( 2248 IN PVOID DeviceExtension, 2249 IN SCSI_ADAPTER_CONTROL_TYPE ControlType, 2250 IN PVOID Parameters); 2251 2252 typedef 2253 BOOLEAN 2254 (*PHW_PASSIVE_INITIALIZE_ROUTINE)( 2255 _In_ PVOID DeviceExtension); 2256 2257 typedef 2258 VOID 2259 (*PHW_DPC_ROUTINE)( 2260 _In_ PSTOR_DPC Dpc, 2261 _In_ PVOID HwDeviceExtension, 2262 _In_ PVOID SystemArgument1, 2263 _In_ PVOID SystemArgument2); 2264 2265 typedef 2266 BOOLEAN 2267 (NTAPI STOR_SYNCHRONIZED_ACCESS)( 2268 _In_ PVOID HwDeviceExtension, 2269 _In_ PVOID Context); 2270 2271 typedef STOR_SYNCHRONIZED_ACCESS *PSTOR_SYNCHRONIZED_ACCESS; 2272 2273 typedef 2274 VOID 2275 (NTAPI *PpostScaterGatherExecute)( 2276 _In_ PVOID *DeviceObject, 2277 _In_ PVOID *Irp, 2278 _In_ PSTOR_SCATTER_GATHER_LIST ScatterGather, 2279 _In_ PVOID Context); 2280 2281 typedef 2282 BOOLEAN 2283 (NTAPI *PStorPortGetMessageInterruptInformation)( 2284 _In_ PVOID HwDeviceExtension, 2285 _In_ ULONG MessageId, 2286 _Out_ PMESSAGE_INTERRUPT_INFORMATION InterruptInfo); 2287 2288 typedef 2289 VOID 2290 (NTAPI *PStorPortPutScatterGatherList)( 2291 _In_ PVOID HwDeviceExtension, 2292 _In_ PSTOR_SCATTER_GATHER_LIST ScatterGatherList, 2293 _In_ BOOLEAN WriteToDevice); 2294 2295 typedef 2296 GETSGSTATUS 2297 (NTAPI *PStorPortBuildScatterGatherList)( 2298 _In_ PVOID HwDeviceExtension, 2299 _In_ PVOID Mdl, 2300 _In_ PVOID CurrentVa, 2301 _In_ ULONG Length, 2302 _In_ PpostScaterGatherExecute ExecutionRoutine, 2303 _In_ PVOID Context, 2304 _In_ BOOLEAN WriteToDevice, 2305 _Inout_ PVOID ScatterGatherBuffer, 2306 _In_ ULONG ScatterGatherBufferLength); 2307 2308 typedef 2309 VOID 2310 (NTAPI *PStorPortFreePool)( 2311 _In_ PVOID PMemory, 2312 _In_ PVOID HwDeviceExtension, 2313 _In_opt_ PVOID PMdl); 2314 2315 typedef 2316 PVOID 2317 (NTAPI *PStorPortAllocatePool)( 2318 _In_ ULONG NumberOfBytes, 2319 _In_ ULONG Tag, 2320 _In_ PVOID HwDeviceExtension, 2321 _Out_ PVOID *PMdl); 2322 2323 typedef 2324 PVOID 2325 (NTAPI *PStorPortGetSystemAddress)( 2326 _In_ PSCSI_REQUEST_BLOCK Srb); 2327 2328 typedef struct _STORPORT_EXTENDED_FUNCTIONS 2329 { 2330 ULONG Version; 2331 PStorPortGetMessageInterruptInformation GetMessageInterruptInformation; 2332 PStorPortPutScatterGatherList PutScatterGatherList; 2333 PStorPortBuildScatterGatherList BuildScatterGatherList; 2334 PStorPortFreePool FreePool; 2335 PStorPortAllocatePool AllocatePool; 2336 PStorPortGetSystemAddress GetSystemAddress; 2337 } STORPORT_EXTENDED_FUNCTIONS, *PSTORPORT_EXTENDED_FUNCTIONS; 2338 2339 typedef struct _HW_INITIALIZATION_DATA 2340 { 2341 ULONG HwInitializationDataSize; 2342 INTERFACE_TYPE AdapterInterfaceType; 2343 PHW_INITIALIZE HwInitialize; 2344 PHW_STARTIO HwStartIo; 2345 PHW_INTERRUPT HwInterrupt; 2346 PHW_FIND_ADAPTER HwFindAdapter; 2347 PHW_RESET_BUS HwResetBus; 2348 PHW_DMA_STARTED HwDmaStarted; 2349 PHW_ADAPTER_STATE HwAdapterState; 2350 ULONG DeviceExtensionSize; 2351 ULONG SpecificLuExtensionSize; 2352 ULONG SrbExtensionSize; 2353 ULONG NumberOfAccessRanges; 2354 PVOID Reserved; 2355 UCHAR MapBuffers; 2356 BOOLEAN NeedPhysicalAddresses; 2357 BOOLEAN TaggedQueuing; 2358 BOOLEAN AutoRequestSense; 2359 BOOLEAN MultipleRequestPerLu; 2360 BOOLEAN ReceiveEvent; 2361 USHORT VendorIdLength; 2362 PVOID VendorId; 2363 USHORT ReservedUshort; 2364 USHORT DeviceIdLength; 2365 PVOID DeviceId; 2366 PHW_ADAPTER_CONTROL HwAdapterControl; 2367 PHW_BUILDIO HwBuildIo; 2368 } HW_INITIALIZATION_DATA, *PHW_INITIALIZATION_DATA; 2369 2370 2371 2372 #define REVERSE_BYTES_QUAD(Destination, Source) { \ 2373 PEIGHT_BYTE d = (PEIGHT_BYTE)(Destination); \ 2374 PEIGHT_BYTE s = (PEIGHT_BYTE)(Source); \ 2375 d->Byte7 = s->Byte0; \ 2376 d->Byte6 = s->Byte1; \ 2377 d->Byte5 = s->Byte2; \ 2378 d->Byte4 = s->Byte3; \ 2379 d->Byte3 = s->Byte4; \ 2380 d->Byte2 = s->Byte5; \ 2381 d->Byte1 = s->Byte6; \ 2382 d->Byte0 = s->Byte7; \ 2383 } 2384 2385 #define REVERSE_BYTES(Destination, Source) { \ 2386 PFOUR_BYTE d = (PFOUR_BYTE)(Destination); \ 2387 PFOUR_BYTE s = (PFOUR_BYTE)(Source); \ 2388 d->Byte3 = s->Byte0; \ 2389 d->Byte2 = s->Byte1; \ 2390 d->Byte1 = s->Byte2; \ 2391 d->Byte0 = s->Byte3; \ 2392 } 2393 2394 #define REVERSE_BYTES_SHORT(Destination, Source) { \ 2395 PTWO_BYTE d = (PTWO_BYTE)(Destination); \ 2396 PTWO_BYTE s = (PTWO_BYTE)(Source); \ 2397 d->Byte1 = s->Byte0; \ 2398 d->Byte0 = s->Byte1; \ 2399 } 2400 2401 #define StorPortCopyMemory(Destination,Source,Length) memcpy((Destination),(Source),(Length)) 2402 2403 STORPORT_API 2404 PUCHAR 2405 NTAPI 2406 StorPortAllocateRegistryBuffer( 2407 _In_ PVOID HwDeviceExtension, 2408 _In_ PULONG Length); 2409 2410 STORPORT_API 2411 BOOLEAN 2412 NTAPI 2413 StorPortBusy( 2414 _In_ PVOID HwDeviceExtension, 2415 _In_ ULONG RequestsToComplete); 2416 2417 STORPORT_API 2418 VOID 2419 NTAPI 2420 StorPortCompleteRequest( 2421 _In_ PVOID HwDeviceExtension, 2422 _In_ UCHAR PathId, 2423 _In_ UCHAR TargetId, 2424 _In_ UCHAR Lun, 2425 _In_ UCHAR SrbStatus); 2426 2427 STORPORT_API 2428 ULONG64 2429 NTAPI 2430 StorPortConvertPhysicalAddressToUlong64( 2431 _In_ STOR_PHYSICAL_ADDRESS Address); 2432 2433 STORPORT_API 2434 STOR_PHYSICAL_ADDRESS 2435 NTAPI 2436 StorPortConvertUlong64ToPhysicalAddress( 2437 _In_ ULONG64 UlongAddress); 2438 2439 STORPORT_API 2440 VOID 2441 __cdecl 2442 StorPortDebugPrint( 2443 _In_ ULONG DebugPrintLevel, 2444 _In_ PCCHAR DebugMessage, 2445 ...); 2446 2447 STORPORT_API 2448 BOOLEAN 2449 NTAPI 2450 StorPortDeviceBusy( 2451 _In_ PVOID HwDeviceExtension, 2452 _In_ UCHAR PathId, 2453 _In_ UCHAR TargetId, 2454 _In_ UCHAR Lun, 2455 _In_ ULONG RequestsToComplete); 2456 2457 STORPORT_API 2458 BOOLEAN 2459 NTAPI 2460 StorPortDeviceReady( 2461 _In_ PVOID HwDeviceExtension, 2462 _In_ UCHAR PathId, 2463 _In_ UCHAR TargetId, 2464 _In_ UCHAR Lun); 2465 2466 STORPORT_API 2467 VOID 2468 NTAPI 2469 StorPortFreeDeviceBase( 2470 _In_ PVOID HwDeviceExtension, 2471 _In_ PVOID MappedAddress); 2472 2473 STORPORT_API 2474 VOID 2475 NTAPI 2476 StorPortFreeRegistryBuffer( 2477 _In_ PVOID HwDeviceExtension, 2478 _In_ PUCHAR Buffer); 2479 2480 STORPORT_API 2481 ULONG 2482 NTAPI 2483 StorPortGetBusData( 2484 _In_ PVOID DeviceExtension, 2485 _In_ ULONG BusDataType, 2486 _In_ ULONG SystemIoBusNumber, 2487 _In_ ULONG SlotNumber, 2488 _Out_ _When_(Length != 0, _Out_writes_bytes_(Length)) PVOID Buffer, 2489 _In_ ULONG Length); 2490 2491 STORPORT_API 2492 PVOID 2493 NTAPI 2494 StorPortGetDeviceBase( 2495 _In_ PVOID HwDeviceExtension, 2496 _In_ INTERFACE_TYPE BusType, 2497 _In_ ULONG SystemIoBusNumber, 2498 _In_ STOR_PHYSICAL_ADDRESS IoAddress, 2499 _In_ ULONG NumberOfBytes, 2500 _In_ BOOLEAN InIoSpace); 2501 2502 STORPORT_API 2503 PVOID 2504 NTAPI 2505 StorPortGetLogicalUnit( 2506 _In_ PVOID HwDeviceExtension, 2507 _In_ UCHAR PathId, 2508 _In_ UCHAR TargetId, 2509 _In_ UCHAR Lun); 2510 2511 STORPORT_API 2512 STOR_PHYSICAL_ADDRESS 2513 NTAPI 2514 StorPortGetPhysicalAddress( 2515 _In_ PVOID HwDeviceExtension, 2516 _In_opt_ PSCSI_REQUEST_BLOCK Srb, 2517 _In_ PVOID VirtualAddress, 2518 _Out_ ULONG *Length); 2519 2520 STORPORT_API 2521 PSTOR_SCATTER_GATHER_LIST 2522 NTAPI 2523 StorPortGetScatterGatherList( 2524 _In_ PVOID DeviceExtension, 2525 _In_ PSCSI_REQUEST_BLOCK Srb); 2526 2527 STORPORT_API 2528 PSCSI_REQUEST_BLOCK 2529 NTAPI 2530 StorPortGetSrb( 2531 _In_ PVOID DeviceExtension, 2532 _In_ UCHAR PathId, 2533 _In_ UCHAR TargetId, 2534 _In_ UCHAR Lun, 2535 _In_ LONG QueueTag); 2536 2537 STORPORT_API 2538 PVOID 2539 NTAPI 2540 StorPortGetUncachedExtension( 2541 _In_ PVOID HwDeviceExtension, 2542 _In_ PPORT_CONFIGURATION_INFORMATION ConfigInfo, 2543 _In_ ULONG NumberOfBytes); 2544 2545 STORPORT_API 2546 PVOID 2547 NTAPI 2548 StorPortGetVirtualAddress( 2549 _In_ PVOID HwDeviceExtension, 2550 _In_ STOR_PHYSICAL_ADDRESS PhysicalAddress); 2551 2552 STORPORT_API 2553 ULONG 2554 NTAPI 2555 StorPortInitialize( 2556 _In_ PVOID Argument1, 2557 _In_ PVOID Argument2, 2558 _In_ PHW_INITIALIZATION_DATA HwInitializationData, 2559 _In_opt_ PVOID Unused); 2560 2561 STORPORT_API 2562 VOID 2563 NTAPI 2564 StorPortLogError( 2565 _In_ PVOID HwDeviceExtension, 2566 _In_opt_ PSCSI_REQUEST_BLOCK Srb, 2567 _In_ UCHAR PathId, 2568 _In_ UCHAR TargetId, 2569 _In_ UCHAR Lun, 2570 _In_ ULONG ErrorCode, 2571 _In_ ULONG UniqueId); 2572 2573 STORPORT_API 2574 VOID 2575 NTAPI 2576 StorPortMoveMemory( 2577 _Out_writes_bytes_(Length) PVOID WriteBuffer, 2578 _In_reads_bytes_(Length) PVOID ReadBuffer, 2579 _In_ ULONG Length); 2580 2581 STORPORT_API 2582 VOID 2583 __cdecl 2584 StorPortNotification( 2585 _In_ SCSI_NOTIFICATION_TYPE NotificationType, 2586 _In_ PVOID HwDeviceExtension, 2587 ...); 2588 2589 STORPORT_API 2590 VOID 2591 NTAPI 2592 StorPortQuerySystemTime( 2593 _Out_ PLARGE_INTEGER CurrentTime); 2594 2595 STORPORT_API 2596 BOOLEAN 2597 NTAPI 2598 StorPortPause( 2599 _In_ PVOID HwDeviceExtension, 2600 _In_ ULONG TimeOut); 2601 2602 STORPORT_API 2603 BOOLEAN 2604 NTAPI 2605 StorPortPauseDevice( 2606 _In_ PVOID HwDeviceExtension, 2607 _In_ UCHAR PathId, 2608 _In_ UCHAR TargetId, 2609 _In_ UCHAR Lun, 2610 _In_ ULONG TimeOut); 2611 2612 STORPORT_API 2613 VOID 2614 NTAPI 2615 StorPortReadPortBufferUchar( 2616 _In_ PVOID HwDeviceExtension, 2617 _In_ PUCHAR Port, 2618 _In_ PUCHAR Buffer, 2619 _In_ ULONG Count); 2620 2621 STORPORT_API 2622 VOID 2623 NTAPI 2624 StorPortReadPortBufferUlong( 2625 _In_ PVOID HwDeviceExtension, 2626 _In_ PULONG Port, 2627 _In_ PULONG Buffer, 2628 _In_ ULONG Count); 2629 2630 STORPORT_API 2631 VOID 2632 NTAPI 2633 StorPortReadPortBufferUshort( 2634 _In_ PVOID HwDeviceExtension, 2635 _In_ PUSHORT Port, 2636 _In_ PUSHORT Buffer, 2637 _In_ ULONG Count); 2638 2639 STORPORT_API 2640 UCHAR 2641 NTAPI 2642 StorPortReadPortUchar( 2643 _In_ PVOID HwDeviceExtension, 2644 _In_ PUCHAR Port); 2645 2646 STORPORT_API 2647 ULONG 2648 NTAPI 2649 StorPortReadPortUlong( 2650 _In_ PVOID HwDeviceExtension, 2651 _In_ PULONG Port); 2652 2653 STORPORT_API 2654 USHORT 2655 NTAPI 2656 StorPortReadPortUshort( 2657 _In_ PVOID HwDeviceExtension, 2658 _In_ PUSHORT Port); 2659 2660 STORPORT_API 2661 VOID 2662 NTAPI 2663 StorPortReadRegisterBufferUchar( 2664 _In_ PVOID HwDeviceExtension, 2665 _In_ PUCHAR Register, 2666 _In_ PUCHAR Buffer, 2667 _In_ ULONG Count); 2668 2669 STORPORT_API 2670 VOID 2671 NTAPI 2672 StorPortReadRegisterBufferUlong( 2673 _In_ PVOID HwDeviceExtension, 2674 _In_ PULONG Register, 2675 _In_ PULONG Buffer, 2676 _In_ ULONG Count); 2677 2678 STORPORT_API 2679 VOID 2680 NTAPI 2681 StorPortReadRegisterBufferUshort( 2682 _In_ PVOID HwDeviceExtension, 2683 _In_ PUSHORT Register, 2684 _In_ PUSHORT Buffer, 2685 _In_ ULONG Count); 2686 2687 STORPORT_API 2688 UCHAR 2689 NTAPI 2690 StorPortReadRegisterUchar( 2691 _In_ PVOID HwDeviceExtension, 2692 _In_ PUCHAR Register); 2693 2694 STORPORT_API 2695 ULONG 2696 NTAPI 2697 StorPortReadRegisterUlong( 2698 _In_ PVOID HwDeviceExtension, 2699 _In_ PULONG Register); 2700 2701 STORPORT_API 2702 USHORT 2703 NTAPI 2704 StorPortReadRegisterUshort( 2705 _In_ PVOID HwDeviceExtension, 2706 _In_ PUSHORT Register); 2707 2708 STORPORT_API 2709 BOOLEAN 2710 NTAPI 2711 StorPortReady( 2712 _In_ PVOID HwDeviceExtension); 2713 2714 STORPORT_API 2715 BOOLEAN 2716 NTAPI 2717 StorPortRegistryRead( 2718 _In_ PVOID HwDeviceExtension, 2719 _In_ PUCHAR ValueName, 2720 _In_ ULONG Global, 2721 _In_ ULONG Type, 2722 _In_ PUCHAR Buffer, 2723 _In_ PULONG BufferLength); 2724 2725 STORPORT_API 2726 BOOLEAN 2727 NTAPI 2728 StorPortRegistryWrite( 2729 _In_ PVOID HwDeviceExtension, 2730 _In_ PUCHAR ValueName, 2731 _In_ ULONG Global, 2732 _In_ ULONG Type, 2733 _In_ PUCHAR Buffer, 2734 _In_ ULONG BufferLength); 2735 2736 STORPORT_API 2737 BOOLEAN 2738 NTAPI 2739 StorPortResume( 2740 _In_ PVOID HwDeviceExtension); 2741 2742 STORPORT_API 2743 BOOLEAN 2744 NTAPI 2745 StorPortResumeDevice( 2746 _In_ PVOID HwDeviceExtension, 2747 _In_ UCHAR PathId, 2748 _In_ UCHAR TargetId, 2749 _In_ UCHAR Lun); 2750 2751 STORPORT_API 2752 ULONG 2753 NTAPI 2754 StorPortSetBusDataByOffset( 2755 _In_ PVOID DeviceExtension, 2756 _In_ ULONG BusDataType, 2757 _In_ ULONG SystemIoBusNumber, 2758 _In_ ULONG SlotNumber, 2759 _In_reads_bytes_(Length) PVOID Buffer, 2760 _In_ ULONG Offset, 2761 _In_ ULONG Length); 2762 2763 STORPORT_API 2764 BOOLEAN 2765 NTAPI 2766 StorPortSetDeviceQueueDepth( 2767 _In_ PVOID HwDeviceExtension, 2768 _In_ UCHAR PathId, 2769 _In_ UCHAR TargetId, 2770 _In_ UCHAR Lun, 2771 _In_ ULONG Depth); 2772 2773 STORPORT_API 2774 VOID 2775 NTAPI 2776 StorPortStallExecution( 2777 _In_ ULONG Delay); 2778 2779 STORPORT_API 2780 VOID 2781 NTAPI 2782 StorPortSynchronizeAccess( 2783 _In_ PVOID HwDeviceExtension, 2784 _In_ PSTOR_SYNCHRONIZED_ACCESS SynchronizedAccessRoutine, 2785 _In_opt_ PVOID Context); 2786 2787 STORPORT_API 2788 BOOLEAN 2789 NTAPI 2790 StorPortValidateRange( 2791 _In_ PVOID HwDeviceExtension, 2792 _In_ INTERFACE_TYPE BusType, 2793 _In_ ULONG SystemIoBusNumber, 2794 _In_ STOR_PHYSICAL_ADDRESS IoAddress, 2795 _In_ ULONG NumberOfBytes, 2796 _In_ BOOLEAN InIoSpace); 2797 2798 STORPORT_API 2799 VOID 2800 NTAPI 2801 StorPortWritePortBufferUchar( 2802 _In_ PVOID HwDeviceExtension, 2803 _In_ PUCHAR Port, 2804 _In_ PUCHAR Buffer, 2805 _In_ ULONG Count); 2806 2807 STORPORT_API 2808 VOID 2809 NTAPI 2810 StorPortWritePortBufferUlong( 2811 _In_ PVOID HwDeviceExtension, 2812 _In_ PULONG Port, 2813 _In_ PULONG Buffer, 2814 _In_ ULONG Count); 2815 2816 STORPORT_API 2817 VOID 2818 NTAPI 2819 StorPortWritePortBufferUshort( 2820 _In_ PVOID HwDeviceExtension, 2821 _In_ PUSHORT Port, 2822 _In_ PUSHORT Buffer, 2823 _In_ ULONG Count); 2824 2825 STORPORT_API 2826 VOID 2827 NTAPI 2828 StorPortWritePortUchar( 2829 _In_ PVOID HwDeviceExtension, 2830 _In_ PUCHAR Port, 2831 _In_ UCHAR Value); 2832 2833 STORPORT_API 2834 VOID 2835 NTAPI 2836 StorPortWritePortUlong( 2837 _In_ PVOID HwDeviceExtension, 2838 _In_ PULONG Port, 2839 _In_ ULONG Value); 2840 2841 STORPORT_API 2842 VOID 2843 NTAPI 2844 StorPortWritePortUshort( 2845 _In_ PVOID HwDeviceExtension, 2846 _In_ PUSHORT Port, 2847 _In_ USHORT Value); 2848 2849 STORPORT_API 2850 VOID 2851 NTAPI 2852 StorPortWriteRegisterBufferUchar( 2853 _In_ PVOID HwDeviceExtension, 2854 _In_ PUCHAR Register, 2855 _In_ PUCHAR Buffer, 2856 _In_ ULONG Count); 2857 2858 STORPORT_API 2859 VOID 2860 NTAPI 2861 StorPortWriteRegisterBufferUlong( 2862 _In_ PVOID HwDeviceExtension, 2863 _In_ PULONG Register, 2864 _In_ PULONG Buffer, 2865 _In_ ULONG Count); 2866 2867 STORPORT_API 2868 VOID 2869 NTAPI 2870 StorPortWriteRegisterBufferUshort( 2871 _In_ PVOID HwDeviceExtension, 2872 _In_ PUSHORT Register, 2873 _In_ PUSHORT Buffer, 2874 _In_ ULONG Count); 2875 2876 STORPORT_API 2877 VOID 2878 NTAPI 2879 StorPortWriteRegisterUchar( 2880 _In_ PVOID HwDeviceExtension, 2881 _In_ PUCHAR Register, 2882 _In_ UCHAR Value); 2883 2884 STORPORT_API 2885 VOID 2886 NTAPI 2887 StorPortWriteRegisterUlong( 2888 _In_ PVOID HwDeviceExtension, 2889 _In_ PULONG Register, 2890 _In_ ULONG Value); 2891 2892 STORPORT_API 2893 VOID 2894 NTAPI 2895 StorPortWriteRegisterUshort( 2896 _In_ PVOID HwDeviceExtension, 2897 _In_ PUSHORT Register, 2898 _In_ USHORT Value); 2899 2900 2901 FORCEINLINE 2902 BOOLEAN 2903 StorPortEnablePassiveInitialization( 2904 _In_ PVOID DeviceExtension, 2905 _In_ PHW_PASSIVE_INITIALIZE_ROUTINE HwPassiveInitializeRoutine) 2906 { 2907 LONG Succ; 2908 Succ = FALSE; 2909 StorPortNotification(EnablePassiveInitialization, 2910 DeviceExtension, 2911 HwPassiveInitializeRoutine, 2912 &Succ); 2913 return (BOOLEAN)Succ; 2914 } 2915 2916 FORCEINLINE 2917 VOID 2918 StorPortInitializeDpc( 2919 _In_ PVOID DeviceExtension, 2920 _Out_ PSTOR_DPC Dpc, 2921 _In_ PHW_DPC_ROUTINE HwDpcRoutine) 2922 { 2923 StorPortNotification(InitializeDpc, 2924 DeviceExtension, 2925 Dpc, 2926 HwDpcRoutine); 2927 } 2928 2929 FORCEINLINE 2930 BOOLEAN 2931 StorPortIssueDpc( 2932 _In_ PVOID DeviceExtension, 2933 _In_ PSTOR_DPC Dpc, 2934 _In_ PVOID SystemArgument1, 2935 _In_ PVOID SystemArgument2) 2936 { 2937 LONG Succ; 2938 Succ = FALSE; 2939 StorPortNotification(IssueDpc, 2940 DeviceExtension, 2941 Dpc, 2942 SystemArgument1, 2943 SystemArgument2, 2944 &Succ); 2945 return (BOOLEAN)Succ; 2946 } 2947 2948 FORCEINLINE 2949 VOID 2950 StorPortAcquireSpinLock( 2951 _In_ PVOID DeviceExtension, 2952 _In_ STOR_SPINLOCK SpinLock, 2953 _In_ PVOID LockContext, 2954 _Inout_ PSTOR_LOCK_HANDLE LockHandle) 2955 { 2956 StorPortNotification(AcquireSpinLock, 2957 DeviceExtension, 2958 SpinLock, 2959 LockContext, 2960 LockHandle); 2961 } 2962 2963 FORCEINLINE 2964 VOID 2965 StorPortReleaseSpinLock( 2966 _In_ PVOID DeviceExtension, 2967 _Inout_ PSTOR_LOCK_HANDLE LockHandle) 2968 { 2969 StorPortNotification(ReleaseSpinLock, 2970 DeviceExtension, 2971 LockHandle); 2972 } 2973 2974 STORPORT_API 2975 ULONG 2976 StorPortExtendedFunction( 2977 _In_ STORPORT_FUNCTION_CODE FunctionCode, 2978 _In_ PVOID HwDeviceExtension, 2979 ...); 2980 2981 FORCEINLINE 2982 ULONG 2983 StorPortAllocatePool( 2984 _In_ PVOID HwDeviceExtension, 2985 _In_ ULONG NumberOfBytes, 2986 _In_ ULONG Tag, 2987 _Out_ PVOID *BufferPointer 2988 ) 2989 { 2990 return StorPortExtendedFunction(ExtFunctionAllocatePool, 2991 HwDeviceExtension, 2992 NumberOfBytes, 2993 Tag, 2994 BufferPointer); 2995 } 2996 2997 FORCEINLINE 2998 ULONG 2999 StorPortFreePool( 3000 _In_ PVOID HwDeviceExtension, 3001 _In_ PVOID BufferPointer) 3002 { 3003 return StorPortExtendedFunction(ExtFunctionFreePool, 3004 HwDeviceExtension, 3005 BufferPointer); 3006 } 3007 3008 FORCEINLINE 3009 ULONG 3010 StorPortAllocateMdl( 3011 _In_ PVOID HwDeviceExtension, 3012 _In_ PVOID BufferPointer, 3013 _In_ ULONG NumberOfBytes, 3014 _Out_ PVOID *Mdl) 3015 { 3016 return StorPortExtendedFunction(ExtFunctionAllocateMdl, 3017 HwDeviceExtension, 3018 BufferPointer, 3019 NumberOfBytes, 3020 Mdl); 3021 } 3022 3023 FORCEINLINE 3024 ULONG 3025 StorPortFreeMdl( 3026 _In_ PVOID HwDeviceExtension, 3027 _In_ PVOID Mdl) 3028 { 3029 return StorPortExtendedFunction(ExtFunctionFreeMdl, 3030 HwDeviceExtension, 3031 Mdl); 3032 } 3033 3034 FORCEINLINE 3035 ULONG 3036 StorPortBuildMdlForNonPagedPool( 3037 _In_ PVOID HwDeviceExtension, 3038 _Inout_ PVOID Mdl) 3039 { 3040 return StorPortExtendedFunction(ExtFunctionBuildMdlForNonPagedPool, 3041 HwDeviceExtension, 3042 Mdl); 3043 } 3044 3045 FORCEINLINE 3046 ULONG 3047 StorPortGetSystemAddress( 3048 _In_ PVOID HwDeviceExtension, 3049 _In_ PSCSI_REQUEST_BLOCK Srb, 3050 _Out_ PVOID *SystemAddress) 3051 { 3052 return StorPortExtendedFunction(ExtFunctionGetSystemAddress, 3053 HwDeviceExtension, 3054 Srb, 3055 SystemAddress); 3056 } 3057 3058 FORCEINLINE 3059 ULONG 3060 StorPortGetOriginalMdl( 3061 _In_ PVOID HwDeviceExtension, 3062 _In_ PSCSI_REQUEST_BLOCK Srb, 3063 _Out_ PVOID *Mdl) 3064 { 3065 return StorPortExtendedFunction(ExtFunctionGetOriginalMdl, 3066 HwDeviceExtension, 3067 Srb, 3068 Mdl); 3069 } 3070 3071 FORCEINLINE 3072 ULONG 3073 StorPortCompleteServiceIrp( 3074 _In_ PVOID HwDeviceExtension, 3075 _In_ PVOID Irp) 3076 { 3077 return StorPortExtendedFunction(ExtFunctionCompleteServiceIrp, 3078 HwDeviceExtension, 3079 Irp); 3080 } 3081 3082 FORCEINLINE 3083 ULONG 3084 StorPortGetDeviceObjects( 3085 _In_ PVOID HwDeviceExtension, 3086 _Out_ PVOID *AdapterDeviceObject, 3087 _Out_ PVOID *PhysicalDeviceObject, 3088 _Out_ PVOID *LowerDeviceObject) 3089 { 3090 return StorPortExtendedFunction(ExtFunctionGetDeviceObjects, 3091 HwDeviceExtension, 3092 AdapterDeviceObject, 3093 PhysicalDeviceObject, 3094 LowerDeviceObject); 3095 } 3096 3097 FORCEINLINE 3098 ULONG 3099 StorPortBuildScatterGatherList( 3100 _In_ PVOID HwDeviceExtension, 3101 _In_ PVOID Mdl, 3102 _In_ PVOID CurrentVa, 3103 _In_ ULONG Length, 3104 _In_ PpostScaterGatherExecute ExecutionRoutine, 3105 _In_ PVOID Context, 3106 _In_ BOOLEAN WriteToDevice, 3107 _Inout_ PVOID ScatterGatherBuffer, 3108 _In_ ULONG ScatterGatherBufferLength) 3109 { 3110 return StorPortExtendedFunction(ExtFunctionBuildScatterGatherList, 3111 HwDeviceExtension, 3112 Mdl, 3113 CurrentVa, 3114 Length, 3115 ExecutionRoutine, 3116 Context, 3117 WriteToDevice, 3118 ScatterGatherBuffer, 3119 ScatterGatherBufferLength); 3120 } 3121 3122 FORCEINLINE 3123 ULONG 3124 StorPortPutScatterGatherList( 3125 _In_ PVOID HwDeviceExtension, 3126 _In_ PSTOR_SCATTER_GATHER_LIST ScatterGatherList, 3127 _In_ BOOLEAN WriteToDevice) 3128 { 3129 return StorPortExtendedFunction(ExtFunctionPutScatterGatherList, 3130 HwDeviceExtension, 3131 ScatterGatherList, 3132 WriteToDevice); 3133 } 3134 3135 FORCEINLINE 3136 ULONG 3137 StorPortAcquireMSISpinLock( 3138 _In_ PVOID HwDeviceExtension, 3139 _In_ ULONG MessageId, 3140 _In_ PULONG OldIrql) 3141 { 3142 return StorPortExtendedFunction(ExtFunctionAcquireMSISpinLock, 3143 HwDeviceExtension, 3144 MessageId, 3145 OldIrql); 3146 } 3147 3148 FORCEINLINE 3149 ULONG 3150 StorPortReleaseMSISpinLock( 3151 _In_ PVOID HwDeviceExtension, 3152 _In_ ULONG MessageId, 3153 _In_ ULONG OldIrql) 3154 { 3155 return StorPortExtendedFunction(ExtFunctionReleaseMSISpinLock, 3156 HwDeviceExtension, 3157 MessageId, 3158 OldIrql); 3159 } 3160 3161 FORCEINLINE 3162 ULONG 3163 StorPortGetMSIInfo( 3164 _In_ PVOID HwDeviceExtension, 3165 _In_ ULONG MessageId, 3166 _Out_ PMESSAGE_INTERRUPT_INFORMATION InterruptInfo) 3167 { 3168 return StorPortExtendedFunction(ExtFunctionGetMessageInterruptInformation, 3169 HwDeviceExtension, 3170 MessageId, 3171 InterruptInfo); 3172 } 3173 3174 FORCEINLINE 3175 ULONG 3176 StorPortInitializePerfOpts( 3177 _In_ PVOID HwDeviceExtension, 3178 _In_ BOOLEAN Query, 3179 _Inout_ PPERF_CONFIGURATION_DATA PerfConfigData) 3180 { 3181 return StorPortExtendedFunction(ExtFunctionInitializePerformanceOptimizations, 3182 HwDeviceExtension, 3183 Query, 3184 PerfConfigData); 3185 } 3186 3187 FORCEINLINE 3188 ULONG 3189 StorPortGetStartIoPerfParams( 3190 _In_ PVOID HwDeviceExtension, 3191 _In_ PSCSI_REQUEST_BLOCK Srb, 3192 _Inout_ PSTARTIO_PERFORMANCE_PARAMETERS StartIoPerfParams) 3193 { 3194 return StorPortExtendedFunction(ExtFunctionGetStartIoPerformanceParameters, 3195 HwDeviceExtension, 3196 Srb, 3197 StartIoPerfParams); 3198 } 3199 3200 FORCEINLINE 3201 ULONG 3202 StorPortLogSystemEvent( 3203 _In_ PVOID HwDeviceExtension, 3204 _Inout_ PSTOR_LOG_EVENT_DETAILS LogDetails, 3205 _Inout_ PULONG MaximumSize) 3206 { 3207 return StorPortExtendedFunction(ExtFunctionLogSystemEvent, 3208 HwDeviceExtension, 3209 LogDetails, 3210 MaximumSize); 3211 } 3212 3213 #if DBG 3214 #define DebugPrint(x) StorPortDebugPrint x 3215 #else 3216 #define DebugPrint(x) 3217 #endif 3218 3219 #ifdef __cplusplus 3220 } 3221 #endif 3222 3223 #endif /* _NTSTORPORT_ */ 3224