6 * This file is part of the w32api package.
9 * Created by Casper S. Hornstrup <chorns@users.sourceforge.net>
11 * THIS SOFTWARE IS NOT COPYRIGHTED
13 * This source code is offered for use in the public domain. You may
14 * use, modify or distribute it freely.
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.
30 #if defined(_STORPORT_)
33 #define STORPORT_API DECLSPEC_IMPORT
36 #define DIRECT_ACCESS_DEVICE 0x00
37 #define SEQUENTIAL_ACCESS_DEVICE 0x01
38 #define PRINTER_DEVICE 0x02
39 #define PROCESSOR_DEVICE 0x03
40 #define WRITE_ONCE_READ_MULTIPLE_DEVICE 0x04
41 #define READ_ONLY_DIRECT_ACCESS_DEVICE 0x05
42 #define SCANNER_DEVICE 0x06
43 #define OPTICAL_DEVICE 0x07
44 #define MEDIUM_CHANGER 0x08
45 #define COMMUNICATION_DEVICE 0x09
46 #define ARRAY_CONTROLLER_DEVICE 0x0C
47 #define SCSI_ENCLOSURE_DEVICE 0x0D
48 #define REDUCED_BLOCK_DEVICE 0x0E
49 #define OPTICAL_CARD_READER_WRITER_DEVICE 0x0F
50 #define BRIDGE_CONTROLLER_DEVICE 0x10
51 #define OBJECT_BASED_STORAGE_DEVICE 0x11
52 #define LOGICAL_UNIT_NOT_PRESENT_DEVICE 0x7F
54 #define DEVICE_CONNECTED 0x00
56 #define CDB6GENERIC_LENGTH 6
57 #define CDB10GENERIC_LENGTH 10
58 #define CDB12GENERIC_LENGTH 12
60 #define INQUIRYDATABUFFERSIZE 36
61 #define SENSE_BUFFER_SIZE 18
62 #define MAX_SENSE_BUFFER_SIZE 255
64 #define FILE_DEVICE_SCSI 0x0000001b
65 #define IOCTL_SCSI_EXECUTE_IN ((FILE_DEVICE_SCSI << 16) + 0x0011)
66 #define IOCTL_SCSI_EXECUTE_OUT ((FILE_DEVICE_SCSI << 16) + 0x0012)
67 #define IOCTL_SCSI_EXECUTE_NONE ((FILE_DEVICE_SCSI << 16) + 0x0013)
69 #define MODE_PAGE_VENDOR_SPECIFIC 0x00
70 #define MODE_PAGE_ERROR_RECOVERY 0x01
71 #define MODE_PAGE_DISCONNECT 0x02
72 #define MODE_PAGE_FORMAT_DEVICE 0x03
73 #define MODE_PAGE_MRW 0x03
74 #define MODE_PAGE_RIGID_GEOMETRY 0x04
75 #define MODE_PAGE_FLEXIBILE 0x05
76 #define MODE_PAGE_WRITE_PARAMETERS 0x05
77 #define MODE_PAGE_VERIFY_ERROR 0x07
78 #define MODE_PAGE_CACHING 0x08
79 #define MODE_PAGE_PERIPHERAL 0x09
80 #define MODE_PAGE_CONTROL 0x0A
81 #define MODE_PAGE_MEDIUM_TYPES 0x0B
82 #define MODE_PAGE_NOTCH_PARTITION 0x0C
83 #define MODE_PAGE_CD_AUDIO_CONTROL 0x0E
84 #define MODE_PAGE_DATA_COMPRESS 0x0F
85 #define MODE_PAGE_DEVICE_CONFIG 0x10
86 #define MODE_PAGE_XOR_CONTROL 0x10
87 #define MODE_PAGE_MEDIUM_PARTITION 0x11
88 #define MODE_PAGE_ENCLOSURE_SERVICES_MANAGEMENT 0x14
89 #define MODE_PAGE_EXTENDED 0x15
90 #define MODE_PAGE_EXTENDED_DEVICE_SPECIFIC 0x16
91 #define MODE_PAGE_CDVD_FEATURE_SET 0x18
92 #define MODE_PAGE_PROTOCOL_SPECIFIC_LUN 0x18
93 #define MODE_PAGE_PROTOCOL_SPECIFIC_PORT 0x19
94 #define MODE_PAGE_POWER_CONDITION 0x1A
95 #define MODE_PAGE_LUN_MAPPING 0x1B
96 #define MODE_PAGE_FAULT_REPORTING 0x1C
97 #define MODE_PAGE_CDVD_INACTIVITY 0x1D
98 #define MODE_PAGE_ELEMENT_ADDRESS 0x1D
99 #define MODE_PAGE_TRANSPORT_GEOMETRY 0x1E
100 #define MODE_PAGE_DEVICE_CAPABILITIES 0x1F
101 #define MODE_PAGE_CAPABILITIES 0x2A
102 #define MODE_SENSE_RETURN_ALL 0x3F
104 #define MODE_SENSE_CURRENT_VALUES 0x00
105 #define MODE_SENSE_CHANGEABLE_VALUES 0x40
106 #define MODE_SENSE_DEFAULT_VAULES 0x80
107 #define MODE_SENSE_SAVED_VALUES 0xc0
109 #define SCSIOP_TEST_UNIT_READY 0x00
110 #define SCSIOP_REZERO_UNIT 0x01
111 #define SCSIOP_REWIND 0x01
112 #define SCSIOP_REQUEST_BLOCK_ADDR 0x02
113 #define SCSIOP_REQUEST_SENSE 0x03
114 #define SCSIOP_FORMAT_UNIT 0x04
115 #define SCSIOP_READ_BLOCK_LIMITS 0x05
116 #define SCSIOP_REASSIGN_BLOCKS 0x07
117 #define SCSIOP_INIT_ELEMENT_STATUS 0x07
118 #define SCSIOP_READ6 0x08
119 #define SCSIOP_RECEIVE 0x08
120 #define SCSIOP_WRITE6 0x0A
121 #define SCSIOP_PRINT 0x0A
122 #define SCSIOP_SEND 0x0A
123 #define SCSIOP_SEEK6 0x0B
124 #define SCSIOP_TRACK_SELECT 0x0B
125 #define SCSIOP_SLEW_PRINT 0x0B
126 #define SCSIOP_SET_CAPACITY 0x0B
127 #define SCSIOP_SEEK_BLOCK 0x0C
128 #define SCSIOP_PARTITION 0x0D
129 #define SCSIOP_READ_REVERSE 0x0F
130 #define SCSIOP_WRITE_FILEMARKS 0x10
131 #define SCSIOP_FLUSH_BUFFER 0x10
132 #define SCSIOP_SPACE 0x11
133 #define SCSIOP_INQUIRY 0x12
134 #define SCSIOP_VERIFY6 0x13
135 #define SCSIOP_RECOVER_BUF_DATA 0x14
136 #define SCSIOP_MODE_SELECT 0x15
137 #define SCSIOP_RESERVE_UNIT 0x16
138 #define SCSIOP_RELEASE_UNIT 0x17
139 #define SCSIOP_COPY 0x18
140 #define SCSIOP_ERASE 0x19
141 #define SCSIOP_MODE_SENSE 0x1A
142 #define SCSIOP_START_STOP_UNIT 0x1B
143 #define SCSIOP_STOP_PRINT 0x1B
144 #define SCSIOP_LOAD_UNLOAD 0x1B
145 #define SCSIOP_RECEIVE_DIAGNOSTIC 0x1C
146 #define SCSIOP_SEND_DIAGNOSTIC 0x1D
147 #define SCSIOP_MEDIUM_REMOVAL 0x1E
148 #define SCSIOP_READ_FORMATTED_CAPACITY 0x23
149 #define SCSIOP_READ_CAPACITY 0x25
150 #define SCSIOP_READ 0x28
151 #define SCSIOP_WRITE 0x2A
152 #define SCSIOP_SEEK 0x2B
153 #define SCSIOP_LOCATE 0x2B
154 #define SCSIOP_POSITION_TO_ELEMENT 0x2B
155 #define SCSIOP_WRITE_VERIFY 0x2E
156 #define SCSIOP_VERIFY 0x2F
157 #define SCSIOP_SEARCH_DATA_HIGH 0x30
158 #define SCSIOP_SEARCH_DATA_EQUAL 0x31
159 #define SCSIOP_SEARCH_DATA_LOW 0x32
160 #define SCSIOP_SET_LIMITS 0x33
161 #define SCSIOP_READ_POSITION 0x34
162 #define SCSIOP_SYNCHRONIZE_CACHE 0x35
163 #define SCSIOP_COMPARE 0x39
164 #define SCSIOP_COPY_COMPARE 0x3A
165 #define SCSIOP_WRITE_DATA_BUFF 0x3B
166 #define SCSIOP_READ_DATA_BUFF 0x3C
167 #define SCSIOP_WRITE_LONG 0x3F
168 #define SCSIOP_CHANGE_DEFINITION 0x40
169 #define SCSIOP_WRITE_SAME 0x41
170 #define SCSIOP_READ_SUB_CHANNEL 0x42
171 #define SCSIOP_READ_TOC 0x43
172 #define SCSIOP_READ_HEADER 0x44
173 #define SCSIOP_REPORT_DENSITY_SUPPORT 0x44
174 #define SCSIOP_PLAY_AUDIO 0x45
175 #define SCSIOP_GET_CONFIGURATION 0x46
176 #define SCSIOP_PLAY_AUDIO_MSF 0x47
177 #define SCSIOP_PLAY_TRACK_INDEX 0x48
178 #define SCSIOP_PLAY_TRACK_RELATIVE 0x49
179 #define SCSIOP_GET_EVENT_STATUS 0x4A
180 #define SCSIOP_PAUSE_RESUME 0x4B
181 #define SCSIOP_LOG_SELECT 0x4C
182 #define SCSIOP_LOG_SENSE 0x4D
183 #define SCSIOP_STOP_PLAY_SCAN 0x4E
184 #define SCSIOP_XDWRITE 0x50
185 #define SCSIOP_XPWRITE 0x51
186 #define SCSIOP_READ_DISK_INFORMATION 0x51
187 #define SCSIOP_READ_DISC_INFORMATION 0x51
188 #define SCSIOP_READ_TRACK_INFORMATION 0x52
189 #define SCSIOP_XDWRITE_READ 0x53
190 #define SCSIOP_RESERVE_TRACK_RZONE 0x53
191 #define SCSIOP_SEND_OPC_INFORMATION 0x54
192 #define SCSIOP_MODE_SELECT10 0x55
193 #define SCSIOP_RESERVE_UNIT10 0x56
194 #define SCSIOP_RESERVE_ELEMENT 0x56
195 #define SCSIOP_RELEASE_UNIT10 0x57
196 #define SCSIOP_RELEASE_ELEMENT 0x57
197 #define SCSIOP_REPAIR_TRACK 0x58
198 #define SCSIOP_MODE_SENSE10 0x5A
199 #define SCSIOP_CLOSE_TRACK_SESSION 0x5B
200 #define SCSIOP_READ_BUFFER_CAPACITY 0x5C
201 #define SCSIOP_SEND_CUE_SHEET 0x5D
202 #define SCSIOP_PERSISTENT_RESERVE_IN 0x5E
203 #define SCSIOP_PERSISTENT_RESERVE_OUT 0x5F
204 #define SCSIOP_XDWRITE_EXTENDED16 0x80
205 #define SCSIOP_WRITE_FILEMARKS16 0x80
206 #define SCSIOP_REBUILD16 0x81
207 #define SCSIOP_READ_REVERSE16 0x81
208 #define SCSIOP_REGENERATE16 0x82
209 #define SCSIOP_EXTENDED_COPY 0x83
210 #define SCSIOP_RECEIVE_COPY_RESULTS 0x84
211 #define SCSIOP_ATA_PASSTHROUGH16 0x85
212 #define SCSIOP_ACCESS_CONTROL_IN 0x86
213 #define SCSIOP_ACCESS_CONTROL_OUT 0x87
214 #define SCSIOP_READ16 0x88
215 #define SCSIOP_WRITE16 0x8A
216 #define SCSIOP_READ_ATTRIBUTES 0x8C
217 #define SCSIOP_WRITE_ATTRIBUTES 0x8D
218 #define SCSIOP_WRITE_VERIFY16 0x8E
219 #define SCSIOP_VERIFY16 0x8F
220 #define SCSIOP_PREFETCH16 0x90
221 #define SCSIOP_SYNCHRONIZE_CACHE16 0x91
222 #define SCSIOP_SPACE16 0x91
223 #define SCSIOP_LOCK_UNLOCK_CACHE16 0x92
224 #define SCSIOP_LOCATE16 0x92
225 #define SCSIOP_WRITE_SAME16 0x93
226 #define SCSIOP_ERASE16 0x93
227 #define SCSIOP_READ_CAPACITY16 0x9E
228 #define SCSIOP_SERVICE_ACTION_IN16 0x9E
229 #define SCSIOP_SERVICE_ACTION_OUT16 0x9F
230 #define SCSIOP_REPORT_LUNS 0xA0
231 #define SCSIOP_BLANK 0xA1
232 #define SCSIOP_ATA_PASSTHROUGH12 0xA1
233 #define SCSIOP_SEND_EVENT 0xA2
234 #define SCSIOP_SEND_KEY 0xA3
235 #define SCSIOP_MAINTENANCE_IN 0xA3
236 #define SCSIOP_REPORT_KEY 0xA4
237 #define SCSIOP_MAINTENANCE_OUT 0xA4
238 #define SCSIOP_MOVE_MEDIUM 0xA5
239 #define SCSIOP_LOAD_UNLOAD_SLOT 0xA6
240 #define SCSIOP_EXCHANGE_MEDIUM 0xA6
241 #define SCSIOP_SET_READ_AHEAD 0xA7
242 #define SCSIOP_MOVE_MEDIUM_ATTACHED 0xA7
243 #define SCSIOP_READ12 0xA8
244 #define SCSIOP_GET_MESSAGE 0xA8
245 #define SCSIOP_SERVICE_ACTION_OUT12 0xA9
246 #define SCSIOP_WRITE12 0xAA
247 #define SCSIOP_SEND_MESSAGE 0xAB
248 #define SCSIOP_SERVICE_ACTION_IN12 0xAB
249 #define SCSIOP_GET_PERFORMANCE 0xAC
250 #define SCSIOP_READ_DVD_STRUCTURE 0xAD
251 #define SCSIOP_WRITE_VERIFY12 0xAE
252 #define SCSIOP_VERIFY12 0xAF
253 #define SCSIOP_SEARCH_DATA_HIGH12 0xB0
254 #define SCSIOP_SEARCH_DATA_EQUAL12 0xB1
255 #define SCSIOP_SEARCH_DATA_LOW12 0xB2
256 #define SCSIOP_SET_LIMITS12 0xB3
257 #define SCSIOP_READ_ELEMENT_STATUS_ATTACHED 0xB4
258 #define SCSIOP_REQUEST_VOL_ELEMENT 0xB5
259 #define SCSIOP_SEND_VOLUME_TAG 0xB6
260 #define SCSIOP_SET_STREAMING 0xB6
261 #define SCSIOP_READ_DEFECT_DATA 0xB7
262 #define SCSIOP_READ_ELEMENT_STATUS 0xB8
263 #define SCSIOP_READ_CD_MSF 0xB9
264 #define SCSIOP_SCAN_CD 0xBA
265 #define SCSIOP_REDUNDANCY_GROUP_IN 0xBA
266 #define SCSIOP_SET_CD_SPEED 0xBB
267 #define SCSIOP_REDUNDANCY_GROUP_OUT 0xBB
268 #define SCSIOP_PLAY_CD 0xBC
269 #define SCSIOP_SPARE_IN 0xBC
270 #define SCSIOP_MECHANISM_STATUS 0xBD
271 #define SCSIOP_SPARE_OUT 0xBD
272 #define SCSIOP_READ_CD 0xBE
273 #define SCSIOP_VOLUME_SET_IN 0xBE
274 #define SCSIOP_SEND_DVD_STRUCTURE 0xBF
275 #define SCSIOP_VOLUME_SET_OUT 0xBF
276 #define SCSIOP_INIT_ELEMENT_RANGE 0xE7
278 #define SCSISTAT_GOOD 0x00
279 #define SCSISTAT_CHECK_CONDITION 0x02
280 #define SCSISTAT_CONDITION_MET 0x04
281 #define SCSISTAT_BUSY 0x08
282 #define SCSISTAT_INTERMEDIATE 0x10
283 #define SCSISTAT_INTERMEDIATE_COND_MET 0x14
284 #define SCSISTAT_RESERVATION_CONFLICT 0x18
285 #define SCSISTAT_COMMAND_TERMINATED 0x22
286 #define SCSISTAT_QUEUE_FULL 0x28
291 #define SP_RETURN_NOT_FOUND 0
292 #define SP_RETURN_FOUND 1
293 #define SP_RETURN_ERROR 2
294 #define SP_RETURN_BAD_CONFIG 3
296 #define SRB_FUNCTION_EXECUTE_SCSI 0x00
297 #define SRB_FUNCTION_CLAIM_DEVICE 0x01
298 #define SRB_FUNCTION_IO_CONTROL 0x02
299 #define SRB_FUNCTION_RECEIVE_EVENT 0x03
300 #define SRB_FUNCTION_RELEASE_QUEUE 0x04
301 #define SRB_FUNCTION_ATTACH_DEVICE 0x05
302 #define SRB_FUNCTION_RELEASE_DEVICE 0x06
303 #define SRB_FUNCTION_SHUTDOWN 0x07
304 #define SRB_FUNCTION_FLUSH 0x08
305 #define SRB_FUNCTION_ABORT_COMMAND 0x10
306 #define SRB_FUNCTION_RELEASE_RECOVERY 0x11
307 #define SRB_FUNCTION_RESET_BUS 0x12
308 #define SRB_FUNCTION_RESET_DEVICE 0x13
309 #define SRB_FUNCTION_TERMINATE_IO 0x14
310 #define SRB_FUNCTION_FLUSH_QUEUE 0x15
311 #define SRB_FUNCTION_REMOVE_DEVICE 0x16
312 #define SRB_FUNCTION_WMI 0x17
313 #define SRB_FUNCTION_LOCK_QUEUE 0x18
314 #define SRB_FUNCTION_UNLOCK_QUEUE 0x19
315 #define SRB_FUNCTION_RESET_LOGICAL_UNIT 0x20
316 #define SRB_FUNCTION_SET_LINK_TIMEOUT 0x21
317 #define SRB_FUNCTION_LINK_TIMEOUT_OCCURRED 0x22
318 #define SRB_FUNCTION_LINK_TIMEOUT_COMPLETE 0x23
319 #define SRB_FUNCTION_POWER 0x24
320 #define SRB_FUNCTION_PNP 0x25
321 #define SRB_FUNCTION_DUMP_POINTERS 0x26
323 #define SRB_STATUS_PENDING 0x00
324 #define SRB_STATUS_SUCCESS 0x01
325 #define SRB_STATUS_ABORTED 0x02
326 #define SRB_STATUS_ABORT_FAILED 0x03
327 #define SRB_STATUS_ERROR 0x04
328 #define SRB_STATUS_BUSY 0x05
329 #define SRB_STATUS_INVALID_REQUEST 0x06
330 #define SRB_STATUS_INVALID_PATH_ID 0x07
331 #define SRB_STATUS_NO_DEVICE 0x08
332 #define SRB_STATUS_TIMEOUT 0x09
333 #define SRB_STATUS_SELECTION_TIMEOUT 0x0A
334 #define SRB_STATUS_COMMAND_TIMEOUT 0x0B
335 #define SRB_STATUS_MESSAGE_REJECTED 0x0D
336 #define SRB_STATUS_BUS_RESET 0x0E
337 #define SRB_STATUS_PARITY_ERROR 0x0F
338 #define SRB_STATUS_REQUEST_SENSE_FAILED 0x10
339 #define SRB_STATUS_NO_HBA 0x11
340 #define SRB_STATUS_DATA_OVERRUN 0x12
341 #define SRB_STATUS_UNEXPECTED_BUS_FREE 0x13
342 #define SRB_STATUS_PHASE_SEQUENCE_FAILURE 0x14
343 #define SRB_STATUS_BAD_SRB_BLOCK_LENGTH 0x15
344 #define SRB_STATUS_REQUEST_FLUSHED 0x16
345 #define SRB_STATUS_INVALID_LUN 0x20
346 #define SRB_STATUS_INVALID_TARGET_ID 0x21
347 #define SRB_STATUS_BAD_FUNCTION 0x22
348 #define SRB_STATUS_ERROR_RECOVERY 0x23
349 #define SRB_STATUS_NOT_POWERED 0x24
350 #define SRB_STATUS_LINK_DOWN 0x25
351 #define SRB_STATUS_INTERNAL_ERROR 0x30
352 #define SRB_STATUS_QUEUE_FROZEN 0x40
353 #define SRB_STATUS_AUTOSENSE_VALID 0x80
354 #define SRB_STATUS(Status) (Status & ~(SRB_STATUS_AUTOSENSE_VALID | SRB_STATUS_QUEUE_FROZEN))
356 #define SRB_FLAGS_QUEUE_ACTION_ENABLE 0x00000002
357 #define SRB_FLAGS_DISABLE_DISCONNECT 0x00000004
358 #define SRB_FLAGS_DISABLE_SYNCH_TRANSFER 0x00000008
360 #define SRB_FLAGS_BYPASS_FROZEN_QUEUE 0x00000010
361 #define SRB_FLAGS_DISABLE_AUTOSENSE 0x00000020
362 #define SRB_FLAGS_DATA_IN 0x00000040
363 #define SRB_FLAGS_DATA_OUT 0x00000080
364 #define SRB_FLAGS_NO_DATA_TRANSFER 0x00000000
365 #define SRB_FLAGS_UNSPECIFIED_DIRECTION (SRB_FLAGS_DATA_IN | SRB_FLAGS_DATA_OUT)
367 #define SRB_FLAGS_NO_QUEUE_FREEZE 0x00000100
368 #define SRB_FLAGS_ADAPTER_CACHE_ENABLE 0x00000200
369 #define SRB_FLAGS_FREE_SENSE_BUFFER 0x00000400
371 #define SRB_FLAGS_IS_ACTIVE 0x00010000
372 #define SRB_FLAGS_ALLOCATED_FROM_ZONE 0x00020000
373 #define SRB_FLAGS_SGLIST_FROM_POOL 0x00040000
374 #define SRB_FLAGS_BYPASS_LOCKED_QUEUE 0x00080000
376 #define SRB_FLAGS_NO_KEEP_AWAKE 0x00100000
377 #define SRB_FLAGS_PORT_DRIVER_ALLOCSENSE 0x00200000
379 #define SRB_FLAGS_PORT_DRIVER_SENSEHASPORT 0x00400000
380 #define SRB_FLAGS_DONT_START_NEXT_PACKET 0x00800000
382 #define SRB_FLAGS_PORT_DRIVER_RESERVED 0x0F000000
383 #define SRB_FLAGS_CLASS_DRIVER_RESERVED 0xF0000000
385 #define SRB_SIMPLE_TAG_REQUEST 0x20
386 #define SRB_HEAD_OF_QUEUE_TAG_REQUEST 0x21
387 #define SRB_ORDERED_QUEUE_TAG_REQUEST 0x22
389 #define SRB_WMI_FLAGS_ADAPTER_REQUEST 0x01
390 #define SRB_POWER_FLAGS_ADAPTER_REQUEST 0x01
391 #define SRB_PNP_FLAGS_ADAPTER_REQUEST 0x01
393 #define STOR_MAP_NO_BUFFERS (0)
394 #define STOR_MAP_ALL_BUFFERS (1)
395 #define STOR_MAP_NON_READ_WRITE_BUFFERS (2)
397 #define VPD_SUPPORTED_PAGES 0x00
398 #define VPD_SERIAL_NUMBER 0x80
399 #define VPD_DEVICE_IDENTIFIERS 0x83
400 #define VPD_MEDIA_SERIAL_NUMBER 0x84
401 #define VPD_SOFTWARE_INTERFACE_IDENTIFIERS 0x84
402 #define VPD_NETWORK_MANAGEMENT_ADDRESSES 0x85
403 #define VPD_EXTENDED_INQUIRY_DATA 0x86
404 #define VPD_MODE_PAGE_POLICY 0x87
405 #define VPD_SCSI_PORTS 0x88
407 #define SCSI_SENSE_NO_SENSE 0x00
408 #define SCSI_SENSE_RECOVERED_ERROR 0x01
409 #define SCSI_SENSE_NOT_READY 0x02
410 #define SCSI_SENSE_MEDIUM_ERROR 0x03
411 #define SCSI_SENSE_HARDWARE_ERROR 0x04
412 #define SCSI_SENSE_ILLEGAL_REQUEST 0x05
413 #define SCSI_SENSE_UNIT_ATTENTION 0x06
414 #define SCSI_SENSE_DATA_PROTECT 0x07
415 #define SCSI_SENSE_BLANK_CHECK 0x08
416 #define SCSI_SENSE_UNIQUE 0x09
417 #define SCSI_SENSE_COPY_ABORTED 0x0A
418 #define SCSI_SENSE_ABORTED_COMMAND 0x0B
419 #define SCSI_SENSE_EQUAL 0x0C
420 #define SCSI_SENSE_VOL_OVERFLOW 0x0D
421 #define SCSI_SENSE_MISCOMPARE 0x0E
422 #define SCSI_SENSE_RESERVED 0x0F
424 typedef enum _STOR_SYNCHRONIZATION_MODEL
426 StorSynchronizeHalfDuplex
,
427 StorSynchronizeFullDuplex
428 } STOR_SYNCHRONIZATION_MODEL
;
430 typedef enum _STOR_DMA_WIDTH
434 Dma64BitScatterGather
,
438 typedef enum _STOR_SPINLOCK
445 typedef enum _SCSI_ADAPTER_CONTROL_TYPE
447 ScsiQuerySupportedControlTypes
= 0,
451 ScsiSetRunningConfig
,
452 ScsiAdapterControlMax
,
453 MakeAdapterControlTypeSizeOfUlong
= 0xffffffff
454 } SCSI_ADAPTER_CONTROL_TYPE
, *PSCSI_ADAPTER_CONTROL_TYPE
;
456 typedef enum _SCSI_ADAPTER_CONTROL_STATUS
458 ScsiAdapterControlSuccess
= 0,
459 ScsiAdapterControlUnsuccessful
460 } SCSI_ADAPTER_CONTROL_STATUS
, *PSCSI_ADAPTER_CONTROL_STATUS
;
462 typedef enum _SCSI_NOTIFICATION_TYPE
477 BufferOverrunDetected
,
479 GetExtendedFunctionTable
,
480 EnablePassiveInitialization
= 0x1000,
485 } SCSI_NOTIFICATION_TYPE
, *PSCSI_NOTIFICATION_TYPE
;
487 typedef enum _STOR_DEVICE_POWER_STATE
489 StorPowerDeviceUnspecified
= 0,
494 StorPowerDeviceMaximum
495 } STOR_DEVICE_POWER_STATE
, *PSTOR_DEVICE_POWER_STATE
;
497 typedef enum _STOR_POWER_ACTION
499 StorPowerActionNone
= 0,
500 StorPowerActionReserved
,
501 StorPowerActionSleep
,
502 StorPowerActionHibernate
,
503 StorPowerActionShutdown
,
504 StorPowerActionShutdownReset
,
505 StorPowerActionShutdownOff
,
506 StorPowerActionWarmEject
507 } STOR_POWER_ACTION
, *PSTOR_POWER_ACTION
;
509 typedef enum _STOR_PNP_ACTION
511 StorStartDevice
= 0x0,
512 StorRemoveDevice
= 0x2,
513 StorStopDevice
= 0x4,
514 StorQueryCapabilities
= 0x9,
515 StorQueryResourceRequirements
= 0xB,
516 StorFilterResourceRequirements
= 0xD,
517 StorSurpriseRemoval
= 0x17
518 } STOR_PNP_ACTION
, *PSTOR_PNP_ACTION
;
520 typedef enum _VPD_CODE_SET
522 VpdCodeSetReserved
= 0,
523 VpdCodeSetBinary
= 1,
526 } VPD_CODE_SET
, *PVPD_CODE_SET
;
528 typedef enum _VPD_ASSOCIATION
533 VpdAssocReserved1
= 3,
534 VpdAssocReserved2
= 4
535 } VPD_ASSOCIATION
, *PVPD_ASSOCIATION
;
537 typedef enum _VPD_IDENTIFIER_TYPE
539 VpdIdentifierTypeVendorSpecific
= 0,
540 VpdIdentifierTypeVendorId
= 1,
541 VpdIdentifierTypeEUI64
= 2,
542 VpdIdentifierTypeFCPHName
= 3,
543 VpdIdentifierTypePortRelative
= 4,
544 VpdIdentifierTypeTargetPortGroup
= 5,
545 VpdIdentifierTypeLogicalUnitGroup
= 6,
546 VpdIdentifierTypeMD5LogicalUnitId
= 7,
547 VpdIdentifierTypeSCSINameString
= 8
548 } VPD_IDENTIFIER_TYPE
, *PVPD_IDENTIFIER_TYPE
;
550 typedef enum _STORPORT_FUNCTION_CODE
552 ExtFunctionAllocatePool
,
554 ExtFunctionAllocateMdl
,
556 ExtFunctionBuildMdlForNonPagedPool
,
557 ExtFunctionGetSystemAddress
,
558 ExtFunctionGetOriginalMdl
,
559 ExtFunctionCompleteServiceIrp
,
560 ExtFunctionGetDeviceObjects
,
561 ExtFunctionBuildScatterGatherList
,
562 ExtFunctionPutScatterGatherList
,
563 ExtFunctionAcquireMSISpinLock
,
564 ExtFunctionReleaseMSISpinLock
,
565 ExtFunctionGetMessageInterruptInformation
,
566 ExtFunctionInitializePerformanceOptimizations
,
567 ExtFunctionGetStartIoPerformanceParameters
,
568 ExtFunctionLogSystemEvent
,
569 #if (NTDDI_VERSION >= NTDDI_WIN7)
570 ExtFunctionGetCurrentProcessorNumber
,
571 ExtFunctionGetActiveGroupCount
,
572 ExtFunctionGetGroupAffinity
,
573 ExtFunctionGetActiveNodeCount
,
574 ExtFunctionGetNodeAffinity
,
575 ExtFunctionGetHighestNodeNumber
,
576 ExtFunctionGetLogicalProcessorRelationship
,
577 ExtFunctionAllocateContiguousMemorySpecifyCacheNode
,
578 ExtFunctionFreeContiguousMemorySpecifyCache
580 } STORPORT_FUNCTION_CODE
, *PSTORPORT_FUNCTION_CODE
;
582 typedef enum _STOR_EVENT_ASSOCIATION_ENUM
584 StorEventAdapterAssociation
= 0,
585 StorEventLunAssociation
,
586 StorEventTargetAssociation
,
587 StorEventInvalidAssociation
588 } STOR_EVENT_ASSOCIATION_ENUM
;
590 typedef enum _GETSGSTATUS
594 } GETSGSTATUS
, *PGETSGSTATUS
;
596 typedef struct _SCSI_REQUEST_BLOCK
608 UCHAR SenseInfoBufferLength
;
610 ULONG DataTransferLength
;
613 PVOID SenseInfoBuffer
;
614 struct _SCSI_REQUEST_BLOCK
*NextSrb
;
615 PVOID OriginalRequest
;
619 ULONG InternalStatus
;
621 ULONG LinkTimeoutValue
;
627 } SCSI_REQUEST_BLOCK
, *PSCSI_REQUEST_BLOCK
;
629 typedef struct _SCSI_WMI_REQUEST_BLOCK
634 UCHAR WMISubFunction
;
642 ULONG DataTransferLength
;
647 PVOID OriginalRequest
;
650 #if (NTDDI_VERSION >= NTDDI_WS03SP1) && defined(_WIN64)
654 } SCSI_WMI_REQUEST_BLOCK
, *PSCSI_WMI_REQUEST_BLOCK
;
656 typedef struct _SCSI_POWER_REQUEST_BLOCK
665 STOR_DEVICE_POWER_STATE DevicePowerState
;
667 ULONG DataTransferLength
;
670 PVOID SenseInfoBuffer
;
671 struct _SCSI_REQUEST_BLOCK
*NextSrb
;
672 PVOID OriginalRequest
;
674 STOR_POWER_ACTION PowerAction
;
679 } SCSI_POWER_REQUEST_BLOCK
, *PSCSI_POWER_REQUEST_BLOCK
;
681 typedef struct _STOR_DEVICE_CAPABILITIES
686 ULONG LockSupported
:1;
687 ULONG EjectSupported
:1;
691 ULONG SilentInstall
:1;
692 ULONG SurpriseRemovalOK
:1;
693 ULONG NoDisplayInUI
:1;
694 } STOR_DEVICE_CAPABILITIES
, *PSTOR_DEVICE_CAPABILITIES
;
696 typedef struct _SCSI_PNP_REQUEST_BLOCK
701 UCHAR PnPSubFunction
;
705 STOR_PNP_ACTION PnPAction
;
707 ULONG DataTransferLength
;
710 PVOID SenseInfoBuffer
;
711 struct _SCSI_REQUEST_BLOCK
*NextSrb
;
712 PVOID OriginalRequest
;
719 } SCSI_PNP_REQUEST_BLOCK
, *PSCSI_PNP_REQUEST_BLOCK
;
721 #include <pshpack1.h>
728 UCHAR CommandUniqueBits
:4;
729 UCHAR LogicalUnitNumber
:3;
730 UCHAR CommandUniqueBytes
[3];
734 UCHAR VendorUnique
:2;
735 } CDB6GENERIC
, *PCDB6GENERIC
;
736 struct _CDB6READWRITE
739 UCHAR LogicalBlockMsb1
:5;
740 UCHAR LogicalUnitNumber
:3;
741 UCHAR LogicalBlockMsb0
;
742 UCHAR LogicalBlockLsb
;
743 UCHAR TransferBlocks
;
745 } CDB6READWRITE
, *PCDB6READWRITE
;
750 UCHAR LogicalUnitNumber
:3;
753 UCHAR AllocationLength
;
755 } CDB6INQUIRY
, *PCDB6INQUIRY
;
759 UCHAR EnableVitalProductData
:1;
760 UCHAR CommandSupportData
:1;
764 UCHAR AllocationLength
;
766 } CDB6INQUIRY3
, *PCDB6INQUIRY3
;
774 UCHAR LogicalUnitNumber
:3;
775 UCHAR VerificationLength
[3];
777 } CDB6VERIFY
, *PCDB6VERIFY
;
781 UCHAR FormatControl
:5;
782 UCHAR LogicalUnitNumber
:3;
787 } CDB6FORMAT
, *PCDB6FORMAT
;
791 UCHAR RelativeAddress
:1;
793 UCHAR ForceUnitAccess
:1;
794 UCHAR DisablePageOut
:1;
795 UCHAR LogicalUnitNumber
:3;
796 UCHAR LogicalBlockByte0
;
797 UCHAR LogicalBlockByte1
;
798 UCHAR LogicalBlockByte2
;
799 UCHAR LogicalBlockByte3
;
801 UCHAR TransferBlocksMsb
;
802 UCHAR TransferBlocksLsb
;
808 UCHAR RelativeAddress
:1;
810 UCHAR ForceUnitAccess
:1;
811 UCHAR DisablePageOut
:1;
812 UCHAR LogicalUnitNumber
:3;
813 UCHAR LogicalBlock
[4];
814 UCHAR TransferLength
[4];
822 UCHAR ForceUnitAccess
:1;
823 UCHAR DisablePageOut
:1;
825 UCHAR LogicalBlock
[8];
826 UCHAR TransferLength
[4];
834 UCHAR LogicalUnitNumber
:3;
838 } PAUSE_RESUME
, *PPAUSE_RESUME
;
845 UCHAR LogicalUnitNumber
:3;
850 UCHAR AllocationLength
[2];
853 } READ_TOC
, *PREAD_TOC
;
854 struct _READ_DISK_INFORMATION
860 UCHAR AllocationLength
[2];
862 } READ_DISK_INFORMATION
, *PREAD_DISK_INFORMATION
;
863 struct _READ_TRACK_INFORMATION
870 UCHAR BlockAddress
[4];
872 UCHAR AllocationLength
[2];
874 } READ_TRACK_INFORMATION
, *PREAD_TRACK_INFORMATION
;
875 struct _RESERVE_TRACK_RZONE
879 UCHAR ReservationSize
[4];
881 } RESERVE_TRACK_RZONE
, *PRESERVE_TRACK_RZONE
;
882 struct _SEND_OPC_INFORMATION
891 UCHAR ParameterListLength
[2];
893 } SEND_OPC_INFORMATION
, *PSEND_OPC_INFORMATION
;
900 UCHAR TrackNumber
[2];
903 } REPAIR_TRACK
, *PREPAIR_TRACK
;
913 UCHAR TrackNumber
[2];
916 } CLOSE_TRACK
, *PCLOSE_TRACK
;
917 struct _READ_BUFFER_CAPACITY
923 UCHAR AllocationLength
[2];
925 } READ_BUFFER_CAPACITY
, *PREAD_BUFFER_CAPACITY
;
926 struct _SEND_CUE_SHEET
930 UCHAR CueSheetSize
[3];
932 } SEND_CUE_SHEET
, *PSEND_CUE_SHEET
;
940 UCHAR LogicalBlockAddress
[4];
942 UCHAR AllocationLength
[2];
944 } READ_HEADER
, *PREAD_HEADER
;
949 UCHAR LogicalUnitNumber
:3;
950 UCHAR StartingBlockAddress
[4];
954 } PLAY_AUDIO
, *PPLAY_AUDIO
;
955 struct _PLAY_AUDIO_MSF
959 UCHAR LogicalUnitNumber
:3;
968 } PLAY_AUDIO_MSF
, *PPLAY_AUDIO_MSF
;
976 UCHAR AddressOrTrack
[4];
979 } BLANK_MEDIA
, *PBLANK_MEDIA
;
985 UCHAR ExpectedSectorType
:3;
987 _ANONYMOUS_UNION
union
991 UCHAR StartingBlockAddress
[4];
1013 } PLAY_CD
, *PPLAY_CD
;
1016 UCHAR OperationCode
;
1017 UCHAR RelativeAddress
:1;
1021 UCHAR StartingAddress
[4];
1027 } SCAN_CD
, *PSCAN_CD
;
1028 struct _STOP_PLAY_SCAN
1030 UCHAR OperationCode
;
1035 } STOP_PLAY_SCAN
, *PSTOP_PLAY_SCAN
;
1038 UCHAR OperationCode
;
1042 UCHAR LogicalUnitNumber
:3;
1049 UCHAR AllocationLength
[2];
1051 } SUBCHANNEL
, *PSUBCHANNEL
;
1054 UCHAR OperationCode
;
1055 UCHAR RelativeAddress
:1;
1057 UCHAR ExpectedSectorType
:3;
1059 UCHAR StartingLBA
[4];
1060 UCHAR TransferBlocks
[3];
1064 UCHAR IncludeUserData
:1;
1066 UCHAR IncludeSyncData
:1;
1067 UCHAR SubChannelSelection
:3;
1070 } READ_CD
, *PREAD_CD
;
1073 UCHAR OperationCode
;
1074 UCHAR RelativeAddress
:1;
1076 UCHAR ExpectedSectorType
:3;
1089 UCHAR IncludeUserData
:1;
1091 UCHAR IncludeSyncData
:1;
1092 UCHAR SubChannelSelection
:3;
1095 } READ_CD_MSF
, *PREAD_CD_MSF
;
1096 struct _PLXTR_READ_CDDA
1098 UCHAR OperationCode
;
1100 UCHAR LogicalUnitNumber
:3;
1101 UCHAR LogicalBlockByte0
;
1102 UCHAR LogicalBlockByte1
;
1103 UCHAR LogicalBlockByte2
;
1104 UCHAR LogicalBlockByte3
;
1105 UCHAR TransferBlockByte0
;
1106 UCHAR TransferBlockByte1
;
1107 UCHAR TransferBlockByte2
;
1108 UCHAR TransferBlockByte3
;
1111 } PLXTR_READ_CDDA
, *PPLXTR_READ_CDDA
;
1112 struct _NEC_READ_CDDA
1114 UCHAR OperationCode
;
1116 UCHAR LogicalBlockByte0
;
1117 UCHAR LogicalBlockByte1
;
1118 UCHAR LogicalBlockByte2
;
1119 UCHAR LogicalBlockByte3
;
1121 UCHAR TransferBlockByte0
;
1122 UCHAR TransferBlockByte1
;
1124 } NEC_READ_CDDA
, *PNEC_READ_CDDA
;
1127 UCHAR OperationCode
;
1131 UCHAR LogicalUnitNumber
:3;
1135 UCHAR AllocationLength
;
1137 } MODE_SENSE
, *PMODE_SENSE
;
1138 struct _MODE_SENSE10
1140 UCHAR OperationCode
;
1144 UCHAR LogicalUnitNumber
:3;
1148 UCHAR AllocationLength
[2];
1150 } MODE_SENSE10
, *PMODE_SENSE10
;
1153 UCHAR OperationCode
;
1157 UCHAR LogicalUnitNumber
:3;
1159 UCHAR ParameterListLength
;
1161 } MODE_SELECT
, *PMODE_SELECT
;
1162 struct _MODE_SELECT10
1164 UCHAR OperationCode
;
1168 UCHAR LogicalUnitNumber
:3;
1170 UCHAR ParameterListLength
[2];
1172 } MODE_SELECT10
, *PMODE_SELECT10
;
1175 UCHAR OperationCode
;
1180 UCHAR LogicalUnitNumber
:3;
1182 UCHAR LogicalBlockAddress
[4];
1189 UCHAR OperationCode
;
1193 UCHAR LogicalUnitNumber
:3;
1198 UCHAR ParameterPointer
[2];
1199 UCHAR AllocationLength
[2];
1201 } LOGSENSE
, *PLOGSENSE
;
1204 UCHAR OperationCode
;
1208 UCHAR LogicalUnitNumber
:3;
1212 UCHAR ParameterListLength
[2];
1214 } LOGSELECT
, *PLOGSELECT
;
1217 UCHAR OperationCode
;
1219 UCHAR LogicalUnitNumber
:3;
1220 UCHAR TransferLength
[3];
1225 UCHAR OperationCode
;
1227 UCHAR LogicalUnitNumber
:3;
1228 UCHAR LogicalBlockAddress
[4];
1234 UCHAR OperationCode
;
1238 UCHAR LogicalUnitNumber
:3;
1244 UCHAR OperationCode
;
1247 UCHAR LogicalUnitNumber
:3;
1253 } START_STOP
, *PSTART_STOP
;
1254 struct _MEDIA_REMOVAL
1256 UCHAR OperationCode
;
1258 UCHAR LogicalUnitNumber
:3;
1264 } MEDIA_REMOVAL
, *PMEDIA_REMOVAL
;
1267 UCHAR OperationCode
;
1270 UCHAR BlockAddress
[3];
1274 UCHAR VendorUnique
:2;
1275 } SEEK_BLOCK
, *PSEEK_BLOCK
;
1276 struct _REQUEST_BLOCK_ADDRESS
1278 UCHAR OperationCode
;
1280 UCHAR AllocationLength
;
1284 UCHAR VendorUnique
:2;
1285 } REQUEST_BLOCK_ADDRESS
, *PREQUEST_BLOCK_ADDRESS
;
1288 UCHAR OperationCode
;
1291 UCHAR PartitionSelect
:6;
1294 } PARTITION
, *PPARTITION
;
1295 struct _WRITE_TAPE_MARKS
1297 UCHAR OperationCode
;
1299 UCHAR WriteSetMarks
:1;
1301 UCHAR LogicalUnitNumber
:3;
1302 UCHAR TransferLength
[3];
1304 } WRITE_TAPE_MARKS
, *PWRITE_TAPE_MARKS
;
1305 struct _SPACE_TAPE_MARKS
1307 UCHAR OperationCode
;
1310 UCHAR LogicalUnitNumber
:3;
1322 UCHAR VendorUnique
:2;
1325 } SPACE_TAPE_MARKS
, *PSPACE_TAPE_MARKS
;
1326 struct _READ_POSITION
1334 } READ_POSITION
, *PREAD_POSITION
;
1335 struct _CDB6READWRITETAPE
1337 UCHAR OperationCode
;
1338 UCHAR VendorSpecific
:5;
1340 UCHAR TransferLenMSB
;
1342 UCHAR TransferLenLSB
;
1346 UCHAR VendorUnique
:2;
1347 } CDB6READWRITETAPE
, *PCDB6READWRITETAPE
;
1348 struct _INIT_ELEMENT_STATUS
1350 UCHAR OperationCode
;
1352 UCHAR LogicalUnitNubmer
:3;
1356 } INIT_ELEMENT_STATUS
, *PINIT_ELEMENT_STATUS
;
1357 struct _INITIALIZE_ELEMENT_RANGE
1359 UCHAR OperationCode
;
1362 UCHAR LogicalUnitNubmer
:3;
1363 UCHAR FirstElementAddress
[2];
1365 UCHAR NumberOfElements
[2];
1369 } INITIALIZE_ELEMENT_RANGE
, *PINITIALIZE_ELEMENT_RANGE
;
1370 struct _POSITION_TO_ELEMENT
1372 UCHAR OperationCode
;
1374 UCHAR LogicalUnitNumber
:3;
1375 UCHAR TransportElementAddress
[2];
1376 UCHAR DestinationElementAddress
[2];
1381 } POSITION_TO_ELEMENT
, *PPOSITION_TO_ELEMENT
;
1384 UCHAR OperationCode
;
1386 UCHAR LogicalUnitNumber
:3;
1387 UCHAR TransportElementAddress
[2];
1388 UCHAR SourceElementAddress
[2];
1389 UCHAR DestinationElementAddress
[2];
1394 } MOVE_MEDIUM
, *PMOVE_MEDIUM
;
1395 struct _EXCHANGE_MEDIUM
1397 UCHAR OperationCode
;
1399 UCHAR LogicalUnitNumber
:3;
1400 UCHAR TransportElementAddress
[2];
1401 UCHAR SourceElementAddress
[2];
1402 UCHAR Destination1ElementAddress
[2];
1403 UCHAR Destination2ElementAddress
[2];
1408 } EXCHANGE_MEDIUM
, *PEXCHANGE_MEDIUM
;
1409 struct _READ_ELEMENT_STATUS
1411 UCHAR OperationCode
;
1412 UCHAR ElementType
:4;
1414 UCHAR LogicalUnitNumber
:3;
1415 UCHAR StartingElementAddress
[2];
1416 UCHAR NumberOfElements
[2];
1418 UCHAR AllocationLength
[3];
1421 } READ_ELEMENT_STATUS
, *PREAD_ELEMENT_STATUS
;
1422 struct _SEND_VOLUME_TAG
1424 UCHAR OperationCode
;
1425 UCHAR ElementType
:4;
1427 UCHAR LogicalUnitNumber
:3;
1428 UCHAR StartingElementAddress
[2];
1433 UCHAR ParameterListLength
[2];
1436 } SEND_VOLUME_TAG
, *PSEND_VOLUME_TAG
;
1437 struct _REQUEST_VOLUME_ELEMENT_ADDRESS
1439 UCHAR OperationCode
;
1440 UCHAR ElementType
:4;
1442 UCHAR LogicalUnitNumber
:3;
1443 UCHAR StartingElementAddress
[2];
1444 UCHAR NumberElements
[2];
1446 UCHAR AllocationLength
[3];
1449 } REQUEST_VOLUME_ELEMENT_ADDRESS
, *PREQUEST_VOLUME_ELEMENT_ADDRESS
;
1452 UCHAR OperationCode
;
1463 } LOAD_UNLOAD
, *PLOAD_UNLOAD
;
1466 UCHAR OperationCode
;
1470 UCHAR AllocationLength
[2];
1473 } MECH_STATUS
, *PMECH_STATUS
;
1474 struct _SYNCHRONIZE_CACHE10
1476 UCHAR OperationCode
;
1481 UCHAR LogicalBlockAddress
[4];
1483 UCHAR BlockCount
[2];
1485 } SYNCHRONIZE_CACHE10
, *PSYNCHRONIZE_CACHE10
;
1486 struct _GET_EVENT_STATUS_NOTIFICATION
1488 UCHAR OperationCode
;
1493 UCHAR NotificationClassRequest
;
1495 UCHAR EventListLength
[2];
1497 } GET_EVENT_STATUS_NOTIFICATION
, *PGET_EVENT_STATUS_NOTIFICATION
;
1498 struct _GET_PERFORMANCE
1500 UCHAR OperationCode
;
1505 UCHAR StartingLBA
[4];
1507 UCHAR MaximumNumberOfDescriptors
[2];
1511 struct _READ_DVD_STRUCTURE
1513 UCHAR OperationCode
;
1516 UCHAR RMDBlockNumber
[4];
1519 UCHAR AllocationLength
[2];
1523 } READ_DVD_STRUCTURE
, *PREAD_DVD_STRUCTURE
;
1524 struct _SET_STREAMING
1526 UCHAR OperationCode
;
1528 UCHAR ParameterListLength
[2];
1531 struct _SEND_DVD_STRUCTURE
1533 UCHAR OperationCode
;
1538 UCHAR ParameterListLength
[2];
1541 } SEND_DVD_STRUCTURE
, *PSEND_DVD_STRUCTURE
;
1544 UCHAR OperationCode
;
1548 UCHAR ParameterListLength
[2];
1552 } SEND_KEY
, *PSEND_KEY
;
1555 UCHAR OperationCode
;
1558 UCHAR LogicalBlockAddress
[4];
1560 UCHAR AllocationLength
[2];
1564 } REPORT_KEY
, *PREPORT_KEY
;
1565 struct _SET_READ_AHEAD
1567 UCHAR OperationCode
;
1570 UCHAR TriggerLBA
[4];
1571 UCHAR ReadAheadLBA
[4];
1574 } SET_READ_AHEAD
, *PSET_READ_AHEAD
;
1575 struct _READ_FORMATTED_CAPACITIES
1577 UCHAR OperationCode
;
1581 UCHAR AllocationLength
[2];
1583 } READ_FORMATTED_CAPACITIES
, *PREAD_FORMATTED_CAPACITIES
;
1586 UCHAR OperationCode
;
1588 UCHAR AllocationLength
[4];
1591 } REPORT_LUNS
, *PREPORT_LUNS
;
1592 struct _PERSISTENT_RESERVE_IN
1594 UCHAR OperationCode
;
1595 UCHAR ServiceAction
:5;
1598 UCHAR AllocationLength
[2];
1600 } PERSISTENT_RESERVE_IN
, *PPERSISTENT_RESERVE_IN
;
1601 struct _PERSISTENT_RESERVE_OUT
1603 UCHAR OperationCode
;
1604 UCHAR ServiceAction
:5;
1609 UCHAR ParameterListLength
[2];
1611 } PERSISTENT_RESERVE_OUT
, *PPERSISTENT_RESERVE_OUT
;
1612 struct _GET_CONFIGURATION
1614 UCHAR OperationCode
;
1615 UCHAR RequestType
:1;
1617 UCHAR StartingFeature
[2];
1619 UCHAR AllocationLength
[2];
1621 } GET_CONFIGURATION
, *PGET_CONFIGURATION
;
1622 struct _SET_CD_SPEED
1624 UCHAR OperationCode
;
1625 _ANONYMOUS_UNION
union
1628 _ANONYMOUS_STRUCT
struct
1630 UCHAR RotationControl
:2;
1635 UCHAR WriteSpeed
[2];
1638 } SET_CD_SPEED
, *PSET_CD_SPEED
;
1641 UCHAR OperationCode
;
1642 UCHAR RelativeAddress
:1;
1644 UCHAR ForceUnitAccess
:1;
1645 UCHAR DisablePageOut
:1;
1646 UCHAR LogicalUnitNumber
:3;
1647 UCHAR LogicalBlock
[4];
1648 UCHAR TransferLength
[4];
1655 UCHAR OperationCode
;
1656 UCHAR RelativeAddress
:1;
1659 UCHAR ForceUnitAccess
:1;
1660 UCHAR DisablePageOut
:1;
1661 UCHAR LogicalUnitNumber
:3;
1662 UCHAR LogicalBlock
[4];
1663 UCHAR TransferLength
[4];
1670 UCHAR OperationCode
;
1672 UCHAR ForceUnitAccess
:1;
1673 UCHAR DisablePageOut
:1;
1674 UCHAR ReadProtect
:3;
1675 UCHAR LogicalBlock
[8];
1676 UCHAR TransferLength
[4];
1683 UCHAR OperationCode
;
1685 UCHAR ForceUnitAccess
:1;
1686 UCHAR DisablePageOut
:1;
1687 UCHAR WriteProtect
:3;
1688 UCHAR LogicalBlock
[8];
1689 UCHAR TransferLength
[4];
1696 UCHAR OperationCode
;
1699 UCHAR BlockVerify
:1;
1701 UCHAR DisablePageOut
:1;
1702 UCHAR VerifyProtect
:3;
1703 UCHAR LogicalBlock
[8];
1704 UCHAR VerificationLength
[4];
1709 struct _SYNCHRONIZE_CACHE16
1711 UCHAR OperationCode
;
1715 UCHAR LogicalBlock
[8];
1716 UCHAR BlockCount
[4];
1719 } SYNCHRONIZE_CACHE16
;
1720 struct _READ_CAPACITY16
1722 UCHAR OperationCode
;
1723 UCHAR ServiceAction
:5;
1725 UCHAR LogicalBlock
[8];
1726 UCHAR BlockCount
[4];
1735 typedef union _EIGHT_BYTE
1748 ULONGLONG AsULongLong
;
1749 } EIGHT_BYTE
, *PEIGHT_BYTE
;
1751 typedef union _FOUR_BYTE
1761 } FOUR_BYTE
, *PFOUR_BYTE
;
1763 typedef union _TWO_BYTE
1771 } TWO_BYTE
, *PTWO_BYTE
;
1772 #include <poppack.h>
1774 #if (NTDDI_VERSION < NTDDI_WINXP)
1775 typedef struct _INQUIRYDATA
1778 UCHAR DeviceTypeQualifier
:3;
1779 UCHAR DeviceTypeModifier
:7;
1780 UCHAR RemovableMedia
:1;
1782 UCHAR ResponseDataFormat
:4;
1785 UCHAR ReservedBit
:1;
1787 UCHAR AdditionalLength
;
1790 UCHAR CommandQueue
:1;
1792 UCHAR LinkedCommands
:1;
1793 UCHAR Synchronous
:1;
1796 UCHAR RelativeAddressing
:1;
1798 UCHAR ProductId
[16];
1799 UCHAR ProductRevisionLevel
[4];
1800 UCHAR VendorSpecific
[20];
1801 UCHAR Reserved3
[40];
1802 } INQUIRYDATA
, *PINQUIRYDATA
;
1804 #include <pshpack1.h>
1805 typedef struct _INQUIRYDATA
1808 UCHAR DeviceTypeQualifier
:3;
1809 UCHAR DeviceTypeModifier
:7;
1810 UCHAR RemovableMedia
:1;
1816 UCHAR ANSIVersion
:3;
1817 UCHAR ECMAVersion
:3;
1821 UCHAR ResponseDataFormat
:4;
1824 UCHAR TerminateTask
:1;
1826 UCHAR AdditionalLength
;
1831 UCHAR MediumChanger
:1;
1833 UCHAR ReservedBit2
:1;
1834 UCHAR EnclosureServices
:1;
1835 UCHAR ReservedBit3
:1;
1837 UCHAR CommandQueue
:1;
1838 UCHAR TransferDisable
:1;
1839 UCHAR LinkedCommands
:1;
1840 UCHAR Synchronous
:1;
1843 UCHAR RelativeAddressing
:1;
1845 UCHAR ProductId
[16];
1846 UCHAR ProductRevisionLevel
[4];
1847 UCHAR VendorSpecific
[20];
1848 UCHAR Reserved3
[40];
1849 } INQUIRYDATA
, *PINQUIRYDATA
;
1850 #include <poppack.h>
1853 typedef struct _VPD_MEDIA_SERIAL_NUMBER_PAGE
1856 UCHAR DeviceTypeQualifier
:3;
1860 UCHAR SerialNumber
[0];
1861 } VPD_MEDIA_SERIAL_NUMBER_PAGE
, *PVPD_MEDIA_SERIAL_NUMBER_PAGE
;
1863 typedef struct _VPD_SERIAL_NUMBER_PAGE
1866 UCHAR DeviceTypeQualifier
:3;
1870 UCHAR SerialNumber
[0];
1871 } VPD_SERIAL_NUMBER_PAGE
, *PVPD_SERIAL_NUMBER_PAGE
;
1873 typedef struct _VPD_IDENTIFICATION_DESCRIPTOR
1877 UCHAR IdentifierType
:4;
1878 UCHAR Association
:2;
1881 UCHAR IdentifierLength
;
1882 UCHAR Identifier
[0];
1883 } VPD_IDENTIFICATION_DESCRIPTOR
, *PVPD_IDENTIFICATION_DESCRIPTOR
;
1885 typedef struct _VPD_IDENTIFICATION_PAGE
1888 UCHAR DeviceTypeQualifier
:3;
1892 UCHAR Descriptors
[0];
1893 } VPD_IDENTIFICATION_PAGE
, *PVPD_IDENTIFICATION_PAGE
;
1895 typedef struct _VPD_SUPPORTED_PAGES_PAGE
1898 UCHAR DeviceTypeQualifier
:3;
1902 UCHAR SupportedPageList
[0];
1903 } VPD_SUPPORTED_PAGES_PAGE
, *PVPD_SUPPORTED_PAGES_PAGE
;
1905 #include <pshpack1.h>
1906 typedef struct _READ_CAPACITY_DATA
1908 ULONG LogicalBlockAddress
;
1909 ULONG BytesPerBlock
;
1910 } READ_CAPACITY_DATA
, *PREAD_CAPACITY_DATA
;
1912 typedef struct _READ_CAPACITY_DATA_EX
1914 LARGE_INTEGER LogicalBlockAddress
;
1915 ULONG BytesPerBlock
;
1916 } READ_CAPACITY_DATA_EX
, *PREAD_CAPACITY_DATA_EX
;
1918 typedef struct _MODE_PARAMETER_HEADER
1920 UCHAR ModeDataLength
;
1922 UCHAR DeviceSpecificParameter
;
1923 UCHAR BlockDescriptorLength
;
1924 }MODE_PARAMETER_HEADER
, *PMODE_PARAMETER_HEADER
;
1926 typedef struct _MODE_PARAMETER_HEADER10
1928 UCHAR ModeDataLength
[2];
1930 UCHAR DeviceSpecificParameter
;
1932 UCHAR BlockDescriptorLength
[2];
1933 }MODE_PARAMETER_HEADER10
, *PMODE_PARAMETER_HEADER10
;
1935 typedef struct _MODE_PARAMETER_BLOCK
1938 UCHAR NumberOfBlocks
[3];
1940 UCHAR BlockLength
[3];
1941 }MODE_PARAMETER_BLOCK
, *PMODE_PARAMETER_BLOCK
;
1943 typedef struct _LUN_LIST
1945 UCHAR LunListLength
[4];
1947 #if !defined(__midl)
1950 } LUN_LIST
, *PLUN_LIST
;
1952 typedef struct _SENSE_DATA
1956 UCHAR SegmentNumber
;
1959 UCHAR IncorrectLength
:1;
1962 UCHAR Information
[4];
1963 UCHAR AdditionalSenseLength
;
1964 UCHAR CommandSpecificInformation
[4];
1965 UCHAR AdditionalSenseCode
;
1966 UCHAR AdditionalSenseCodeQualifier
;
1967 UCHAR FieldReplaceableUnitCode
;
1968 UCHAR SenseKeySpecific
[3];
1969 } SENSE_DATA
, *PSENSE_DATA
;
1971 #include <poppack.h>
1973 typedef PHYSICAL_ADDRESS STOR_PHYSICAL_ADDRESS
;
1975 typedef struct _ACCESS_RANGE
1977 STOR_PHYSICAL_ADDRESS RangeStart
;
1979 BOOLEAN RangeInMemory
;
1980 } ACCESS_RANGE
, *PACCESS_RANGE
;
1982 typedef struct _MEMORY_REGION
1985 PHYSICAL_ADDRESS PhysicalBase
;
1987 } MEMORY_REGION
, *PMEMORY_REGION
;
1989 typedef struct _PORT_CONFIGURATION_INFORMATION
1992 ULONG SystemIoBusNumber
;
1993 INTERFACE_TYPE AdapterInterfaceType
;
1994 ULONG BusInterruptLevel
;
1995 ULONG BusInterruptVector
;
1996 KINTERRUPT_MODE InterruptMode
;
1997 ULONG MaximumTransferLength
;
1998 ULONG NumberOfPhysicalBreaks
;
2003 ULONG AlignmentMask
;
2004 ULONG NumberOfAccessRanges
;
2005 ACCESS_RANGE (*AccessRanges
)[];
2007 UCHAR NumberOfBuses
;
2008 CCHAR InitiatorBusId
[8];
2009 BOOLEAN ScatterGather
;
2012 BOOLEAN AdapterScansDown
;
2013 BOOLEAN AtdiskPrimaryClaimed
;
2014 BOOLEAN AtdiskSecondaryClaimed
;
2015 BOOLEAN Dma32BitAddresses
;
2018 BOOLEAN NeedPhysicalAddresses
;
2019 BOOLEAN TaggedQueuing
;
2020 BOOLEAN AutoRequestSense
;
2021 BOOLEAN MultipleRequestPerLu
;
2022 BOOLEAN ReceiveEvent
;
2023 BOOLEAN RealModeInitialized
;
2024 BOOLEAN BufferAccessScsiPortControlled
;
2025 UCHAR MaximumNumberOfTargets
;
2026 UCHAR ReservedUchars
[2];
2028 ULONG BusInterruptLevel2
;
2029 ULONG BusInterruptVector2
;
2030 KINTERRUPT_MODE InterruptMode2
;
2033 DMA_WIDTH DmaWidth2
;
2034 DMA_SPEED DmaSpeed2
;
2035 ULONG DeviceExtensionSize
;
2036 ULONG SpecificLuExtensionSize
;
2037 ULONG SrbExtensionSize
;
2038 UCHAR Dma64BitAddresses
;
2039 BOOLEAN ResetTargetSupported
;
2040 UCHAR MaximumNumberOfLogicalUnits
;
2041 BOOLEAN WmiDataProvider
;
2042 STOR_SYNCHRONIZATION_MODEL SynchronizationModel
;
2043 } PORT_CONFIGURATION_INFORMATION
, *PPORT_CONFIGURATION_INFORMATION
;
2045 typedef struct _STOR_SCATTER_GATHER_ELEMENT
2047 STOR_PHYSICAL_ADDRESS PhysicalAddress
;
2050 } STOR_SCATTER_GATHER_ELEMENT
, *PSTOR_SCATTER_GATHER_ELEMENT
;
2052 typedef struct _STOR_SCATTER_GATHER_LIST
2054 ULONG NumberOfElements
;
2056 STOR_SCATTER_GATHER_ELEMENT List
[];
2057 } STOR_SCATTER_GATHER_LIST
, *PSTOR_SCATTER_GATHER_LIST
;
2059 typedef struct _DPC_BUFFER
2069 PVOID DeferredRoutine
;
2070 PVOID DeferredContext
;
2071 PVOID SystemArgument1
;
2072 PVOID SystemArgument2
;
2076 typedef struct _STOR_DPC
2080 } STOR_DPC
, *PSTOR_DPC
;
2082 typedef struct _STOR_LOCK_HANDLE
2094 } STOR_LOCK_HANDLE
, *PSTOR_LOCK_HANDLE
;
2096 typedef struct _STOR_LOG_EVENT_DETAILS
2098 ULONG InterfaceRevision
;
2101 STOR_EVENT_ASSOCIATION_ENUM EventAssociation
;
2105 BOOLEAN StorportSpecificErrorCode
;
2112 } STOR_LOG_EVENT_DETAILS
, *PSTOR_LOG_EVENT_DETAILS
;
2114 typedef struct _PERF_CONFIGURATION_DATA
2119 ULONG ConcurrentChannels
;
2120 ULONG FirstRedirectionMessageNumber
, LastRedirectionMessageNumber
;
2123 PGROUP_AFFINITY MessageTargets
;
2124 } PERF_CONFIGURATION_DATA
, *PPERF_CONFIGURATION_DATA
;
2126 typedef struct _STARTIO_PERFORMANCE_PARAMETERS
2130 ULONG MessageNumber
;
2131 ULONG ChannelNumber
;
2132 } STARTIO_PERFORMANCE_PARAMETERS
, *PSTARTIO_PERFORMANCE_PARAMETERS
;
2134 typedef struct _MESSAGE_INTERRUPT_INFORMATION
2138 STOR_PHYSICAL_ADDRESS MessageAddress
;
2139 ULONG InterruptVector
;
2140 ULONG InterruptLevel
;
2141 KINTERRUPT_MODE InterruptMode
;
2142 } MESSAGE_INTERRUPT_INFORMATION
, *PMESSAGE_INTERRUPT_INFORMATION
;
2146 (NTAPI
*PHW_INITIALIZE
)(
2147 _In_ PVOID DeviceExtension
);
2151 (NTAPI
*PHW_BUILDIO
)(
2152 _In_ PVOID DeviceExtension
,
2153 _In_ PSCSI_REQUEST_BLOCK Srb
);
2157 (NTAPI
*PHW_STARTIO
)(
2158 _In_ PVOID DeviceExtension
,
2159 _In_ PSCSI_REQUEST_BLOCK Srb
);
2163 (NTAPI
*PHW_INTERRUPT
)(
2164 _In_ PVOID DeviceExtension
);
2169 _In_ PVOID DeviceExtension
);
2173 (NTAPI
*PHW_DMA_STARTED
)(
2174 _In_ PVOID DeviceExtension
);
2178 (NTAPI
*PHW_FIND_ADAPTER
)(
2179 IN PVOID DeviceExtension
,
2181 IN PVOID BusInformation
,
2182 IN PCHAR ArgumentString
,
2183 IN OUT PPORT_CONFIGURATION_INFORMATION ConfigInfo
,
2184 OUT PBOOLEAN Again
);
2188 (NTAPI
*PHW_RESET_BUS
)(
2189 IN PVOID DeviceExtension
,
2194 (NTAPI
*PHW_ADAPTER_STATE
)(
2195 IN PVOID DeviceExtension
,
2197 IN BOOLEAN SaveState
);
2200 SCSI_ADAPTER_CONTROL_STATUS
2201 (NTAPI
*PHW_ADAPTER_CONTROL
)(
2202 IN PVOID DeviceExtension
,
2203 IN SCSI_ADAPTER_CONTROL_TYPE ControlType
,
2204 IN PVOID Parameters
);
2208 (*PHW_PASSIVE_INITIALIZE_ROUTINE
)(
2209 _In_ PVOID DeviceExtension
);
2215 _In_ PVOID HwDeviceExtension
,
2216 _In_ PVOID SystemArgument1
,
2217 _In_ PVOID SystemArgument2
);
2221 (NTAPI STOR_SYNCHRONIZED_ACCESS
)(
2222 _In_ PVOID HwDeviceExtension
,
2223 _In_ PVOID Context
);
2225 typedef STOR_SYNCHRONIZED_ACCESS
*PSTOR_SYNCHRONIZED_ACCESS
;
2229 (NTAPI
*PpostScaterGatherExecute
)(
2230 _In_ PVOID
*DeviceObject
,
2232 _In_ PSTOR_SCATTER_GATHER_LIST ScatterGather
,
2233 _In_ PVOID Context
);
2237 (NTAPI
*PStorPortGetMessageInterruptInformation
)(
2238 _In_ PVOID HwDeviceExtension
,
2239 _In_ ULONG MessageId
,
2240 _Out_ PMESSAGE_INTERRUPT_INFORMATION InterruptInfo
);
2244 (NTAPI
*PStorPortPutScatterGatherList
)(
2245 _In_ PVOID HwDeviceExtension
,
2246 _In_ PSTOR_SCATTER_GATHER_LIST ScatterGatherList
,
2247 _In_ BOOLEAN WriteToDevice
);
2251 (NTAPI
*PStorPortBuildScatterGatherList
)(
2252 _In_ PVOID HwDeviceExtension
,
2254 _In_ PVOID CurrentVa
,
2256 _In_ PpostScaterGatherExecute ExecutionRoutine
,
2258 _In_ BOOLEAN WriteToDevice
,
2259 _Inout_ PVOID ScatterGatherBuffer
,
2260 _In_ ULONG ScatterGatherBufferLength
);
2264 (NTAPI
*PStorPortFreePool
)(
2266 _In_ PVOID HwDeviceExtension
,
2267 _In_opt_ PVOID PMdl
);
2271 (NTAPI
*PStorPortAllocatePool
)(
2272 _In_ ULONG NumberOfBytes
,
2274 _In_ PVOID HwDeviceExtension
,
2279 (NTAPI
*PStorPortGetSystemAddress
)(
2280 _In_ PSCSI_REQUEST_BLOCK Srb
);
2282 typedef struct _STORPORT_EXTENDED_FUNCTIONS
2285 PStorPortGetMessageInterruptInformation GetMessageInterruptInformation
;
2286 PStorPortPutScatterGatherList PutScatterGatherList
;
2287 PStorPortBuildScatterGatherList BuildScatterGatherList
;
2288 PStorPortFreePool FreePool
;
2289 PStorPortAllocatePool AllocatePool
;
2290 PStorPortGetSystemAddress GetSystemAddress
;
2291 } STORPORT_EXTENDED_FUNCTIONS
, *PSTORPORT_EXTENDED_FUNCTIONS
;
2293 typedef struct _HW_INITIALIZATION_DATA
2295 ULONG HwInitializationDataSize
;
2296 INTERFACE_TYPE AdapterInterfaceType
;
2297 PHW_INITIALIZE HwInitialize
;
2298 PHW_STARTIO HwStartIo
;
2299 PHW_INTERRUPT HwInterrupt
;
2300 PHW_FIND_ADAPTER HwFindAdapter
;
2301 PHW_RESET_BUS HwResetBus
;
2302 PHW_DMA_STARTED HwDmaStarted
;
2303 PHW_ADAPTER_STATE HwAdapterState
;
2304 ULONG DeviceExtensionSize
;
2305 ULONG SpecificLuExtensionSize
;
2306 ULONG SrbExtensionSize
;
2307 ULONG NumberOfAccessRanges
;
2310 BOOLEAN NeedPhysicalAddresses
;
2311 BOOLEAN TaggedQueuing
;
2312 BOOLEAN AutoRequestSense
;
2313 BOOLEAN MultipleRequestPerLu
;
2314 BOOLEAN ReceiveEvent
;
2315 USHORT VendorIdLength
;
2317 USHORT ReservedUshort
;
2318 USHORT DeviceIdLength
;
2320 PHW_ADAPTER_CONTROL HwAdapterControl
;
2321 PHW_BUILDIO HwBuildIo
;
2322 } HW_INITIALIZATION_DATA
, *PHW_INITIALIZATION_DATA
;
2326 #define REVERSE_BYTES_QUAD(Destination, Source) { \
2327 PEIGHT_BYTE d = (PEIGHT_BYTE)(Destination); \
2328 PEIGHT_BYTE s = (PEIGHT_BYTE)(Source); \
2329 d->Byte7 = s->Byte0; \
2330 d->Byte6 = s->Byte1; \
2331 d->Byte5 = s->Byte2; \
2332 d->Byte4 = s->Byte3; \
2333 d->Byte3 = s->Byte4; \
2334 d->Byte2 = s->Byte5; \
2335 d->Byte1 = s->Byte6; \
2336 d->Byte0 = s->Byte7; \
2339 #define REVERSE_BYTES(Destination, Source) { \
2340 PFOUR_BYTE d = (PFOUR_BYTE)(Destination); \
2341 PFOUR_BYTE s = (PFOUR_BYTE)(Source); \
2342 d->Byte3 = s->Byte0; \
2343 d->Byte2 = s->Byte1; \
2344 d->Byte1 = s->Byte2; \
2345 d->Byte0 = s->Byte3; \
2348 #define REVERSE_BYTES_SHORT(Destination, Source) { \
2349 PTWO_BYTE d = (PTWO_BYTE)(Destination); \
2350 PTWO_BYTE s = (PTWO_BYTE)(Source); \
2351 d->Byte1 = s->Byte0; \
2352 d->Byte0 = s->Byte1; \
2355 #define StorPortCopyMemory(Destination,Source,Length) memcpy((Destination),(Source),(Length))
2360 StorPortAllocateRegistryBuffer(
2361 _In_ PVOID HwDeviceExtension
,
2362 _In_ PULONG Length
);
2368 _In_ PVOID HwDeviceExtension
,
2369 _In_ ULONG RequestsToComplete
);
2374 StorPortCompleteRequest(
2375 _In_ PVOID HwDeviceExtension
,
2377 _In_ UCHAR TargetId
,
2379 _In_ UCHAR SrbStatus
);
2384 StorPortConvertPhysicalAddressToUlong64(
2385 _In_ STOR_PHYSICAL_ADDRESS Address
);
2388 STOR_PHYSICAL_ADDRESS
2390 StorPortConvertUlong64ToPhysicalAddress(
2391 _In_ ULONG64 UlongAddress
);
2397 _In_ ULONG DebugPrintLevel
,
2398 _In_ PCCHAR DebugMessage
,
2405 _In_ PVOID HwDeviceExtension
,
2407 _In_ UCHAR TargetId
,
2409 _In_ ULONG RequestsToComplete
);
2414 StorPortDeviceReady(
2415 _In_ PVOID HwDeviceExtension
,
2417 _In_ UCHAR TargetId
,
2423 StorPortFreeDeviceBase(
2424 _In_ PVOID HwDeviceExtension
,
2425 _In_ PVOID MappedAddress
);
2430 StorPortFreeRegistryBuffer(
2431 _In_ PVOID HwDeviceExtension
,
2432 _In_ PUCHAR Buffer
);
2438 _In_ PVOID DeviceExtension
,
2439 _In_ ULONG BusDataType
,
2440 _In_ ULONG SystemIoBusNumber
,
2441 _In_ ULONG SlotNumber
,
2442 _Out_
_When_(Length
!= 0, _Out_writes_bytes_(Length
)) PVOID Buffer
,
2448 StorPortGetDeviceBase(
2449 _In_ PVOID HwDeviceExtension
,
2450 _In_ INTERFACE_TYPE BusType
,
2451 _In_ ULONG SystemIoBusNumber
,
2452 _In_ STOR_PHYSICAL_ADDRESS IoAddress
,
2453 _In_ ULONG NumberOfBytes
,
2454 _In_ BOOLEAN InIoSpace
);
2459 StorPortGetLogicalUnit(
2460 _In_ PVOID HwDeviceExtension
,
2462 _In_ UCHAR TargetId
,
2466 STOR_PHYSICAL_ADDRESS
2468 StorPortGetPhysicalAddress(
2469 _In_ PVOID HwDeviceExtension
,
2470 _In_opt_ PSCSI_REQUEST_BLOCK Srb
,
2471 _In_ PVOID VirtualAddress
,
2472 _Out_ ULONG
*Length
);
2475 PSTOR_SCATTER_GATHER_LIST
2477 StorPortGetScatterGatherList(
2478 _In_ PVOID DeviceExtension
,
2479 _In_ PSCSI_REQUEST_BLOCK Srb
);
2485 _In_ PVOID DeviceExtension
,
2487 _In_ UCHAR TargetId
,
2489 _In_ LONG QueueTag
);
2494 StorPortGetUncachedExtension(
2495 _In_ PVOID HwDeviceExtension
,
2496 _In_ PPORT_CONFIGURATION_INFORMATION ConfigInfo
,
2497 _In_ ULONG NumberOfBytes
);
2502 StorPortGetVirtualAddress(
2503 _In_ PVOID HwDeviceExtension
,
2504 _In_ STOR_PHYSICAL_ADDRESS PhysicalAddress
);
2510 _In_ PVOID Argument1
,
2511 _In_ PVOID Argument2
,
2512 _In_ PHW_INITIALIZATION_DATA HwInitializationData
,
2513 _In_opt_ PVOID Unused
);
2519 _In_ PVOID HwDeviceExtension
,
2520 _In_opt_ PSCSI_REQUEST_BLOCK Srb
,
2522 _In_ UCHAR TargetId
,
2524 _In_ ULONG ErrorCode
,
2525 _In_ ULONG UniqueId
);
2531 _Out_writes_bytes_(Length
) PVOID WriteBuffer
,
2532 _In_reads_bytes_(Length
) PVOID ReadBuffer
,
2538 StorPortNotification(
2539 _In_ SCSI_NOTIFICATION_TYPE NotificationType
,
2540 _In_ PVOID HwDeviceExtension
,
2546 StorPortQuerySystemTime(
2547 _Out_ PLARGE_INTEGER CurrentTime
);
2553 _In_ PVOID HwDeviceExtension
,
2554 _In_ ULONG TimeOut
);
2559 StorPortPauseDevice(
2560 _In_ PVOID HwDeviceExtension
,
2562 _In_ UCHAR TargetId
,
2564 _In_ ULONG TimeOut
);
2569 StorPortReadPortBufferUchar(
2570 _In_ PVOID HwDeviceExtension
,
2578 StorPortReadPortBufferUlong(
2579 _In_ PVOID HwDeviceExtension
,
2587 StorPortReadPortBufferUshort(
2588 _In_ PVOID HwDeviceExtension
,
2590 _In_ PUSHORT Buffer
,
2596 StorPortReadPortUchar(
2597 _In_ PVOID HwDeviceExtension
,
2603 StorPortReadPortUlong(
2604 _In_ PVOID HwDeviceExtension
,
2610 StorPortReadPortUshort(
2611 _In_ PVOID HwDeviceExtension
,
2617 StorPortReadRegisterBufferUchar(
2618 _In_ PVOID HwDeviceExtension
,
2619 _In_ PUCHAR Register
,
2626 StorPortReadRegisterBufferUlong(
2627 _In_ PVOID HwDeviceExtension
,
2628 _In_ PULONG Register
,
2635 StorPortReadRegisterBufferUshort(
2636 _In_ PVOID HwDeviceExtension
,
2637 _In_ PUSHORT Register
,
2638 _In_ PUSHORT Buffer
,
2644 StorPortReadRegisterUchar(
2645 _In_ PVOID HwDeviceExtension
,
2646 _In_ PUCHAR Register
);
2651 StorPortReadRegisterUlong(
2652 _In_ PVOID HwDeviceExtension
,
2653 _In_ PULONG Register
);
2658 StorPortReadRegisterUshort(
2659 _In_ PVOID HwDeviceExtension
,
2660 _In_ PUSHORT Register
);
2666 _In_ PVOID HwDeviceExtension
);
2671 StorPortRegistryRead(
2672 _In_ PVOID HwDeviceExtension
,
2673 _In_ PUCHAR ValueName
,
2677 _In_ PULONG BufferLength
);
2682 StorPortRegistryWrite(
2683 _In_ PVOID HwDeviceExtension
,
2684 _In_ PUCHAR ValueName
,
2688 _In_ ULONG BufferLength
);
2694 _In_ PVOID HwDeviceExtension
);
2699 StorPortResumeDevice(
2700 _In_ PVOID HwDeviceExtension
,
2702 _In_ UCHAR TargetId
,
2708 StorPortSetBusDataByOffset(
2709 _In_ PVOID DeviceExtension
,
2710 _In_ ULONG BusDataType
,
2711 _In_ ULONG SystemIoBusNumber
,
2712 _In_ ULONG SlotNumber
,
2713 _In_reads_bytes_(Length
) PVOID Buffer
,
2720 StorPortSetDeviceQueueDepth(
2721 _In_ PVOID HwDeviceExtension
,
2723 _In_ UCHAR TargetId
,
2730 StorPortStallExecution(
2736 StorPortSynchronizeAccess(
2737 _In_ PVOID HwDeviceExtension
,
2738 _In_ PSTOR_SYNCHRONIZED_ACCESS SynchronizedAccessRoutine
,
2739 _In_opt_ PVOID Context
);
2744 StorPortValidateRange(
2745 _In_ PVOID HwDeviceExtension
,
2746 _In_ INTERFACE_TYPE BusType
,
2747 _In_ ULONG SystemIoBusNumber
,
2748 _In_ STOR_PHYSICAL_ADDRESS IoAddress
,
2749 _In_ ULONG NumberOfBytes
,
2750 _In_ BOOLEAN InIoSpace
);
2755 StorPortWritePortBufferUchar(
2756 _In_ PVOID HwDeviceExtension
,
2764 StorPortWritePortBufferUlong(
2765 _In_ PVOID HwDeviceExtension
,
2773 StorPortWritePortBufferUshort(
2774 _In_ PVOID HwDeviceExtension
,
2776 _In_ PUSHORT Buffer
,
2782 StorPortWritePortUchar(
2783 _In_ PVOID HwDeviceExtension
,
2790 StorPortWritePortUlong(
2791 _In_ PVOID HwDeviceExtension
,
2798 StorPortWritePortUshort(
2799 _In_ PVOID HwDeviceExtension
,
2806 StorPortWriteRegisterBufferUchar(
2807 _In_ PVOID HwDeviceExtension
,
2808 _In_ PUCHAR Register
,
2815 StorPortWriteRegisterBufferUlong(
2816 _In_ PVOID HwDeviceExtension
,
2817 _In_ PULONG Register
,
2824 StorPortWriteRegisterBufferUshort(
2825 _In_ PVOID HwDeviceExtension
,
2826 _In_ PUSHORT Register
,
2827 _In_ PUSHORT Buffer
,
2833 StorPortWriteRegisterUchar(
2834 _In_ PVOID HwDeviceExtension
,
2835 _In_ PUCHAR Register
,
2841 StorPortWriteRegisterUlong(
2842 _In_ PVOID HwDeviceExtension
,
2843 _In_ PULONG Register
,
2849 StorPortWriteRegisterUshort(
2850 _In_ PVOID HwDeviceExtension
,
2851 _In_ PUSHORT Register
,
2857 StorPortEnablePassiveInitialization(
2858 _In_ PVOID DeviceExtension
,
2859 _In_ PHW_PASSIVE_INITIALIZE_ROUTINE HwPassiveInitializeRoutine
)
2863 StorPortNotification(EnablePassiveInitialization
,
2865 HwPassiveInitializeRoutine
,
2867 return (BOOLEAN
)Succ
;
2872 StorPortInitializeDpc(
2873 _In_ PVOID DeviceExtension
,
2874 _Out_ PSTOR_DPC Dpc
,
2875 _In_ PHW_DPC_ROUTINE HwDpcRoutine
)
2877 StorPortNotification(InitializeDpc
,
2886 _In_ PVOID DeviceExtension
,
2888 _In_ PVOID SystemArgument1
,
2889 _In_ PVOID SystemArgument2
)
2893 StorPortNotification(IssueDpc
,
2899 return (BOOLEAN
)Succ
;
2904 StorPortAcquireSpinLock(
2905 _In_ PVOID DeviceExtension
,
2906 _In_ STOR_SPINLOCK SpinLock
,
2907 _In_ PVOID LockContext
,
2908 _Inout_ PSTOR_LOCK_HANDLE LockHandle
)
2910 StorPortNotification(AcquireSpinLock
,
2919 StorPortReleaseSpinLock(
2920 _In_ PVOID DeviceExtension
,
2921 _Inout_ PSTOR_LOCK_HANDLE LockHandle
)
2923 StorPortNotification(ReleaseSpinLock
,
2930 StorPortExtendedFunction(
2931 _In_ STORPORT_FUNCTION_CODE FunctionCode
,
2932 _In_ PVOID HwDeviceExtension
,
2937 StorPortAllocatePool(
2938 _In_ PVOID HwDeviceExtension
,
2939 _In_ ULONG NumberOfBytes
,
2941 _Out_ PVOID
*BufferPointer
2944 return StorPortExtendedFunction(ExtFunctionAllocatePool
,
2954 _In_ PVOID HwDeviceExtension
,
2955 _In_ PVOID BufferPointer
)
2957 return StorPortExtendedFunction(ExtFunctionFreePool
,
2964 StorPortAllocateMdl(
2965 _In_ PVOID HwDeviceExtension
,
2966 _In_ PVOID BufferPointer
,
2967 _In_ ULONG NumberOfBytes
,
2970 return StorPortExtendedFunction(ExtFunctionAllocateMdl
,
2980 _In_ PVOID HwDeviceExtension
,
2983 return StorPortExtendedFunction(ExtFunctionFreeMdl
,
2990 StorPortBuildMdlForNonPagedPool(
2991 _In_ PVOID HwDeviceExtension
,
2994 return StorPortExtendedFunction(ExtFunctionBuildMdlForNonPagedPool
,
3001 StorPortGetSystemAddress(
3002 _In_ PVOID HwDeviceExtension
,
3003 _In_ PSCSI_REQUEST_BLOCK Srb
,
3004 _Out_ PVOID
*SystemAddress
)
3006 return StorPortExtendedFunction(ExtFunctionGetSystemAddress
,
3014 StorPortGetOriginalMdl(
3015 _In_ PVOID HwDeviceExtension
,
3016 _In_ PSCSI_REQUEST_BLOCK Srb
,
3019 return StorPortExtendedFunction(ExtFunctionGetOriginalMdl
,
3027 StorPortCompleteServiceIrp(
3028 _In_ PVOID HwDeviceExtension
,
3031 return StorPortExtendedFunction(ExtFunctionCompleteServiceIrp
,
3038 StorPortGetDeviceObjects(
3039 _In_ PVOID HwDeviceExtension
,
3040 _Out_ PVOID
*AdapterDeviceObject
,
3041 _Out_ PVOID
*PhysicalDeviceObject
,
3042 _Out_ PVOID
*LowerDeviceObject
)
3044 return StorPortExtendedFunction(ExtFunctionGetDeviceObjects
,
3046 AdapterDeviceObject
,
3047 PhysicalDeviceObject
,
3053 StorPortBuildScatterGatherList(
3054 _In_ PVOID HwDeviceExtension
,
3056 _In_ PVOID CurrentVa
,
3058 _In_ PpostScaterGatherExecute ExecutionRoutine
,
3060 _In_ BOOLEAN WriteToDevice
,
3061 _Inout_ PVOID ScatterGatherBuffer
,
3062 _In_ ULONG ScatterGatherBufferLength
)
3064 return StorPortExtendedFunction(ExtFunctionBuildScatterGatherList
,
3072 ScatterGatherBuffer
,
3073 ScatterGatherBufferLength
);
3078 StorPortPutScatterGatherList(
3079 _In_ PVOID HwDeviceExtension
,
3080 _In_ PSTOR_SCATTER_GATHER_LIST ScatterGatherList
,
3081 _In_ BOOLEAN WriteToDevice
)
3083 return StorPortExtendedFunction(ExtFunctionPutScatterGatherList
,
3091 StorPortAcquireMSISpinLock(
3092 _In_ PVOID HwDeviceExtension
,
3093 _In_ ULONG MessageId
,
3094 _In_ PULONG OldIrql
)
3096 return StorPortExtendedFunction(ExtFunctionAcquireMSISpinLock
,
3104 StorPortReleaseMSISpinLock(
3105 _In_ PVOID HwDeviceExtension
,
3106 _In_ ULONG MessageId
,
3109 return StorPortExtendedFunction(ExtFunctionReleaseMSISpinLock
,
3118 _In_ PVOID HwDeviceExtension
,
3119 _In_ ULONG MessageId
,
3120 _Out_ PMESSAGE_INTERRUPT_INFORMATION InterruptInfo
)
3122 return StorPortExtendedFunction(ExtFunctionGetMessageInterruptInformation
,
3130 StorPortInitializePerfOpts(
3131 _In_ PVOID HwDeviceExtension
,
3133 _Inout_ PPERF_CONFIGURATION_DATA PerfConfigData
)
3135 return StorPortExtendedFunction(ExtFunctionInitializePerformanceOptimizations
,
3143 StorPortGetStartIoPerfParams(
3144 _In_ PVOID HwDeviceExtension
,
3145 _In_ PSCSI_REQUEST_BLOCK Srb
,
3146 _Inout_ PSTARTIO_PERFORMANCE_PARAMETERS StartIoPerfParams
)
3148 return StorPortExtendedFunction(ExtFunctionGetStartIoPerformanceParameters
,
3156 StorPortLogSystemEvent(
3157 _In_ PVOID HwDeviceExtension
,
3158 _Inout_ PSTOR_LOG_EVENT_DETAILS LogDetails
,
3159 _Inout_ PULONG MaximumSize
)
3161 return StorPortExtendedFunction(ExtFunctionLogSystemEvent
,
3168 #define DebugPrint(x) StorPortDebugPrint x
3170 #define DebugPrint(x)
3177 #endif /* _NTSTORPORT_ */