[PSDK] Update msctf.idl. CORE-16441
[reactos.git] / sdk / include / ddk / storport.h
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 #ifndef _NTSTORPORT_
24 #define _NTSTORPORT_
25
26 #ifdef __cplusplus
27 extern "C" {
28 #endif
29
30 #if defined(_STORPORT_)
31 #define STORPORT_API
32 #else
33 #define STORPORT_API DECLSPEC_IMPORT
34 #endif
35
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
53
54 #define DEVICE_CONNECTED 0x00
55
56 #define CDB6GENERIC_LENGTH 6
57 #define CDB10GENERIC_LENGTH 10
58 #define CDB12GENERIC_LENGTH 12
59
60 #define INQUIRYDATABUFFERSIZE 36
61 #define SENSE_BUFFER_SIZE 18
62 #define MAX_SENSE_BUFFER_SIZE 255
63
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)
68
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
103
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
108
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
277
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
287
288 #define SETBITON 1
289 #define SETBITOFF 0
290
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
295
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
322
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))
355
356 #define SRB_FLAGS_QUEUE_ACTION_ENABLE 0x00000002
357 #define SRB_FLAGS_DISABLE_DISCONNECT 0x00000004
358 #define SRB_FLAGS_DISABLE_SYNCH_TRANSFER 0x00000008
359
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)
366
367 #define SRB_FLAGS_NO_QUEUE_FREEZE 0x00000100
368 #define SRB_FLAGS_ADAPTER_CACHE_ENABLE 0x00000200
369 #define SRB_FLAGS_FREE_SENSE_BUFFER 0x00000400
370
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
375
376 #define SRB_FLAGS_NO_KEEP_AWAKE 0x00100000
377 #define SRB_FLAGS_PORT_DRIVER_ALLOCSENSE 0x00200000
378
379 #define SRB_FLAGS_PORT_DRIVER_SENSEHASPORT 0x00400000
380 #define SRB_FLAGS_DONT_START_NEXT_PACKET 0x00800000
381
382 #define SRB_FLAGS_PORT_DRIVER_RESERVED 0x0F000000
383 #define SRB_FLAGS_CLASS_DRIVER_RESERVED 0xF0000000
384
385 #define SRB_SIMPLE_TAG_REQUEST 0x20
386 #define SRB_HEAD_OF_QUEUE_TAG_REQUEST 0x21
387 #define SRB_ORDERED_QUEUE_TAG_REQUEST 0x22
388
389 #define SRB_WMI_FLAGS_ADAPTER_REQUEST 0x01
390 #define SRB_POWER_FLAGS_ADAPTER_REQUEST 0x01
391 #define SRB_PNP_FLAGS_ADAPTER_REQUEST 0x01
392
393 #define STOR_MAP_NO_BUFFERS (0)
394 #define STOR_MAP_ALL_BUFFERS (1)
395 #define STOR_MAP_NON_READ_WRITE_BUFFERS (2)
396
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
406
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
423
424 typedef enum _STOR_SYNCHRONIZATION_MODEL
425 {
426 StorSynchronizeHalfDuplex,
427 StorSynchronizeFullDuplex
428 } STOR_SYNCHRONIZATION_MODEL;
429
430 typedef enum _STOR_DMA_WIDTH
431 {
432 DmaUnknown,
433 Dma32Bit,
434 Dma64BitScatterGather,
435 Dma64Bit
436 } STOR_DMA_WIDTH;
437
438 typedef enum _STOR_SPINLOCK
439 {
440 DpcLock = 1,
441 StartIoLock,
442 InterruptLock
443 } STOR_SPINLOCK;
444
445 typedef enum _SCSI_ADAPTER_CONTROL_TYPE
446 {
447 ScsiQuerySupportedControlTypes = 0,
448 ScsiStopAdapter,
449 ScsiRestartAdapter,
450 ScsiSetBootConfig,
451 ScsiSetRunningConfig,
452 ScsiAdapterControlMax,
453 MakeAdapterControlTypeSizeOfUlong = 0xffffffff
454 } SCSI_ADAPTER_CONTROL_TYPE, *PSCSI_ADAPTER_CONTROL_TYPE;
455
456 typedef enum _SCSI_ADAPTER_CONTROL_STATUS
457 {
458 ScsiAdapterControlSuccess = 0,
459 ScsiAdapterControlUnsuccessful
460 } SCSI_ADAPTER_CONTROL_STATUS, *PSCSI_ADAPTER_CONTROL_STATUS;
461
462 typedef enum _SCSI_NOTIFICATION_TYPE
463 {
464 RequestComplete,
465 NextRequest,
466 NextLuRequest,
467 ResetDetected,
468 _obsolete1,
469 _obsolete2,
470 RequestTimerCall,
471 BusChangeDetected,
472 WMIEvent,
473 WMIReregister,
474 LinkUp,
475 LinkDown,
476 QueryTickCount,
477 BufferOverrunDetected,
478 TraceNotification,
479 GetExtendedFunctionTable,
480 EnablePassiveInitialization = 0x1000,
481 InitializeDpc,
482 IssueDpc,
483 AcquireSpinLock,
484 ReleaseSpinLock
485 } SCSI_NOTIFICATION_TYPE, *PSCSI_NOTIFICATION_TYPE;
486
487 typedef enum _STOR_DEVICE_POWER_STATE
488 {
489 StorPowerDeviceUnspecified = 0,
490 StorPowerDeviceD0,
491 StorPowerDeviceD1,
492 StorPowerDeviceD2,
493 StorPowerDeviceD3,
494 StorPowerDeviceMaximum
495 } STOR_DEVICE_POWER_STATE, *PSTOR_DEVICE_POWER_STATE;
496
497 typedef enum _STOR_POWER_ACTION
498 {
499 StorPowerActionNone = 0,
500 StorPowerActionReserved,
501 StorPowerActionSleep,
502 StorPowerActionHibernate,
503 StorPowerActionShutdown,
504 StorPowerActionShutdownReset,
505 StorPowerActionShutdownOff,
506 StorPowerActionWarmEject
507 } STOR_POWER_ACTION, *PSTOR_POWER_ACTION;
508
509 typedef enum _STOR_PNP_ACTION
510 {
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;
519
520 typedef enum _VPD_CODE_SET
521 {
522 VpdCodeSetReserved = 0,
523 VpdCodeSetBinary = 1,
524 VpdCodeSetAscii = 2,
525 VpdCodeSetUTF8 = 3
526 } VPD_CODE_SET, *PVPD_CODE_SET;
527
528 typedef enum _VPD_ASSOCIATION
529 {
530 VpdAssocDevice = 0,
531 VpdAssocPort = 1,
532 VpdAssocTarget = 2,
533 VpdAssocReserved1 = 3,
534 VpdAssocReserved2 = 4
535 } VPD_ASSOCIATION, *PVPD_ASSOCIATION;
536
537 typedef enum _VPD_IDENTIFIER_TYPE
538 {
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;
549
550 typedef enum _STORPORT_FUNCTION_CODE
551 {
552 ExtFunctionAllocatePool,
553 ExtFunctionFreePool,
554 ExtFunctionAllocateMdl,
555 ExtFunctionFreeMdl,
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
579 #endif
580 } STORPORT_FUNCTION_CODE, *PSTORPORT_FUNCTION_CODE;
581
582 typedef enum _STOR_EVENT_ASSOCIATION_ENUM
583 {
584 StorEventAdapterAssociation = 0,
585 StorEventLunAssociation,
586 StorEventTargetAssociation,
587 StorEventInvalidAssociation
588 } STOR_EVENT_ASSOCIATION_ENUM;
589
590 typedef enum _GETSGSTATUS
591 {
592 SG_ALLOCATED = 0,
593 SG_BUFFER_TOO_SMALL
594 } GETSGSTATUS, *PGETSGSTATUS;
595
596 typedef struct _SCSI_REQUEST_BLOCK
597 {
598 USHORT Length;
599 UCHAR Function;
600 UCHAR SrbStatus;
601 UCHAR ScsiStatus;
602 UCHAR PathId;
603 UCHAR TargetId;
604 UCHAR Lun;
605 UCHAR QueueTag;
606 UCHAR QueueAction;
607 UCHAR CdbLength;
608 UCHAR SenseInfoBufferLength;
609 ULONG SrbFlags;
610 ULONG DataTransferLength;
611 ULONG TimeOutValue;
612 PVOID DataBuffer;
613 PVOID SenseInfoBuffer;
614 struct _SCSI_REQUEST_BLOCK *NextSrb;
615 PVOID OriginalRequest;
616 PVOID SrbExtension;
617 union
618 {
619 ULONG InternalStatus;
620 ULONG QueueSortKey;
621 ULONG LinkTimeoutValue;
622 };
623 #if defined(_WIN64)
624 ULONG Reserved;
625 #endif
626 UCHAR Cdb[16];
627 } SCSI_REQUEST_BLOCK, *PSCSI_REQUEST_BLOCK;
628
629 typedef struct _SCSI_WMI_REQUEST_BLOCK
630 {
631 USHORT Length;
632 UCHAR Function;
633 UCHAR SrbStatus;
634 UCHAR WMISubFunction;
635 UCHAR PathId;
636 UCHAR TargetId;
637 UCHAR Lun;
638 UCHAR Reserved1;
639 UCHAR WMIFlags;
640 UCHAR Reserved2[2];
641 ULONG SrbFlags;
642 ULONG DataTransferLength;
643 ULONG TimeOutValue;
644 PVOID DataBuffer;
645 PVOID DataPath;
646 PVOID Reserved3;
647 PVOID OriginalRequest;
648 PVOID SrbExtension;
649 ULONG Reserved4;
650 #if (NTDDI_VERSION >= NTDDI_WS03SP1) && defined(_WIN64)
651 ULONG Reserved6;
652 #endif
653 UCHAR Reserved5[16];
654 } SCSI_WMI_REQUEST_BLOCK, *PSCSI_WMI_REQUEST_BLOCK;
655
656 typedef struct _SCSI_POWER_REQUEST_BLOCK
657 {
658 USHORT Length;
659 UCHAR Function;
660 UCHAR SrbStatus;
661 UCHAR SrbPowerFlags;
662 UCHAR PathId;
663 UCHAR TargetId;
664 UCHAR Lun;
665 STOR_DEVICE_POWER_STATE DevicePowerState;
666 ULONG SrbFlags;
667 ULONG DataTransferLength;
668 ULONG TimeOutValue;
669 PVOID DataBuffer;
670 PVOID SenseInfoBuffer;
671 struct _SCSI_REQUEST_BLOCK *NextSrb;
672 PVOID OriginalRequest;
673 PVOID SrbExtension;
674 STOR_POWER_ACTION PowerAction;
675 #if defined(_WIN64)
676 ULONG Reserved;
677 #endif
678 UCHAR Reserved5[16];
679 } SCSI_POWER_REQUEST_BLOCK, *PSCSI_POWER_REQUEST_BLOCK;
680
681 typedef struct _STOR_DEVICE_CAPABILITIES
682 {
683 USHORT Version;
684 ULONG DeviceD1:1;
685 ULONG DeviceD2:1;
686 ULONG LockSupported:1;
687 ULONG EjectSupported:1;
688 ULONG Removable:1;
689 ULONG DockDevice:1;
690 ULONG UniqueID:1;
691 ULONG SilentInstall:1;
692 ULONG SurpriseRemovalOK:1;
693 ULONG NoDisplayInUI:1;
694 } STOR_DEVICE_CAPABILITIES, *PSTOR_DEVICE_CAPABILITIES;
695
696 typedef struct _SCSI_PNP_REQUEST_BLOCK
697 {
698 USHORT Length;
699 UCHAR Function;
700 UCHAR SrbStatus;
701 UCHAR PnPSubFunction;
702 UCHAR PathId;
703 UCHAR TargetId;
704 UCHAR Lun;
705 STOR_PNP_ACTION PnPAction;
706 ULONG SrbFlags;
707 ULONG DataTransferLength;
708 ULONG TimeOutValue;
709 PVOID DataBuffer;
710 PVOID SenseInfoBuffer;
711 struct _SCSI_REQUEST_BLOCK *NextSrb;
712 PVOID OriginalRequest;
713 PVOID SrbExtension;
714 ULONG SrbPnPFlags;
715 #if defined(_WIN64)
716 ULONG Reserved;
717 #endif
718 UCHAR Reserved4[16];
719 } SCSI_PNP_REQUEST_BLOCK, *PSCSI_PNP_REQUEST_BLOCK;
720
721 #include <pshpack1.h>
722 typedef union _CDB
723 {
724 struct _CDB6GENERIC
725 {
726 UCHAR OperationCode;
727 UCHAR Immediate:1;
728 UCHAR CommandUniqueBits:4;
729 UCHAR LogicalUnitNumber:3;
730 UCHAR CommandUniqueBytes[3];
731 UCHAR Link:1;
732 UCHAR Flag:1;
733 UCHAR Reserved:4;
734 UCHAR VendorUnique:2;
735 } CDB6GENERIC, *PCDB6GENERIC;
736 struct _CDB6READWRITE
737 {
738 UCHAR OperationCode;
739 UCHAR LogicalBlockMsb1:5;
740 UCHAR LogicalUnitNumber:3;
741 UCHAR LogicalBlockMsb0;
742 UCHAR LogicalBlockLsb;
743 UCHAR TransferBlocks;
744 UCHAR Control;
745 } CDB6READWRITE, *PCDB6READWRITE;
746 struct _CDB6INQUIRY
747 {
748 UCHAR OperationCode;
749 UCHAR Reserved1:5;
750 UCHAR LogicalUnitNumber:3;
751 UCHAR PageCode;
752 UCHAR IReserved;
753 UCHAR AllocationLength;
754 UCHAR Control;
755 } CDB6INQUIRY, *PCDB6INQUIRY;
756 struct _CDB6INQUIRY3
757 {
758 UCHAR OperationCode;
759 UCHAR EnableVitalProductData:1;
760 UCHAR CommandSupportData:1;
761 UCHAR Reserved1:6;
762 UCHAR PageCode;
763 UCHAR Reserved2;
764 UCHAR AllocationLength;
765 UCHAR Control;
766 } CDB6INQUIRY3, *PCDB6INQUIRY3;
767 struct _CDB6VERIFY
768 {
769 UCHAR OperationCode;
770 UCHAR Fixed:1;
771 UCHAR ByteCompare:1;
772 UCHAR Immediate:1;
773 UCHAR Reserved:2;
774 UCHAR LogicalUnitNumber:3;
775 UCHAR VerificationLength[3];
776 UCHAR Control;
777 } CDB6VERIFY, *PCDB6VERIFY;
778 struct _CDB6FORMAT
779 {
780 UCHAR OperationCode;
781 UCHAR FormatControl:5;
782 UCHAR LogicalUnitNumber:3;
783 UCHAR FReserved1;
784 UCHAR InterleaveMsb;
785 UCHAR InterleaveLsb;
786 UCHAR FReserved2;
787 } CDB6FORMAT, *PCDB6FORMAT;
788 struct _CDB10
789 {
790 UCHAR OperationCode;
791 UCHAR RelativeAddress:1;
792 UCHAR Reserved1:2;
793 UCHAR ForceUnitAccess:1;
794 UCHAR DisablePageOut:1;
795 UCHAR LogicalUnitNumber:3;
796 UCHAR LogicalBlockByte0;
797 UCHAR LogicalBlockByte1;
798 UCHAR LogicalBlockByte2;
799 UCHAR LogicalBlockByte3;
800 UCHAR Reserved2;
801 UCHAR TransferBlocksMsb;
802 UCHAR TransferBlocksLsb;
803 UCHAR Control;
804 } CDB10, *PCDB10;
805 struct _CDB12
806 {
807 UCHAR OperationCode;
808 UCHAR RelativeAddress:1;
809 UCHAR Reserved1:2;
810 UCHAR ForceUnitAccess:1;
811 UCHAR DisablePageOut:1;
812 UCHAR LogicalUnitNumber:3;
813 UCHAR LogicalBlock[4];
814 UCHAR TransferLength[4];
815 UCHAR Reserved2;
816 UCHAR Control;
817 } CDB12, *PCDB12;
818 struct _CDB16
819 {
820 UCHAR OperationCode;
821 UCHAR Reserved1:3;
822 UCHAR ForceUnitAccess:1;
823 UCHAR DisablePageOut:1;
824 UCHAR Protection:3;
825 UCHAR LogicalBlock[8];
826 UCHAR TransferLength[4];
827 UCHAR Reserved2;
828 UCHAR Control;
829 } CDB16, *PCDB16;
830 struct _PAUSE_RESUME
831 {
832 UCHAR OperationCode;
833 UCHAR Reserved1:5;
834 UCHAR LogicalUnitNumber:3;
835 UCHAR Reserved2[6];
836 UCHAR Action;
837 UCHAR Control;
838 } PAUSE_RESUME, *PPAUSE_RESUME;
839 struct _READ_TOC
840 {
841 UCHAR OperationCode;
842 UCHAR Reserved0:1;
843 UCHAR Msf:1;
844 UCHAR Reserved1:3;
845 UCHAR LogicalUnitNumber:3;
846 UCHAR Format2:4;
847 UCHAR Reserved2:4;
848 UCHAR Reserved3[3];
849 UCHAR StartingTrack;
850 UCHAR AllocationLength[2];
851 UCHAR Control:6;
852 UCHAR Format:2;
853 } READ_TOC, *PREAD_TOC;
854 struct _READ_DISK_INFORMATION
855 {
856 UCHAR OperationCode;
857 UCHAR Reserved1:5;
858 UCHAR Lun:3;
859 UCHAR Reserved2[5];
860 UCHAR AllocationLength[2];
861 UCHAR Control;
862 } READ_DISK_INFORMATION, *PREAD_DISK_INFORMATION;
863 struct _READ_TRACK_INFORMATION
864 {
865 UCHAR OperationCode;
866 UCHAR Track:1;
867 UCHAR Reserved1:3;
868 UCHAR Reserved2:1;
869 UCHAR Lun:3;
870 UCHAR BlockAddress[4];
871 UCHAR Reserved3;
872 UCHAR AllocationLength[2];
873 UCHAR Control;
874 } READ_TRACK_INFORMATION, *PREAD_TRACK_INFORMATION;
875 struct _RESERVE_TRACK_RZONE
876 {
877 UCHAR OperationCode;
878 UCHAR Reserved1[4];
879 UCHAR ReservationSize[4];
880 UCHAR Control;
881 } RESERVE_TRACK_RZONE, *PRESERVE_TRACK_RZONE;
882 struct _SEND_OPC_INFORMATION
883 {
884 UCHAR OperationCode;
885 UCHAR DoOpc:1;
886 UCHAR Reserved1:7;
887 UCHAR Exclude0:1;
888 UCHAR Exclude1:1;
889 UCHAR Reserved2:6;
890 UCHAR Reserved3[4];
891 UCHAR ParameterListLength[2];
892 UCHAR Reserved4;
893 } SEND_OPC_INFORMATION, *PSEND_OPC_INFORMATION;
894 struct _REPAIR_TRACK
895 {
896 UCHAR OperationCode;
897 UCHAR Immediate:1;
898 UCHAR Reserved1:7;
899 UCHAR Reserved2[2];
900 UCHAR TrackNumber[2];
901 UCHAR Reserved3[3];
902 UCHAR Control;
903 } REPAIR_TRACK, *PREPAIR_TRACK;
904 struct _CLOSE_TRACK
905 {
906 UCHAR OperationCode;
907 UCHAR Immediate:1;
908 UCHAR Reserved1:7;
909 UCHAR Track:1;
910 UCHAR Session:1;
911 UCHAR Reserved2:6;
912 UCHAR Reserved3;
913 UCHAR TrackNumber[2];
914 UCHAR Reserved4[3];
915 UCHAR Control;
916 } CLOSE_TRACK, *PCLOSE_TRACK;
917 struct _READ_BUFFER_CAPACITY
918 {
919 UCHAR OperationCode;
920 UCHAR BlockInfo:1;
921 UCHAR Reserved1:7;
922 UCHAR Reserved2[5];
923 UCHAR AllocationLength[2];
924 UCHAR Control;
925 } READ_BUFFER_CAPACITY, *PREAD_BUFFER_CAPACITY;
926 struct _SEND_CUE_SHEET
927 {
928 UCHAR OperationCode;
929 UCHAR Reserved[5];
930 UCHAR CueSheetSize[3];
931 UCHAR Control;
932 } SEND_CUE_SHEET, *PSEND_CUE_SHEET;
933 struct _READ_HEADER
934 {
935 UCHAR OperationCode;
936 UCHAR Reserved1:1;
937 UCHAR Msf:1;
938 UCHAR Reserved2:3;
939 UCHAR Lun:3;
940 UCHAR LogicalBlockAddress[4];
941 UCHAR Reserved3;
942 UCHAR AllocationLength[2];
943 UCHAR Control;
944 } READ_HEADER, *PREAD_HEADER;
945 struct _PLAY_AUDIO
946 {
947 UCHAR OperationCode;
948 UCHAR Reserved1:5;
949 UCHAR LogicalUnitNumber:3;
950 UCHAR StartingBlockAddress[4];
951 UCHAR Reserved2;
952 UCHAR PlayLength[2];
953 UCHAR Control;
954 } PLAY_AUDIO, *PPLAY_AUDIO;
955 struct _PLAY_AUDIO_MSF
956 {
957 UCHAR OperationCode;
958 UCHAR Reserved1:5;
959 UCHAR LogicalUnitNumber:3;
960 UCHAR Reserved2;
961 UCHAR StartingM;
962 UCHAR StartingS;
963 UCHAR StartingF;
964 UCHAR EndingM;
965 UCHAR EndingS;
966 UCHAR EndingF;
967 UCHAR Control;
968 } PLAY_AUDIO_MSF, *PPLAY_AUDIO_MSF;
969 struct _BLANK_MEDIA
970 {
971 UCHAR OperationCode;
972 UCHAR BlankType:3;
973 UCHAR Reserved1:1;
974 UCHAR Immediate:1;
975 UCHAR Reserved2:3;
976 UCHAR AddressOrTrack[4];
977 UCHAR Reserved3[5];
978 UCHAR Control;
979 } BLANK_MEDIA, *PBLANK_MEDIA;
980 struct _PLAY_CD
981 {
982 UCHAR OperationCode;
983 UCHAR Reserved1:1;
984 UCHAR CMSF:1;
985 UCHAR ExpectedSectorType:3;
986 UCHAR Lun:3;
987 _ANONYMOUS_UNION union
988 {
989 struct _LBA
990 {
991 UCHAR StartingBlockAddress[4];
992 UCHAR PlayLength[4];
993 } LBA;
994 struct _MSF
995 {
996 UCHAR Reserved1;
997 UCHAR StartingM;
998 UCHAR StartingS;
999 UCHAR StartingF;
1000 UCHAR EndingM;
1001 UCHAR EndingS;
1002 UCHAR EndingF;
1003 UCHAR Reserved2;
1004 } MSF;
1005 } DUMMYUNIONNAME;
1006 UCHAR Audio:1;
1007 UCHAR Composite:1;
1008 UCHAR Port1:1;
1009 UCHAR Port2:1;
1010 UCHAR Reserved2:3;
1011 UCHAR Speed:1;
1012 UCHAR Control;
1013 } PLAY_CD, *PPLAY_CD;
1014 struct _SCAN_CD
1015 {
1016 UCHAR OperationCode;
1017 UCHAR RelativeAddress:1;
1018 UCHAR Reserved1:3;
1019 UCHAR Direct:1;
1020 UCHAR Lun:3;
1021 UCHAR StartingAddress[4];
1022 UCHAR Reserved2[3];
1023 UCHAR Reserved3:6;
1024 UCHAR Type:2;
1025 UCHAR Reserved4;
1026 UCHAR Control;
1027 } SCAN_CD, *PSCAN_CD;
1028 struct _STOP_PLAY_SCAN
1029 {
1030 UCHAR OperationCode;
1031 UCHAR Reserved1:5;
1032 UCHAR Lun:3;
1033 UCHAR Reserved2[7];
1034 UCHAR Control;
1035 } STOP_PLAY_SCAN, *PSTOP_PLAY_SCAN;
1036 struct _SUBCHANNEL
1037 {
1038 UCHAR OperationCode;
1039 UCHAR Reserved0:1;
1040 UCHAR Msf:1;
1041 UCHAR Reserved1:3;
1042 UCHAR LogicalUnitNumber:3;
1043 UCHAR Reserved2:6;
1044 UCHAR SubQ:1;
1045 UCHAR Reserved3:1;
1046 UCHAR Format;
1047 UCHAR Reserved4[2];
1048 UCHAR TrackNumber;
1049 UCHAR AllocationLength[2];
1050 UCHAR Control;
1051 } SUBCHANNEL, *PSUBCHANNEL;
1052 struct _READ_CD
1053 {
1054 UCHAR OperationCode;
1055 UCHAR RelativeAddress:1;
1056 UCHAR Reserved0:1;
1057 UCHAR ExpectedSectorType:3;
1058 UCHAR Lun:3;
1059 UCHAR StartingLBA[4];
1060 UCHAR TransferBlocks[3];
1061 UCHAR Reserved2:1;
1062 UCHAR ErrorFlags:2;
1063 UCHAR IncludeEDC:1;
1064 UCHAR IncludeUserData:1;
1065 UCHAR HeaderCode:2;
1066 UCHAR IncludeSyncData:1;
1067 UCHAR SubChannelSelection:3;
1068 UCHAR Reserved3:5;
1069 UCHAR Control;
1070 } READ_CD, *PREAD_CD;
1071 struct _READ_CD_MSF
1072 {
1073 UCHAR OperationCode;
1074 UCHAR RelativeAddress:1;
1075 UCHAR Reserved1:1;
1076 UCHAR ExpectedSectorType:3;
1077 UCHAR Lun:3;
1078 UCHAR Reserved2;
1079 UCHAR StartingM;
1080 UCHAR StartingS;
1081 UCHAR StartingF;
1082 UCHAR EndingM;
1083 UCHAR EndingS;
1084 UCHAR EndingF;
1085 UCHAR Reserved3;
1086 UCHAR Reserved4:1;
1087 UCHAR ErrorFlags:2;
1088 UCHAR IncludeEDC:1;
1089 UCHAR IncludeUserData:1;
1090 UCHAR HeaderCode:2;
1091 UCHAR IncludeSyncData:1;
1092 UCHAR SubChannelSelection:3;
1093 UCHAR Reserved5:5;
1094 UCHAR Control;
1095 } READ_CD_MSF, *PREAD_CD_MSF;
1096 struct _PLXTR_READ_CDDA
1097 {
1098 UCHAR OperationCode;
1099 UCHAR Reserved0:5;
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;
1109 UCHAR SubCode;
1110 UCHAR Control;
1111 } PLXTR_READ_CDDA, *PPLXTR_READ_CDDA;
1112 struct _NEC_READ_CDDA
1113 {
1114 UCHAR OperationCode;
1115 UCHAR Reserved0;
1116 UCHAR LogicalBlockByte0;
1117 UCHAR LogicalBlockByte1;
1118 UCHAR LogicalBlockByte2;
1119 UCHAR LogicalBlockByte3;
1120 UCHAR Reserved1;
1121 UCHAR TransferBlockByte0;
1122 UCHAR TransferBlockByte1;
1123 UCHAR Control;
1124 } NEC_READ_CDDA, *PNEC_READ_CDDA;
1125 struct _MODE_SENSE
1126 {
1127 UCHAR OperationCode;
1128 UCHAR Reserved1:3;
1129 UCHAR Dbd:1;
1130 UCHAR Reserved2:1;
1131 UCHAR LogicalUnitNumber:3;
1132 UCHAR PageCode:6;
1133 UCHAR Pc:2;
1134 UCHAR Reserved3;
1135 UCHAR AllocationLength;
1136 UCHAR Control;
1137 } MODE_SENSE, *PMODE_SENSE;
1138 struct _MODE_SENSE10
1139 {
1140 UCHAR OperationCode;
1141 UCHAR Reserved1:3;
1142 UCHAR Dbd:1;
1143 UCHAR Reserved2:1;
1144 UCHAR LogicalUnitNumber:3;
1145 UCHAR PageCode:6;
1146 UCHAR Pc:2;
1147 UCHAR Reserved3[4];
1148 UCHAR AllocationLength[2];
1149 UCHAR Control;
1150 } MODE_SENSE10, *PMODE_SENSE10;
1151 struct _MODE_SELECT
1152 {
1153 UCHAR OperationCode;
1154 UCHAR SPBit:1;
1155 UCHAR Reserved1:3;
1156 UCHAR PFBit:1;
1157 UCHAR LogicalUnitNumber:3;
1158 UCHAR Reserved2[2];
1159 UCHAR ParameterListLength;
1160 UCHAR Control;
1161 } MODE_SELECT, *PMODE_SELECT;
1162 struct _MODE_SELECT10
1163 {
1164 UCHAR OperationCode;
1165 UCHAR SPBit:1;
1166 UCHAR Reserved1:3;
1167 UCHAR PFBit:1;
1168 UCHAR LogicalUnitNumber:3;
1169 UCHAR Reserved2[5];
1170 UCHAR ParameterListLength[2];
1171 UCHAR Control;
1172 } MODE_SELECT10, *PMODE_SELECT10;
1173 struct _LOCATE
1174 {
1175 UCHAR OperationCode;
1176 UCHAR Immediate:1;
1177 UCHAR CPBit:1;
1178 UCHAR BTBit:1;
1179 UCHAR Reserved1:2;
1180 UCHAR LogicalUnitNumber:3;
1181 UCHAR Reserved3;
1182 UCHAR LogicalBlockAddress[4];
1183 UCHAR Reserved4;
1184 UCHAR Partition;
1185 UCHAR Control;
1186 } LOCATE, *PLOCATE;
1187 struct _LOGSENSE
1188 {
1189 UCHAR OperationCode;
1190 UCHAR SPBit:1;
1191 UCHAR PPCBit:1;
1192 UCHAR Reserved1:3;
1193 UCHAR LogicalUnitNumber:3;
1194 UCHAR PageCode:6;
1195 UCHAR PCBit:2;
1196 UCHAR Reserved2;
1197 UCHAR Reserved3;
1198 UCHAR ParameterPointer[2];
1199 UCHAR AllocationLength[2];
1200 UCHAR Control;
1201 } LOGSENSE, *PLOGSENSE;
1202 struct _LOGSELECT
1203 {
1204 UCHAR OperationCode;
1205 UCHAR SPBit:1;
1206 UCHAR PCRBit:1;
1207 UCHAR Reserved1:3;
1208 UCHAR LogicalUnitNumber:3;
1209 UCHAR Reserved:6;
1210 UCHAR PCBit:2;
1211 UCHAR Reserved2[4];
1212 UCHAR ParameterListLength[2];
1213 UCHAR Control;
1214 } LOGSELECT, *PLOGSELECT;
1215 struct _PRINT
1216 {
1217 UCHAR OperationCode;
1218 UCHAR Reserved:5;
1219 UCHAR LogicalUnitNumber:3;
1220 UCHAR TransferLength[3];
1221 UCHAR Control;
1222 } PRINT, *PPRINT;
1223 struct _SEEK
1224 {
1225 UCHAR OperationCode;
1226 UCHAR Reserved1:5;
1227 UCHAR LogicalUnitNumber:3;
1228 UCHAR LogicalBlockAddress[4];
1229 UCHAR Reserved2[3];
1230 UCHAR Control;
1231 } SEEK, *PSEEK;
1232 struct _ERASE
1233 {
1234 UCHAR OperationCode;
1235 UCHAR Long:1;
1236 UCHAR Immediate:1;
1237 UCHAR Reserved1:3;
1238 UCHAR LogicalUnitNumber:3;
1239 UCHAR Reserved2[3];
1240 UCHAR Control;
1241 } ERASE, *PERASE;
1242 struct _START_STOP
1243 {
1244 UCHAR OperationCode;
1245 UCHAR Immediate:1;
1246 UCHAR Reserved1:4;
1247 UCHAR LogicalUnitNumber:3;
1248 UCHAR Reserved2[2];
1249 UCHAR Start:1;
1250 UCHAR LoadEject:1;
1251 UCHAR Reserved3:6;
1252 UCHAR Control;
1253 } START_STOP, *PSTART_STOP;
1254 struct _MEDIA_REMOVAL
1255 {
1256 UCHAR OperationCode;
1257 UCHAR Reserved1:5;
1258 UCHAR LogicalUnitNumber:3;
1259 UCHAR Reserved2[2];
1260 UCHAR Prevent:1;
1261 UCHAR Persistant:1;
1262 UCHAR Reserved3:6;
1263 UCHAR Control;
1264 } MEDIA_REMOVAL, *PMEDIA_REMOVAL;
1265 struct _SEEK_BLOCK
1266 {
1267 UCHAR OperationCode;
1268 UCHAR Immediate:1;
1269 UCHAR Reserved1:7;
1270 UCHAR BlockAddress[3];
1271 UCHAR Link:1;
1272 UCHAR Flag:1;
1273 UCHAR Reserved2:4;
1274 UCHAR VendorUnique:2;
1275 } SEEK_BLOCK, *PSEEK_BLOCK;
1276 struct _REQUEST_BLOCK_ADDRESS
1277 {
1278 UCHAR OperationCode;
1279 UCHAR Reserved1[3];
1280 UCHAR AllocationLength;
1281 UCHAR Link:1;
1282 UCHAR Flag:1;
1283 UCHAR Reserved2:4;
1284 UCHAR VendorUnique:2;
1285 } REQUEST_BLOCK_ADDRESS, *PREQUEST_BLOCK_ADDRESS;
1286 struct _PARTITION
1287 {
1288 UCHAR OperationCode;
1289 UCHAR Immediate:1;
1290 UCHAR Sel:1;
1291 UCHAR PartitionSelect:6;
1292 UCHAR Reserved1[3];
1293 UCHAR Control;
1294 } PARTITION, *PPARTITION;
1295 struct _WRITE_TAPE_MARKS
1296 {
1297 UCHAR OperationCode;
1298 UCHAR Immediate:1;
1299 UCHAR WriteSetMarks:1;
1300 UCHAR Reserved:3;
1301 UCHAR LogicalUnitNumber:3;
1302 UCHAR TransferLength[3];
1303 UCHAR Control;
1304 } WRITE_TAPE_MARKS, *PWRITE_TAPE_MARKS;
1305 struct _SPACE_TAPE_MARKS
1306 {
1307 UCHAR OperationCode;
1308 UCHAR Code:3;
1309 UCHAR Reserved:2;
1310 UCHAR LogicalUnitNumber:3;
1311 UCHAR NumMarksMSB;
1312 UCHAR NumMarks;
1313 UCHAR NumMarksLSB;
1314 union
1315 {
1316 UCHAR value;
1317 struct
1318 {
1319 UCHAR Link:1;
1320 UCHAR Flag:1;
1321 UCHAR Reserved:4;
1322 UCHAR VendorUnique:2;
1323 } Fields;
1324 } Byte6;
1325 } SPACE_TAPE_MARKS, *PSPACE_TAPE_MARKS;
1326 struct _READ_POSITION
1327 {
1328 UCHAR Operation;
1329 UCHAR BlockType:1;
1330 UCHAR Reserved1:4;
1331 UCHAR Lun:3;
1332 UCHAR Reserved2[7];
1333 UCHAR Control;
1334 } READ_POSITION, *PREAD_POSITION;
1335 struct _CDB6READWRITETAPE
1336 {
1337 UCHAR OperationCode;
1338 UCHAR VendorSpecific:5;
1339 UCHAR Reserved:3;
1340 UCHAR TransferLenMSB;
1341 UCHAR TransferLen;
1342 UCHAR TransferLenLSB;
1343 UCHAR Link:1;
1344 UCHAR Flag:1;
1345 UCHAR Reserved1:4;
1346 UCHAR VendorUnique:2;
1347 } CDB6READWRITETAPE, *PCDB6READWRITETAPE;
1348 struct _INIT_ELEMENT_STATUS
1349 {
1350 UCHAR OperationCode;
1351 UCHAR Reserved1:5;
1352 UCHAR LogicalUnitNubmer:3;
1353 UCHAR Reserved2[3];
1354 UCHAR Reserved3:7;
1355 UCHAR NoBarCode:1;
1356 } INIT_ELEMENT_STATUS, *PINIT_ELEMENT_STATUS;
1357 struct _INITIALIZE_ELEMENT_RANGE
1358 {
1359 UCHAR OperationCode;
1360 UCHAR Range:1;
1361 UCHAR Reserved1:4;
1362 UCHAR LogicalUnitNubmer:3;
1363 UCHAR FirstElementAddress[2];
1364 UCHAR Reserved2[2];
1365 UCHAR NumberOfElements[2];
1366 UCHAR Reserved3;
1367 UCHAR Reserved4:7;
1368 UCHAR NoBarCode:1;
1369 } INITIALIZE_ELEMENT_RANGE, *PINITIALIZE_ELEMENT_RANGE;
1370 struct _POSITION_TO_ELEMENT
1371 {
1372 UCHAR OperationCode;
1373 UCHAR Reserved1:5;
1374 UCHAR LogicalUnitNumber:3;
1375 UCHAR TransportElementAddress[2];
1376 UCHAR DestinationElementAddress[2];
1377 UCHAR Reserved2[2];
1378 UCHAR Flip:1;
1379 UCHAR Reserved3:7;
1380 UCHAR Control;
1381 } POSITION_TO_ELEMENT, *PPOSITION_TO_ELEMENT;
1382 struct _MOVE_MEDIUM
1383 {
1384 UCHAR OperationCode;
1385 UCHAR Reserved1:5;
1386 UCHAR LogicalUnitNumber:3;
1387 UCHAR TransportElementAddress[2];
1388 UCHAR SourceElementAddress[2];
1389 UCHAR DestinationElementAddress[2];
1390 UCHAR Reserved2[2];
1391 UCHAR Flip:1;
1392 UCHAR Reserved3:7;
1393 UCHAR Control;
1394 } MOVE_MEDIUM, *PMOVE_MEDIUM;
1395 struct _EXCHANGE_MEDIUM
1396 {
1397 UCHAR OperationCode;
1398 UCHAR Reserved1:5;
1399 UCHAR LogicalUnitNumber:3;
1400 UCHAR TransportElementAddress[2];
1401 UCHAR SourceElementAddress[2];
1402 UCHAR Destination1ElementAddress[2];
1403 UCHAR Destination2ElementAddress[2];
1404 UCHAR Flip1:1;
1405 UCHAR Flip2:1;
1406 UCHAR Reserved3:6;
1407 UCHAR Control;
1408 } EXCHANGE_MEDIUM, *PEXCHANGE_MEDIUM;
1409 struct _READ_ELEMENT_STATUS
1410 {
1411 UCHAR OperationCode;
1412 UCHAR ElementType:4;
1413 UCHAR VolTag:1;
1414 UCHAR LogicalUnitNumber:3;
1415 UCHAR StartingElementAddress[2];
1416 UCHAR NumberOfElements[2];
1417 UCHAR Reserved1;
1418 UCHAR AllocationLength[3];
1419 UCHAR Reserved2;
1420 UCHAR Control;
1421 } READ_ELEMENT_STATUS, *PREAD_ELEMENT_STATUS;
1422 struct _SEND_VOLUME_TAG
1423 {
1424 UCHAR OperationCode;
1425 UCHAR ElementType:4;
1426 UCHAR Reserved1:1;
1427 UCHAR LogicalUnitNumber:3;
1428 UCHAR StartingElementAddress[2];
1429 UCHAR Reserved2;
1430 UCHAR ActionCode:5;
1431 UCHAR Reserved3:3;
1432 UCHAR Reserved4[2];
1433 UCHAR ParameterListLength[2];
1434 UCHAR Reserved5;
1435 UCHAR Control;
1436 } SEND_VOLUME_TAG, *PSEND_VOLUME_TAG;
1437 struct _REQUEST_VOLUME_ELEMENT_ADDRESS
1438 {
1439 UCHAR OperationCode;
1440 UCHAR ElementType:4;
1441 UCHAR VolTag:1;
1442 UCHAR LogicalUnitNumber:3;
1443 UCHAR StartingElementAddress[2];
1444 UCHAR NumberElements[2];
1445 UCHAR Reserved1;
1446 UCHAR AllocationLength[3];
1447 UCHAR Reserved2;
1448 UCHAR Control;
1449 } REQUEST_VOLUME_ELEMENT_ADDRESS, *PREQUEST_VOLUME_ELEMENT_ADDRESS;
1450 struct _LOAD_UNLOAD
1451 {
1452 UCHAR OperationCode;
1453 UCHAR Immediate:1;
1454 UCHAR Reserved1:4;
1455 UCHAR Lun:3;
1456 UCHAR Reserved2[2];
1457 UCHAR Start:1;
1458 UCHAR LoadEject:1;
1459 UCHAR Reserved3:6;
1460 UCHAR Reserved4[3];
1461 UCHAR Slot;
1462 UCHAR Reserved5[3];
1463 } LOAD_UNLOAD, *PLOAD_UNLOAD;
1464 struct _MECH_STATUS
1465 {
1466 UCHAR OperationCode;
1467 UCHAR Reserved:5;
1468 UCHAR Lun:3;
1469 UCHAR Reserved1[6];
1470 UCHAR AllocationLength[2];
1471 UCHAR Reserved2[1];
1472 UCHAR Control;
1473 } MECH_STATUS, *PMECH_STATUS;
1474 struct _SYNCHRONIZE_CACHE10
1475 {
1476 UCHAR OperationCode;
1477 UCHAR RelAddr:1;
1478 UCHAR Immediate:1;
1479 UCHAR Reserved:3;
1480 UCHAR Lun:3;
1481 UCHAR LogicalBlockAddress[4];
1482 UCHAR Reserved2;
1483 UCHAR BlockCount[2];
1484 UCHAR Control;
1485 } SYNCHRONIZE_CACHE10, *PSYNCHRONIZE_CACHE10;
1486 struct _GET_EVENT_STATUS_NOTIFICATION
1487 {
1488 UCHAR OperationCode;
1489 UCHAR Immediate:1;
1490 UCHAR Reserved:4;
1491 UCHAR Lun:3;
1492 UCHAR Reserved2[2];
1493 UCHAR NotificationClassRequest;
1494 UCHAR Reserved3[2];
1495 UCHAR EventListLength[2];
1496 UCHAR Control;
1497 } GET_EVENT_STATUS_NOTIFICATION, *PGET_EVENT_STATUS_NOTIFICATION;
1498 struct _GET_PERFORMANCE
1499 {
1500 UCHAR OperationCode;
1501 UCHAR Except:2;
1502 UCHAR Write:1;
1503 UCHAR Tolerance:2;
1504 UCHAR Reserved0:3;
1505 UCHAR StartingLBA[4];
1506 UCHAR Reserved1[2];
1507 UCHAR MaximumNumberOfDescriptors[2];
1508 UCHAR Type;
1509 UCHAR Control;
1510 } GET_PERFORMANCE;
1511 struct _READ_DVD_STRUCTURE
1512 {
1513 UCHAR OperationCode;
1514 UCHAR Reserved1:5;
1515 UCHAR Lun:3;
1516 UCHAR RMDBlockNumber[4];
1517 UCHAR LayerNumber;
1518 UCHAR Format;
1519 UCHAR AllocationLength[2];
1520 UCHAR Reserved3:6;
1521 UCHAR AGID:2;
1522 UCHAR Control;
1523 } READ_DVD_STRUCTURE, *PREAD_DVD_STRUCTURE;
1524 struct _SET_STREAMING
1525 {
1526 UCHAR OperationCode;
1527 UCHAR Reserved[8];
1528 UCHAR ParameterListLength[2];
1529 UCHAR Control;
1530 } SET_STREAMING;
1531 struct _SEND_DVD_STRUCTURE
1532 {
1533 UCHAR OperationCode;
1534 UCHAR Reserved1:5;
1535 UCHAR Lun:3;
1536 UCHAR Reserved2[5];
1537 UCHAR Format;
1538 UCHAR ParameterListLength[2];
1539 UCHAR Reserved3;
1540 UCHAR Control;
1541 } SEND_DVD_STRUCTURE, *PSEND_DVD_STRUCTURE;
1542 struct _SEND_KEY
1543 {
1544 UCHAR OperationCode;
1545 UCHAR Reserved1:5;
1546 UCHAR Lun:3;
1547 UCHAR Reserved2[6];
1548 UCHAR ParameterListLength[2];
1549 UCHAR KeyFormat:6;
1550 UCHAR AGID:2;
1551 UCHAR Control;
1552 } SEND_KEY, *PSEND_KEY;
1553 struct _REPORT_KEY
1554 {
1555 UCHAR OperationCode;
1556 UCHAR Reserved1:5;
1557 UCHAR Lun:3;
1558 UCHAR LogicalBlockAddress[4];
1559 UCHAR Reserved2[2];
1560 UCHAR AllocationLength[2];
1561 UCHAR KeyFormat:6;
1562 UCHAR AGID:2;
1563 UCHAR Control;
1564 } REPORT_KEY, *PREPORT_KEY;
1565 struct _SET_READ_AHEAD
1566 {
1567 UCHAR OperationCode;
1568 UCHAR Reserved1:5;
1569 UCHAR Lun:3;
1570 UCHAR TriggerLBA[4];
1571 UCHAR ReadAheadLBA[4];
1572 UCHAR Reserved2;
1573 UCHAR Control;
1574 } SET_READ_AHEAD, *PSET_READ_AHEAD;
1575 struct _READ_FORMATTED_CAPACITIES
1576 {
1577 UCHAR OperationCode;
1578 UCHAR Reserved1:5;
1579 UCHAR Lun:3;
1580 UCHAR Reserved2[5];
1581 UCHAR AllocationLength[2];
1582 UCHAR Control;
1583 } READ_FORMATTED_CAPACITIES, *PREAD_FORMATTED_CAPACITIES;
1584 struct _REPORT_LUNS
1585 {
1586 UCHAR OperationCode;
1587 UCHAR Reserved1[5];
1588 UCHAR AllocationLength[4];
1589 UCHAR Reserved2[1];
1590 UCHAR Control;
1591 } REPORT_LUNS, *PREPORT_LUNS;
1592 struct _PERSISTENT_RESERVE_IN
1593 {
1594 UCHAR OperationCode;
1595 UCHAR ServiceAction:5;
1596 UCHAR Reserved1:3;
1597 UCHAR Reserved2[5];
1598 UCHAR AllocationLength[2];
1599 UCHAR Control;
1600 } PERSISTENT_RESERVE_IN, *PPERSISTENT_RESERVE_IN;
1601 struct _PERSISTENT_RESERVE_OUT
1602 {
1603 UCHAR OperationCode;
1604 UCHAR ServiceAction:5;
1605 UCHAR Reserved1:3;
1606 UCHAR Type:4;
1607 UCHAR Scope:4;
1608 UCHAR Reserved2[4];
1609 UCHAR ParameterListLength[2];
1610 UCHAR Control;
1611 } PERSISTENT_RESERVE_OUT, *PPERSISTENT_RESERVE_OUT;
1612 struct _GET_CONFIGURATION
1613 {
1614 UCHAR OperationCode;
1615 UCHAR RequestType:1;
1616 UCHAR Reserved1:7;
1617 UCHAR StartingFeature[2];
1618 UCHAR Reserved2[3];
1619 UCHAR AllocationLength[2];
1620 UCHAR Control;
1621 } GET_CONFIGURATION, *PGET_CONFIGURATION;
1622 struct _SET_CD_SPEED
1623 {
1624 UCHAR OperationCode;
1625 _ANONYMOUS_UNION union
1626 {
1627 UCHAR Reserved1;
1628 _ANONYMOUS_STRUCT struct
1629 {
1630 UCHAR RotationControl:2;
1631 UCHAR Reserved3:6;
1632 } DUMMYSTRUCTNAME;
1633 } DUMMYUNIONNAME;
1634 UCHAR ReadSpeed[2];
1635 UCHAR WriteSpeed[2];
1636 UCHAR Reserved2[5];
1637 UCHAR Control;
1638 } SET_CD_SPEED, *PSET_CD_SPEED;
1639 struct _READ12
1640 {
1641 UCHAR OperationCode;
1642 UCHAR RelativeAddress:1;
1643 UCHAR Reserved1:2;
1644 UCHAR ForceUnitAccess:1;
1645 UCHAR DisablePageOut:1;
1646 UCHAR LogicalUnitNumber:3;
1647 UCHAR LogicalBlock[4];
1648 UCHAR TransferLength[4];
1649 UCHAR Reserved2:7;
1650 UCHAR Streaming:1;
1651 UCHAR Control;
1652 } READ12;
1653 struct _WRITE12
1654 {
1655 UCHAR OperationCode;
1656 UCHAR RelativeAddress:1;
1657 UCHAR Reserved1:1;
1658 UCHAR EBP:1;
1659 UCHAR ForceUnitAccess:1;
1660 UCHAR DisablePageOut:1;
1661 UCHAR LogicalUnitNumber:3;
1662 UCHAR LogicalBlock[4];
1663 UCHAR TransferLength[4];
1664 UCHAR Reserved2:7;
1665 UCHAR Streaming:1;
1666 UCHAR Control;
1667 } WRITE12;
1668 struct _READ16
1669 {
1670 UCHAR OperationCode;
1671 UCHAR Reserved1:3;
1672 UCHAR ForceUnitAccess:1;
1673 UCHAR DisablePageOut:1;
1674 UCHAR ReadProtect:3;
1675 UCHAR LogicalBlock[8];
1676 UCHAR TransferLength[4];
1677 UCHAR Reserved2:7;
1678 UCHAR Streaming:1;
1679 UCHAR Control;
1680 } READ16;
1681 struct _WRITE16
1682 {
1683 UCHAR OperationCode;
1684 UCHAR Reserved1:3;
1685 UCHAR ForceUnitAccess:1;
1686 UCHAR DisablePageOut:1;
1687 UCHAR WriteProtect:3;
1688 UCHAR LogicalBlock[8];
1689 UCHAR TransferLength[4];
1690 UCHAR Reserved2:7;
1691 UCHAR Streaming:1;
1692 UCHAR Control;
1693 } WRITE16;
1694 struct _VERIFY16
1695 {
1696 UCHAR OperationCode;
1697 UCHAR Reserved1:1;
1698 UCHAR ByteCheck:1;
1699 UCHAR BlockVerify:1;
1700 UCHAR Reserved2: 1;
1701 UCHAR DisablePageOut:1;
1702 UCHAR VerifyProtect:3;
1703 UCHAR LogicalBlock[8];
1704 UCHAR VerificationLength[4];
1705 UCHAR Reserved3:7;
1706 UCHAR Streaming:1;
1707 UCHAR Control;
1708 } VERIFY16;
1709 struct _SYNCHRONIZE_CACHE16
1710 {
1711 UCHAR OperationCode;
1712 UCHAR Reserved1:1;
1713 UCHAR Immediate:1;
1714 UCHAR Reserved2:6;
1715 UCHAR LogicalBlock[8];
1716 UCHAR BlockCount[4];
1717 UCHAR Reserved3;
1718 UCHAR Control;
1719 } SYNCHRONIZE_CACHE16;
1720 struct _READ_CAPACITY16
1721 {
1722 UCHAR OperationCode;
1723 UCHAR ServiceAction:5;
1724 UCHAR Reserved1:3;
1725 UCHAR LogicalBlock[8];
1726 UCHAR BlockCount[4];
1727 UCHAR PMI:1;
1728 UCHAR Reserved2:7;
1729 UCHAR Control;
1730 } READ_CAPACITY16;
1731 ULONG AsUlong[4];
1732 UCHAR AsByte[16];
1733 } CDB, *PCDB;
1734
1735 typedef union _EIGHT_BYTE
1736 {
1737 struct
1738 {
1739 UCHAR Byte0;
1740 UCHAR Byte1;
1741 UCHAR Byte2;
1742 UCHAR Byte3;
1743 UCHAR Byte4;
1744 UCHAR Byte5;
1745 UCHAR Byte6;
1746 UCHAR Byte7;
1747 };
1748 ULONGLONG AsULongLong;
1749 } EIGHT_BYTE, *PEIGHT_BYTE;
1750
1751 typedef union _FOUR_BYTE
1752 {
1753 struct
1754 {
1755 UCHAR Byte0;
1756 UCHAR Byte1;
1757 UCHAR Byte2;
1758 UCHAR Byte3;
1759 };
1760 ULONG AsULong;
1761 } FOUR_BYTE, *PFOUR_BYTE;
1762
1763 typedef union _TWO_BYTE
1764 {
1765 struct
1766 {
1767 UCHAR Byte0;
1768 UCHAR Byte1;
1769 };
1770 USHORT AsUShort;
1771 } TWO_BYTE, *PTWO_BYTE;
1772 #include <poppack.h>
1773
1774 #if (NTDDI_VERSION < NTDDI_WINXP)
1775 typedef struct _INQUIRYDATA
1776 {
1777 UCHAR DeviceType:5;
1778 UCHAR DeviceTypeQualifier:3;
1779 UCHAR DeviceTypeModifier:7;
1780 UCHAR RemovableMedia:1;
1781 UCHAR Versions;
1782 UCHAR ResponseDataFormat:4;
1783 UCHAR HiSupport:1;
1784 UCHAR NormACA:1;
1785 UCHAR ReservedBit:1;
1786 UCHAR AERC:1;
1787 UCHAR AdditionalLength;
1788 UCHAR Reserved[2];
1789 UCHAR SoftReset:1;
1790 UCHAR CommandQueue:1;
1791 UCHAR Reserved2:1;
1792 UCHAR LinkedCommands:1;
1793 UCHAR Synchronous:1;
1794 UCHAR Wide16Bit:1;
1795 UCHAR Wide32Bit:1;
1796 UCHAR RelativeAddressing:1;
1797 UCHAR VendorId[8];
1798 UCHAR ProductId[16];
1799 UCHAR ProductRevisionLevel[4];
1800 UCHAR VendorSpecific[20];
1801 UCHAR Reserved3[40];
1802 } INQUIRYDATA, *PINQUIRYDATA;
1803 #else
1804 #include <pshpack1.h>
1805 typedef struct _INQUIRYDATA
1806 {
1807 UCHAR DeviceType:5;
1808 UCHAR DeviceTypeQualifier:3;
1809 UCHAR DeviceTypeModifier:7;
1810 UCHAR RemovableMedia:1;
1811 union
1812 {
1813 UCHAR Versions;
1814 struct
1815 {
1816 UCHAR ANSIVersion:3;
1817 UCHAR ECMAVersion:3;
1818 UCHAR ISOVersion:2;
1819 };
1820 };
1821 UCHAR ResponseDataFormat:4;
1822 UCHAR HiSupport:1;
1823 UCHAR NormACA:1;
1824 UCHAR TerminateTask:1;
1825 UCHAR AERC:1;
1826 UCHAR AdditionalLength;
1827 UCHAR Reserved;
1828 UCHAR Addr16:1;
1829 UCHAR Addr32:1;
1830 UCHAR AckReqQ:1;
1831 UCHAR MediumChanger:1;
1832 UCHAR MultiPort:1;
1833 UCHAR ReservedBit2:1;
1834 UCHAR EnclosureServices:1;
1835 UCHAR ReservedBit3:1;
1836 UCHAR SoftReset:1;
1837 UCHAR CommandQueue:1;
1838 UCHAR TransferDisable:1;
1839 UCHAR LinkedCommands:1;
1840 UCHAR Synchronous:1;
1841 UCHAR Wide16Bit:1;
1842 UCHAR Wide32Bit:1;
1843 UCHAR RelativeAddressing:1;
1844 UCHAR VendorId[8];
1845 UCHAR ProductId[16];
1846 UCHAR ProductRevisionLevel[4];
1847 UCHAR VendorSpecific[20];
1848 UCHAR Reserved3[40];
1849 } INQUIRYDATA, *PINQUIRYDATA;
1850 #include <poppack.h>
1851 #endif
1852
1853 typedef struct _VPD_MEDIA_SERIAL_NUMBER_PAGE
1854 {
1855 UCHAR DeviceType:5;
1856 UCHAR DeviceTypeQualifier:3;
1857 UCHAR PageCode;
1858 UCHAR Reserved;
1859 UCHAR PageLength;
1860 UCHAR SerialNumber[0];
1861 } VPD_MEDIA_SERIAL_NUMBER_PAGE, *PVPD_MEDIA_SERIAL_NUMBER_PAGE;
1862
1863 typedef struct _VPD_SERIAL_NUMBER_PAGE
1864 {
1865 UCHAR DeviceType:5;
1866 UCHAR DeviceTypeQualifier:3;
1867 UCHAR PageCode;
1868 UCHAR Reserved;
1869 UCHAR PageLength;
1870 UCHAR SerialNumber[0];
1871 } VPD_SERIAL_NUMBER_PAGE, *PVPD_SERIAL_NUMBER_PAGE;
1872
1873 typedef struct _VPD_IDENTIFICATION_DESCRIPTOR
1874 {
1875 UCHAR CodeSet:4;
1876 UCHAR Reserved:4;
1877 UCHAR IdentifierType:4;
1878 UCHAR Association:2;
1879 UCHAR Reserved2:2;
1880 UCHAR Reserved3;
1881 UCHAR IdentifierLength;
1882 UCHAR Identifier[0];
1883 } VPD_IDENTIFICATION_DESCRIPTOR, *PVPD_IDENTIFICATION_DESCRIPTOR;
1884
1885 typedef struct _VPD_IDENTIFICATION_PAGE
1886 {
1887 UCHAR DeviceType:5;
1888 UCHAR DeviceTypeQualifier:3;
1889 UCHAR PageCode;
1890 UCHAR Reserved;
1891 UCHAR PageLength;
1892 UCHAR Descriptors[0];
1893 } VPD_IDENTIFICATION_PAGE, *PVPD_IDENTIFICATION_PAGE;
1894
1895 typedef struct _VPD_SUPPORTED_PAGES_PAGE
1896 {
1897 UCHAR DeviceType:5;
1898 UCHAR DeviceTypeQualifier:3;
1899 UCHAR PageCode;
1900 UCHAR Reserved;
1901 UCHAR PageLength;
1902 UCHAR SupportedPageList[0];
1903 } VPD_SUPPORTED_PAGES_PAGE, *PVPD_SUPPORTED_PAGES_PAGE;
1904
1905 #include <pshpack1.h>
1906 typedef struct _READ_CAPACITY_DATA
1907 {
1908 ULONG LogicalBlockAddress;
1909 ULONG BytesPerBlock;
1910 } READ_CAPACITY_DATA, *PREAD_CAPACITY_DATA;
1911
1912 typedef struct _READ_CAPACITY_DATA_EX
1913 {
1914 LARGE_INTEGER LogicalBlockAddress;
1915 ULONG BytesPerBlock;
1916 } READ_CAPACITY_DATA_EX, *PREAD_CAPACITY_DATA_EX;
1917
1918 typedef struct _MODE_PARAMETER_HEADER
1919 {
1920 UCHAR ModeDataLength;
1921 UCHAR MediumType;
1922 UCHAR DeviceSpecificParameter;
1923 UCHAR BlockDescriptorLength;
1924 }MODE_PARAMETER_HEADER, *PMODE_PARAMETER_HEADER;
1925
1926 typedef struct _MODE_PARAMETER_HEADER10
1927 {
1928 UCHAR ModeDataLength[2];
1929 UCHAR MediumType;
1930 UCHAR DeviceSpecificParameter;
1931 UCHAR Reserved[2];
1932 UCHAR BlockDescriptorLength[2];
1933 }MODE_PARAMETER_HEADER10, *PMODE_PARAMETER_HEADER10;
1934
1935 typedef struct _MODE_PARAMETER_BLOCK
1936 {
1937 UCHAR DensityCode;
1938 UCHAR NumberOfBlocks[3];
1939 UCHAR Reserved;
1940 UCHAR BlockLength[3];
1941 }MODE_PARAMETER_BLOCK, *PMODE_PARAMETER_BLOCK;
1942
1943 typedef struct _LUN_LIST
1944 {
1945 UCHAR LunListLength[4];
1946 UCHAR Reserved[4];
1947 #if !defined(__midl)
1948 UCHAR Lun[0][8];
1949 #endif
1950 } LUN_LIST, *PLUN_LIST;
1951
1952 typedef struct _SENSE_DATA
1953 {
1954 UCHAR ErrorCode:7;
1955 UCHAR Valid:1;
1956 UCHAR SegmentNumber;
1957 UCHAR SenseKey:4;
1958 UCHAR Reserved:1;
1959 UCHAR IncorrectLength:1;
1960 UCHAR EndOfMedia:1;
1961 UCHAR FileMark: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;
1970
1971 #include <poppack.h>
1972
1973 typedef PHYSICAL_ADDRESS STOR_PHYSICAL_ADDRESS;
1974
1975 typedef struct _ACCESS_RANGE
1976 {
1977 STOR_PHYSICAL_ADDRESS RangeStart;
1978 ULONG RangeLength;
1979 BOOLEAN RangeInMemory;
1980 } ACCESS_RANGE, *PACCESS_RANGE;
1981
1982 typedef struct _MEMORY_REGION
1983 {
1984 PUCHAR VirtualBase;
1985 PHYSICAL_ADDRESS PhysicalBase;
1986 ULONG Length;
1987 } MEMORY_REGION, *PMEMORY_REGION;
1988
1989 typedef struct _PORT_CONFIGURATION_INFORMATION
1990 {
1991 ULONG Length;
1992 ULONG SystemIoBusNumber;
1993 INTERFACE_TYPE AdapterInterfaceType;
1994 ULONG BusInterruptLevel;
1995 ULONG BusInterruptVector;
1996 KINTERRUPT_MODE InterruptMode;
1997 ULONG MaximumTransferLength;
1998 ULONG NumberOfPhysicalBreaks;
1999 ULONG DmaChannel;
2000 ULONG DmaPort;
2001 DMA_WIDTH DmaWidth;
2002 DMA_SPEED DmaSpeed;
2003 ULONG AlignmentMask;
2004 ULONG NumberOfAccessRanges;
2005 ACCESS_RANGE (*AccessRanges)[];
2006 PVOID Reserved;
2007 UCHAR NumberOfBuses;
2008 CCHAR InitiatorBusId[8];
2009 BOOLEAN ScatterGather;
2010 BOOLEAN Master;
2011 BOOLEAN CachesData;
2012 BOOLEAN AdapterScansDown;
2013 BOOLEAN AtdiskPrimaryClaimed;
2014 BOOLEAN AtdiskSecondaryClaimed;
2015 BOOLEAN Dma32BitAddresses;
2016 BOOLEAN DemandMode;
2017 UCHAR MapBuffers;
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];
2027 ULONG SlotNumber;
2028 ULONG BusInterruptLevel2;
2029 ULONG BusInterruptVector2;
2030 KINTERRUPT_MODE InterruptMode2;
2031 ULONG DmaChannel2;
2032 ULONG DmaPort2;
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;
2044
2045 typedef struct _STOR_SCATTER_GATHER_ELEMENT
2046 {
2047 STOR_PHYSICAL_ADDRESS PhysicalAddress;
2048 ULONG Length;
2049 ULONG_PTR Reserved;
2050 } STOR_SCATTER_GATHER_ELEMENT, *PSTOR_SCATTER_GATHER_ELEMENT;
2051
2052 typedef struct _STOR_SCATTER_GATHER_LIST
2053 {
2054 ULONG NumberOfElements;
2055 ULONG_PTR Reserved;
2056 STOR_SCATTER_GATHER_ELEMENT List[];
2057 } STOR_SCATTER_GATHER_LIST, *PSTOR_SCATTER_GATHER_LIST;
2058
2059 typedef struct _DPC_BUFFER
2060 {
2061 CSHORT Type;
2062 UCHAR Number;
2063 UCHAR Importance;
2064 struct
2065 {
2066 PVOID F;
2067 PVOID B;
2068 };
2069 PVOID DeferredRoutine;
2070 PVOID DeferredContext;
2071 PVOID SystemArgument1;
2072 PVOID SystemArgument2;
2073 PVOID DpcData;
2074 } DPC_BUFFER;
2075
2076 typedef struct _STOR_DPC
2077 {
2078 DPC_BUFFER Dpc;
2079 ULONG_PTR Lock;
2080 } STOR_DPC, *PSTOR_DPC;
2081
2082 typedef struct _STOR_LOCK_HANDLE
2083 {
2084 STOR_SPINLOCK Lock;
2085 struct
2086 {
2087 struct
2088 {
2089 PVOID Next;
2090 PVOID Lock;
2091 } LockQueue;
2092 KIRQL OldIrql;
2093 } Context;
2094 } STOR_LOCK_HANDLE, *PSTOR_LOCK_HANDLE;
2095
2096 typedef struct _STOR_LOG_EVENT_DETAILS
2097 {
2098 ULONG InterfaceRevision;
2099 ULONG Size;
2100 ULONG Flags;
2101 STOR_EVENT_ASSOCIATION_ENUM EventAssociation;
2102 ULONG PathId;
2103 ULONG TargetId;
2104 ULONG LunId;
2105 BOOLEAN StorportSpecificErrorCode;
2106 ULONG ErrorCode;
2107 ULONG UniqueId;
2108 ULONG DumpDataSize;
2109 PVOID DumpData;
2110 ULONG StringCount;
2111 PWSTR *StringList;
2112 } STOR_LOG_EVENT_DETAILS, *PSTOR_LOG_EVENT_DETAILS;
2113
2114 typedef struct _PERF_CONFIGURATION_DATA
2115 {
2116 ULONG Version;
2117 ULONG Size;
2118 ULONG Flags;
2119 ULONG ConcurrentChannels;
2120 ULONG FirstRedirectionMessageNumber, LastRedirectionMessageNumber;
2121 ULONG DeviceNode;
2122 ULONG Reserved;
2123 PGROUP_AFFINITY MessageTargets;
2124 } PERF_CONFIGURATION_DATA, *PPERF_CONFIGURATION_DATA;
2125
2126 typedef struct _STARTIO_PERFORMANCE_PARAMETERS
2127 {
2128 ULONG Version;
2129 ULONG Size;
2130 ULONG MessageNumber;
2131 ULONG ChannelNumber;
2132 } STARTIO_PERFORMANCE_PARAMETERS, *PSTARTIO_PERFORMANCE_PARAMETERS;
2133
2134 typedef struct _MESSAGE_INTERRUPT_INFORMATION
2135 {
2136 ULONG MessageId;
2137 ULONG MessageData;
2138 STOR_PHYSICAL_ADDRESS MessageAddress;
2139 ULONG InterruptVector;
2140 ULONG InterruptLevel;
2141 KINTERRUPT_MODE InterruptMode;
2142 } MESSAGE_INTERRUPT_INFORMATION, *PMESSAGE_INTERRUPT_INFORMATION;
2143
2144 typedef
2145 BOOLEAN
2146 (NTAPI *PHW_INITIALIZE)(
2147 _In_ PVOID DeviceExtension);
2148
2149 typedef
2150 BOOLEAN
2151 (NTAPI *PHW_BUILDIO)(
2152 _In_ PVOID DeviceExtension,
2153 _In_ PSCSI_REQUEST_BLOCK Srb);
2154
2155 typedef
2156 BOOLEAN
2157 (NTAPI *PHW_STARTIO)(
2158 _In_ PVOID DeviceExtension,
2159 _In_ PSCSI_REQUEST_BLOCK Srb);
2160
2161 typedef
2162 BOOLEAN
2163 (NTAPI *PHW_INTERRUPT)(
2164 _In_ PVOID DeviceExtension);
2165
2166 typedef
2167 VOID
2168 (NTAPI *PHW_TIMER)(
2169 _In_ PVOID DeviceExtension);
2170
2171 typedef
2172 VOID
2173 (NTAPI *PHW_DMA_STARTED)(
2174 _In_ PVOID DeviceExtension);
2175
2176 typedef
2177 ULONG
2178 (NTAPI *PHW_FIND_ADAPTER)(
2179 IN PVOID DeviceExtension,
2180 IN PVOID HwContext,
2181 IN PVOID BusInformation,
2182 IN PCHAR ArgumentString,
2183 IN OUT PPORT_CONFIGURATION_INFORMATION ConfigInfo,
2184 OUT PBOOLEAN Again);
2185
2186 typedef
2187 BOOLEAN
2188 (NTAPI *PHW_RESET_BUS)(
2189 IN PVOID DeviceExtension,
2190 IN ULONG PathId);
2191
2192 typedef
2193 BOOLEAN
2194 (NTAPI *PHW_ADAPTER_STATE)(
2195 IN PVOID DeviceExtension,
2196 IN PVOID Context,
2197 IN BOOLEAN SaveState);
2198
2199 typedef
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);
2205
2206 typedef
2207 BOOLEAN
2208 (*PHW_PASSIVE_INITIALIZE_ROUTINE)(
2209 _In_ PVOID DeviceExtension);
2210
2211 typedef
2212 VOID
2213 (*PHW_DPC_ROUTINE)(
2214 _In_ PSTOR_DPC Dpc,
2215 _In_ PVOID HwDeviceExtension,
2216 _In_ PVOID SystemArgument1,
2217 _In_ PVOID SystemArgument2);
2218
2219 typedef
2220 BOOLEAN
2221 (NTAPI STOR_SYNCHRONIZED_ACCESS)(
2222 _In_ PVOID HwDeviceExtension,
2223 _In_ PVOID Context);
2224
2225 typedef STOR_SYNCHRONIZED_ACCESS *PSTOR_SYNCHRONIZED_ACCESS;
2226
2227 typedef
2228 VOID
2229 (NTAPI *PpostScaterGatherExecute)(
2230 _In_ PVOID *DeviceObject,
2231 _In_ PVOID *Irp,
2232 _In_ PSTOR_SCATTER_GATHER_LIST ScatterGather,
2233 _In_ PVOID Context);
2234
2235 typedef
2236 BOOLEAN
2237 (NTAPI *PStorPortGetMessageInterruptInformation)(
2238 _In_ PVOID HwDeviceExtension,
2239 _In_ ULONG MessageId,
2240 _Out_ PMESSAGE_INTERRUPT_INFORMATION InterruptInfo);
2241
2242 typedef
2243 VOID
2244 (NTAPI *PStorPortPutScatterGatherList)(
2245 _In_ PVOID HwDeviceExtension,
2246 _In_ PSTOR_SCATTER_GATHER_LIST ScatterGatherList,
2247 _In_ BOOLEAN WriteToDevice);
2248
2249 typedef
2250 GETSGSTATUS
2251 (NTAPI *PStorPortBuildScatterGatherList)(
2252 _In_ PVOID HwDeviceExtension,
2253 _In_ PVOID Mdl,
2254 _In_ PVOID CurrentVa,
2255 _In_ ULONG Length,
2256 _In_ PpostScaterGatherExecute ExecutionRoutine,
2257 _In_ PVOID Context,
2258 _In_ BOOLEAN WriteToDevice,
2259 _Inout_ PVOID ScatterGatherBuffer,
2260 _In_ ULONG ScatterGatherBufferLength);
2261
2262 typedef
2263 VOID
2264 (NTAPI *PStorPortFreePool)(
2265 _In_ PVOID PMemory,
2266 _In_ PVOID HwDeviceExtension,
2267 _In_opt_ PVOID PMdl);
2268
2269 typedef
2270 PVOID
2271 (NTAPI *PStorPortAllocatePool)(
2272 _In_ ULONG NumberOfBytes,
2273 _In_ ULONG Tag,
2274 _In_ PVOID HwDeviceExtension,
2275 _Out_ PVOID *PMdl);
2276
2277 typedef
2278 PVOID
2279 (NTAPI *PStorPortGetSystemAddress)(
2280 _In_ PSCSI_REQUEST_BLOCK Srb);
2281
2282 typedef struct _STORPORT_EXTENDED_FUNCTIONS
2283 {
2284 ULONG Version;
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;
2292
2293 typedef struct _HW_INITIALIZATION_DATA
2294 {
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;
2308 PVOID Reserved;
2309 UCHAR MapBuffers;
2310 BOOLEAN NeedPhysicalAddresses;
2311 BOOLEAN TaggedQueuing;
2312 BOOLEAN AutoRequestSense;
2313 BOOLEAN MultipleRequestPerLu;
2314 BOOLEAN ReceiveEvent;
2315 USHORT VendorIdLength;
2316 PVOID VendorId;
2317 USHORT ReservedUshort;
2318 USHORT DeviceIdLength;
2319 PVOID DeviceId;
2320 PHW_ADAPTER_CONTROL HwAdapterControl;
2321 PHW_BUILDIO HwBuildIo;
2322 } HW_INITIALIZATION_DATA, *PHW_INITIALIZATION_DATA;
2323
2324
2325
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; \
2337 }
2338
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; \
2346 }
2347
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; \
2353 }
2354
2355 #define StorPortCopyMemory(Destination,Source,Length) memcpy((Destination),(Source),(Length))
2356
2357 STORPORT_API
2358 PUCHAR
2359 NTAPI
2360 StorPortAllocateRegistryBuffer(
2361 _In_ PVOID HwDeviceExtension,
2362 _In_ PULONG Length);
2363
2364 STORPORT_API
2365 BOOLEAN
2366 NTAPI
2367 StorPortBusy(
2368 _In_ PVOID HwDeviceExtension,
2369 _In_ ULONG RequestsToComplete);
2370
2371 STORPORT_API
2372 VOID
2373 NTAPI
2374 StorPortCompleteRequest(
2375 _In_ PVOID HwDeviceExtension,
2376 _In_ UCHAR PathId,
2377 _In_ UCHAR TargetId,
2378 _In_ UCHAR Lun,
2379 _In_ UCHAR SrbStatus);
2380
2381 STORPORT_API
2382 ULONG64
2383 NTAPI
2384 StorPortConvertPhysicalAddressToUlong64(
2385 _In_ STOR_PHYSICAL_ADDRESS Address);
2386
2387 STORPORT_API
2388 STOR_PHYSICAL_ADDRESS
2389 NTAPI
2390 StorPortConvertUlong64ToPhysicalAddress(
2391 _In_ ULONG64 UlongAddress);
2392
2393 STORPORT_API
2394 VOID
2395 __cdecl
2396 StorPortDebugPrint(
2397 _In_ ULONG DebugPrintLevel,
2398 _In_ PCCHAR DebugMessage,
2399 ...);
2400
2401 STORPORT_API
2402 BOOLEAN
2403 NTAPI
2404 StorPortDeviceBusy(
2405 _In_ PVOID HwDeviceExtension,
2406 _In_ UCHAR PathId,
2407 _In_ UCHAR TargetId,
2408 _In_ UCHAR Lun,
2409 _In_ ULONG RequestsToComplete);
2410
2411 STORPORT_API
2412 BOOLEAN
2413 NTAPI
2414 StorPortDeviceReady(
2415 _In_ PVOID HwDeviceExtension,
2416 _In_ UCHAR PathId,
2417 _In_ UCHAR TargetId,
2418 _In_ UCHAR Lun);
2419
2420 STORPORT_API
2421 VOID
2422 NTAPI
2423 StorPortFreeDeviceBase(
2424 _In_ PVOID HwDeviceExtension,
2425 _In_ PVOID MappedAddress);
2426
2427 STORPORT_API
2428 VOID
2429 NTAPI
2430 StorPortFreeRegistryBuffer(
2431 _In_ PVOID HwDeviceExtension,
2432 _In_ PUCHAR Buffer);
2433
2434 STORPORT_API
2435 ULONG
2436 NTAPI
2437 StorPortGetBusData(
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,
2443 _In_ ULONG Length);
2444
2445 STORPORT_API
2446 PVOID
2447 NTAPI
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);
2455
2456 STORPORT_API
2457 PVOID
2458 NTAPI
2459 StorPortGetLogicalUnit(
2460 _In_ PVOID HwDeviceExtension,
2461 _In_ UCHAR PathId,
2462 _In_ UCHAR TargetId,
2463 _In_ UCHAR Lun);
2464
2465 STORPORT_API
2466 STOR_PHYSICAL_ADDRESS
2467 NTAPI
2468 StorPortGetPhysicalAddress(
2469 _In_ PVOID HwDeviceExtension,
2470 _In_opt_ PSCSI_REQUEST_BLOCK Srb,
2471 _In_ PVOID VirtualAddress,
2472 _Out_ ULONG *Length);
2473
2474 STORPORT_API
2475 PSTOR_SCATTER_GATHER_LIST
2476 NTAPI
2477 StorPortGetScatterGatherList(
2478 _In_ PVOID DeviceExtension,
2479 _In_ PSCSI_REQUEST_BLOCK Srb);
2480
2481 STORPORT_API
2482 PSCSI_REQUEST_BLOCK
2483 NTAPI
2484 StorPortGetSrb(
2485 _In_ PVOID DeviceExtension,
2486 _In_ UCHAR PathId,
2487 _In_ UCHAR TargetId,
2488 _In_ UCHAR Lun,
2489 _In_ LONG QueueTag);
2490
2491 STORPORT_API
2492 PVOID
2493 NTAPI
2494 StorPortGetUncachedExtension(
2495 _In_ PVOID HwDeviceExtension,
2496 _In_ PPORT_CONFIGURATION_INFORMATION ConfigInfo,
2497 _In_ ULONG NumberOfBytes);
2498
2499 STORPORT_API
2500 PVOID
2501 NTAPI
2502 StorPortGetVirtualAddress(
2503 _In_ PVOID HwDeviceExtension,
2504 _In_ STOR_PHYSICAL_ADDRESS PhysicalAddress);
2505
2506 STORPORT_API
2507 ULONG
2508 NTAPI
2509 StorPortInitialize(
2510 _In_ PVOID Argument1,
2511 _In_ PVOID Argument2,
2512 _In_ PHW_INITIALIZATION_DATA HwInitializationData,
2513 _In_opt_ PVOID Unused);
2514
2515 STORPORT_API
2516 VOID
2517 NTAPI
2518 StorPortLogError(
2519 _In_ PVOID HwDeviceExtension,
2520 _In_opt_ PSCSI_REQUEST_BLOCK Srb,
2521 _In_ UCHAR PathId,
2522 _In_ UCHAR TargetId,
2523 _In_ UCHAR Lun,
2524 _In_ ULONG ErrorCode,
2525 _In_ ULONG UniqueId);
2526
2527 STORPORT_API
2528 VOID
2529 NTAPI
2530 StorPortMoveMemory(
2531 _Out_writes_bytes_(Length) PVOID WriteBuffer,
2532 _In_reads_bytes_(Length) PVOID ReadBuffer,
2533 _In_ ULONG Length);
2534
2535 STORPORT_API
2536 VOID
2537 __cdecl
2538 StorPortNotification(
2539 _In_ SCSI_NOTIFICATION_TYPE NotificationType,
2540 _In_ PVOID HwDeviceExtension,
2541 ...);
2542
2543 STORPORT_API
2544 VOID
2545 NTAPI
2546 StorPortQuerySystemTime(
2547 _Out_ PLARGE_INTEGER CurrentTime);
2548
2549 STORPORT_API
2550 BOOLEAN
2551 NTAPI
2552 StorPortPause(
2553 _In_ PVOID HwDeviceExtension,
2554 _In_ ULONG TimeOut);
2555
2556 STORPORT_API
2557 BOOLEAN
2558 NTAPI
2559 StorPortPauseDevice(
2560 _In_ PVOID HwDeviceExtension,
2561 _In_ UCHAR PathId,
2562 _In_ UCHAR TargetId,
2563 _In_ UCHAR Lun,
2564 _In_ ULONG TimeOut);
2565
2566 STORPORT_API
2567 VOID
2568 NTAPI
2569 StorPortReadPortBufferUchar(
2570 _In_ PVOID HwDeviceExtension,
2571 _In_ PUCHAR Port,
2572 _In_ PUCHAR Buffer,
2573 _In_ ULONG Count);
2574
2575 STORPORT_API
2576 VOID
2577 NTAPI
2578 StorPortReadPortBufferUlong(
2579 _In_ PVOID HwDeviceExtension,
2580 _In_ PULONG Port,
2581 _In_ PULONG Buffer,
2582 _In_ ULONG Count);
2583
2584 STORPORT_API
2585 VOID
2586 NTAPI
2587 StorPortReadPortBufferUshort(
2588 _In_ PVOID HwDeviceExtension,
2589 _In_ PUSHORT Port,
2590 _In_ PUSHORT Buffer,
2591 _In_ ULONG Count);
2592
2593 STORPORT_API
2594 UCHAR
2595 NTAPI
2596 StorPortReadPortUchar(
2597 _In_ PVOID HwDeviceExtension,
2598 _In_ PUCHAR Port);
2599
2600 STORPORT_API
2601 ULONG
2602 NTAPI
2603 StorPortReadPortUlong(
2604 _In_ PVOID HwDeviceExtension,
2605 _In_ PULONG Port);
2606
2607 STORPORT_API
2608 USHORT
2609 NTAPI
2610 StorPortReadPortUshort(
2611 _In_ PVOID HwDeviceExtension,
2612 _In_ PUSHORT Port);
2613
2614 STORPORT_API
2615 VOID
2616 NTAPI
2617 StorPortReadRegisterBufferUchar(
2618 _In_ PVOID HwDeviceExtension,
2619 _In_ PUCHAR Register,
2620 _In_ PUCHAR Buffer,
2621 _In_ ULONG Count);
2622
2623 STORPORT_API
2624 VOID
2625 NTAPI
2626 StorPortReadRegisterBufferUlong(
2627 _In_ PVOID HwDeviceExtension,
2628 _In_ PULONG Register,
2629 _In_ PULONG Buffer,
2630 _In_ ULONG Count);
2631
2632 STORPORT_API
2633 VOID
2634 NTAPI
2635 StorPortReadRegisterBufferUshort(
2636 _In_ PVOID HwDeviceExtension,
2637 _In_ PUSHORT Register,
2638 _In_ PUSHORT Buffer,
2639 _In_ ULONG Count);
2640
2641 STORPORT_API
2642 UCHAR
2643 NTAPI
2644 StorPortReadRegisterUchar(
2645 _In_ PVOID HwDeviceExtension,
2646 _In_ PUCHAR Register);
2647
2648 STORPORT_API
2649 ULONG
2650 NTAPI
2651 StorPortReadRegisterUlong(
2652 _In_ PVOID HwDeviceExtension,
2653 _In_ PULONG Register);
2654
2655 STORPORT_API
2656 USHORT
2657 NTAPI
2658 StorPortReadRegisterUshort(
2659 _In_ PVOID HwDeviceExtension,
2660 _In_ PUSHORT Register);
2661
2662 STORPORT_API
2663 BOOLEAN
2664 NTAPI
2665 StorPortReady(
2666 _In_ PVOID HwDeviceExtension);
2667
2668 STORPORT_API
2669 BOOLEAN
2670 NTAPI
2671 StorPortRegistryRead(
2672 _In_ PVOID HwDeviceExtension,
2673 _In_ PUCHAR ValueName,
2674 _In_ ULONG Global,
2675 _In_ ULONG Type,
2676 _In_ PUCHAR Buffer,
2677 _In_ PULONG BufferLength);
2678
2679 STORPORT_API
2680 BOOLEAN
2681 NTAPI
2682 StorPortRegistryWrite(
2683 _In_ PVOID HwDeviceExtension,
2684 _In_ PUCHAR ValueName,
2685 _In_ ULONG Global,
2686 _In_ ULONG Type,
2687 _In_ PUCHAR Buffer,
2688 _In_ ULONG BufferLength);
2689
2690 STORPORT_API
2691 BOOLEAN
2692 NTAPI
2693 StorPortResume(
2694 _In_ PVOID HwDeviceExtension);
2695
2696 STORPORT_API
2697 BOOLEAN
2698 NTAPI
2699 StorPortResumeDevice(
2700 _In_ PVOID HwDeviceExtension,
2701 _In_ UCHAR PathId,
2702 _In_ UCHAR TargetId,
2703 _In_ UCHAR Lun);
2704
2705 STORPORT_API
2706 ULONG
2707 NTAPI
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,
2714 _In_ ULONG Offset,
2715 _In_ ULONG Length);
2716
2717 STORPORT_API
2718 BOOLEAN
2719 NTAPI
2720 StorPortSetDeviceQueueDepth(
2721 _In_ PVOID HwDeviceExtension,
2722 _In_ UCHAR PathId,
2723 _In_ UCHAR TargetId,
2724 _In_ UCHAR Lun,
2725 _In_ ULONG Depth);
2726
2727 STORPORT_API
2728 VOID
2729 NTAPI
2730 StorPortStallExecution(
2731 _In_ ULONG Delay);
2732
2733 STORPORT_API
2734 VOID
2735 NTAPI
2736 StorPortSynchronizeAccess(
2737 _In_ PVOID HwDeviceExtension,
2738 _In_ PSTOR_SYNCHRONIZED_ACCESS SynchronizedAccessRoutine,
2739 _In_opt_ PVOID Context);
2740
2741 STORPORT_API
2742 BOOLEAN
2743 NTAPI
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);
2751
2752 STORPORT_API
2753 VOID
2754 NTAPI
2755 StorPortWritePortBufferUchar(
2756 _In_ PVOID HwDeviceExtension,
2757 _In_ PUCHAR Port,
2758 _In_ PUCHAR Buffer,
2759 _In_ ULONG Count);
2760
2761 STORPORT_API
2762 VOID
2763 NTAPI
2764 StorPortWritePortBufferUlong(
2765 _In_ PVOID HwDeviceExtension,
2766 _In_ PULONG Port,
2767 _In_ PULONG Buffer,
2768 _In_ ULONG Count);
2769
2770 STORPORT_API
2771 VOID
2772 NTAPI
2773 StorPortWritePortBufferUshort(
2774 _In_ PVOID HwDeviceExtension,
2775 _In_ PUSHORT Port,
2776 _In_ PUSHORT Buffer,
2777 _In_ ULONG Count);
2778
2779 STORPORT_API
2780 VOID
2781 NTAPI
2782 StorPortWritePortUchar(
2783 _In_ PVOID HwDeviceExtension,
2784 _In_ PUCHAR Port,
2785 _In_ UCHAR Value);
2786
2787 STORPORT_API
2788 VOID
2789 NTAPI
2790 StorPortWritePortUlong(
2791 _In_ PVOID HwDeviceExtension,
2792 _In_ PULONG Port,
2793 _In_ ULONG Value);
2794
2795 STORPORT_API
2796 VOID
2797 NTAPI
2798 StorPortWritePortUshort(
2799 _In_ PVOID HwDeviceExtension,
2800 _In_ PUSHORT Port,
2801 _In_ USHORT Value);
2802
2803 STORPORT_API
2804 VOID
2805 NTAPI
2806 StorPortWriteRegisterBufferUchar(
2807 _In_ PVOID HwDeviceExtension,
2808 _In_ PUCHAR Register,
2809 _In_ PUCHAR Buffer,
2810 _In_ ULONG Count);
2811
2812 STORPORT_API
2813 VOID
2814 NTAPI
2815 StorPortWriteRegisterBufferUlong(
2816 _In_ PVOID HwDeviceExtension,
2817 _In_ PULONG Register,
2818 _In_ PULONG Buffer,
2819 _In_ ULONG Count);
2820
2821 STORPORT_API
2822 VOID
2823 NTAPI
2824 StorPortWriteRegisterBufferUshort(
2825 _In_ PVOID HwDeviceExtension,
2826 _In_ PUSHORT Register,
2827 _In_ PUSHORT Buffer,
2828 _In_ ULONG Count);
2829
2830 STORPORT_API
2831 VOID
2832 NTAPI
2833 StorPortWriteRegisterUchar(
2834 _In_ PVOID HwDeviceExtension,
2835 _In_ PUCHAR Register,
2836 _In_ UCHAR Value);
2837
2838 STORPORT_API
2839 VOID
2840 NTAPI
2841 StorPortWriteRegisterUlong(
2842 _In_ PVOID HwDeviceExtension,
2843 _In_ PULONG Register,
2844 _In_ ULONG Value);
2845
2846 STORPORT_API
2847 VOID
2848 NTAPI
2849 StorPortWriteRegisterUshort(
2850 _In_ PVOID HwDeviceExtension,
2851 _In_ PUSHORT Register,
2852 _In_ USHORT Value);
2853
2854
2855 FORCEINLINE
2856 BOOLEAN
2857 StorPortEnablePassiveInitialization(
2858 _In_ PVOID DeviceExtension,
2859 _In_ PHW_PASSIVE_INITIALIZE_ROUTINE HwPassiveInitializeRoutine)
2860 {
2861 LONG Succ;
2862 Succ = FALSE;
2863 StorPortNotification(EnablePassiveInitialization,
2864 DeviceExtension,
2865 HwPassiveInitializeRoutine,
2866 &Succ);
2867 return (BOOLEAN)Succ;
2868 }
2869
2870 FORCEINLINE
2871 VOID
2872 StorPortInitializeDpc(
2873 _In_ PVOID DeviceExtension,
2874 _Out_ PSTOR_DPC Dpc,
2875 _In_ PHW_DPC_ROUTINE HwDpcRoutine)
2876 {
2877 StorPortNotification(InitializeDpc,
2878 DeviceExtension,
2879 Dpc,
2880 HwDpcRoutine);
2881 }
2882
2883 FORCEINLINE
2884 BOOLEAN
2885 StorPortIssueDpc(
2886 _In_ PVOID DeviceExtension,
2887 _In_ PSTOR_DPC Dpc,
2888 _In_ PVOID SystemArgument1,
2889 _In_ PVOID SystemArgument2)
2890 {
2891 LONG Succ;
2892 Succ = FALSE;
2893 StorPortNotification(IssueDpc,
2894 DeviceExtension,
2895 Dpc,
2896 SystemArgument1,
2897 SystemArgument2,
2898 &Succ);
2899 return (BOOLEAN)Succ;
2900 }
2901
2902 FORCEINLINE
2903 VOID
2904 StorPortAcquireSpinLock(
2905 _In_ PVOID DeviceExtension,
2906 _In_ STOR_SPINLOCK SpinLock,
2907 _In_ PVOID LockContext,
2908 _Inout_ PSTOR_LOCK_HANDLE LockHandle)
2909 {
2910 StorPortNotification(AcquireSpinLock,
2911 DeviceExtension,
2912 SpinLock,
2913 LockContext,
2914 LockHandle);
2915 }
2916
2917 FORCEINLINE
2918 VOID
2919 StorPortReleaseSpinLock(
2920 _In_ PVOID DeviceExtension,
2921 _Inout_ PSTOR_LOCK_HANDLE LockHandle)
2922 {
2923 StorPortNotification(ReleaseSpinLock,
2924 DeviceExtension,
2925 LockHandle);
2926 }
2927
2928 STORPORT_API
2929 ULONG
2930 StorPortExtendedFunction(
2931 _In_ STORPORT_FUNCTION_CODE FunctionCode,
2932 _In_ PVOID HwDeviceExtension,
2933 ...);
2934
2935 FORCEINLINE
2936 ULONG
2937 StorPortAllocatePool(
2938 _In_ PVOID HwDeviceExtension,
2939 _In_ ULONG NumberOfBytes,
2940 _In_ ULONG Tag,
2941 _Out_ PVOID *BufferPointer
2942 )
2943 {
2944 return StorPortExtendedFunction(ExtFunctionAllocatePool,
2945 HwDeviceExtension,
2946 NumberOfBytes,
2947 Tag,
2948 BufferPointer);
2949 }
2950
2951 FORCEINLINE
2952 ULONG
2953 StorPortFreePool(
2954 _In_ PVOID HwDeviceExtension,
2955 _In_ PVOID BufferPointer)
2956 {
2957 return StorPortExtendedFunction(ExtFunctionFreePool,
2958 HwDeviceExtension,
2959 BufferPointer);
2960 }
2961
2962 FORCEINLINE
2963 ULONG
2964 StorPortAllocateMdl(
2965 _In_ PVOID HwDeviceExtension,
2966 _In_ PVOID BufferPointer,
2967 _In_ ULONG NumberOfBytes,
2968 _Out_ PVOID *Mdl)
2969 {
2970 return StorPortExtendedFunction(ExtFunctionAllocateMdl,
2971 HwDeviceExtension,
2972 BufferPointer,
2973 NumberOfBytes,
2974 Mdl);
2975 }
2976
2977 FORCEINLINE
2978 ULONG
2979 StorPortFreeMdl(
2980 _In_ PVOID HwDeviceExtension,
2981 _In_ PVOID Mdl)
2982 {
2983 return StorPortExtendedFunction(ExtFunctionFreeMdl,
2984 HwDeviceExtension,
2985 Mdl);
2986 }
2987
2988 FORCEINLINE
2989 ULONG
2990 StorPortBuildMdlForNonPagedPool(
2991 _In_ PVOID HwDeviceExtension,
2992 _Inout_ PVOID Mdl)
2993 {
2994 return StorPortExtendedFunction(ExtFunctionBuildMdlForNonPagedPool,
2995 HwDeviceExtension,
2996 Mdl);
2997 }
2998
2999 FORCEINLINE
3000 ULONG
3001 StorPortGetSystemAddress(
3002 _In_ PVOID HwDeviceExtension,
3003 _In_ PSCSI_REQUEST_BLOCK Srb,
3004 _Out_ PVOID *SystemAddress)
3005 {
3006 return StorPortExtendedFunction(ExtFunctionGetSystemAddress,
3007 HwDeviceExtension,
3008 Srb,
3009 SystemAddress);
3010 }
3011
3012 FORCEINLINE
3013 ULONG
3014 StorPortGetOriginalMdl(
3015 _In_ PVOID HwDeviceExtension,
3016 _In_ PSCSI_REQUEST_BLOCK Srb,
3017 _Out_ PVOID *Mdl)
3018 {
3019 return StorPortExtendedFunction(ExtFunctionGetOriginalMdl,
3020 HwDeviceExtension,
3021 Srb,
3022 Mdl);
3023 }
3024
3025 FORCEINLINE
3026 ULONG
3027 StorPortCompleteServiceIrp(
3028 _In_ PVOID HwDeviceExtension,
3029 _In_ PVOID Irp)
3030 {
3031 return StorPortExtendedFunction(ExtFunctionCompleteServiceIrp,
3032 HwDeviceExtension,
3033 Irp);
3034 }
3035
3036 FORCEINLINE
3037 ULONG
3038 StorPortGetDeviceObjects(
3039 _In_ PVOID HwDeviceExtension,
3040 _Out_ PVOID *AdapterDeviceObject,
3041 _Out_ PVOID *PhysicalDeviceObject,
3042 _Out_ PVOID *LowerDeviceObject)
3043 {
3044 return StorPortExtendedFunction(ExtFunctionGetDeviceObjects,
3045 HwDeviceExtension,
3046 AdapterDeviceObject,
3047 PhysicalDeviceObject,
3048 LowerDeviceObject);
3049 }
3050
3051 FORCEINLINE
3052 ULONG
3053 StorPortBuildScatterGatherList(
3054 _In_ PVOID HwDeviceExtension,
3055 _In_ PVOID Mdl,
3056 _In_ PVOID CurrentVa,
3057 _In_ ULONG Length,
3058 _In_ PpostScaterGatherExecute ExecutionRoutine,
3059 _In_ PVOID Context,
3060 _In_ BOOLEAN WriteToDevice,
3061 _Inout_ PVOID ScatterGatherBuffer,
3062 _In_ ULONG ScatterGatherBufferLength)
3063 {
3064 return StorPortExtendedFunction(ExtFunctionBuildScatterGatherList,
3065 HwDeviceExtension,
3066 Mdl,
3067 CurrentVa,
3068 Length,
3069 ExecutionRoutine,
3070 Context,
3071 WriteToDevice,
3072 ScatterGatherBuffer,
3073 ScatterGatherBufferLength);
3074 }
3075
3076 FORCEINLINE
3077 ULONG
3078 StorPortPutScatterGatherList(
3079 _In_ PVOID HwDeviceExtension,
3080 _In_ PSTOR_SCATTER_GATHER_LIST ScatterGatherList,
3081 _In_ BOOLEAN WriteToDevice)
3082 {
3083 return StorPortExtendedFunction(ExtFunctionPutScatterGatherList,
3084 HwDeviceExtension,
3085 ScatterGatherList,
3086 WriteToDevice);
3087 }
3088
3089 FORCEINLINE
3090 ULONG
3091 StorPortAcquireMSISpinLock(
3092 _In_ PVOID HwDeviceExtension,
3093 _In_ ULONG MessageId,
3094 _In_ PULONG OldIrql)
3095 {
3096 return StorPortExtendedFunction(ExtFunctionAcquireMSISpinLock,
3097 HwDeviceExtension,
3098 MessageId,
3099 OldIrql);
3100 }
3101
3102 FORCEINLINE
3103 ULONG
3104 StorPortReleaseMSISpinLock(
3105 _In_ PVOID HwDeviceExtension,
3106 _In_ ULONG MessageId,
3107 _In_ ULONG OldIrql)
3108 {
3109 return StorPortExtendedFunction(ExtFunctionReleaseMSISpinLock,
3110 HwDeviceExtension,
3111 MessageId,
3112 OldIrql);
3113 }
3114
3115 FORCEINLINE
3116 ULONG
3117 StorPortGetMSIInfo(
3118 _In_ PVOID HwDeviceExtension,
3119 _In_ ULONG MessageId,
3120 _Out_ PMESSAGE_INTERRUPT_INFORMATION InterruptInfo)
3121 {
3122 return StorPortExtendedFunction(ExtFunctionGetMessageInterruptInformation,
3123 HwDeviceExtension,
3124 MessageId,
3125 InterruptInfo);
3126 }
3127
3128 FORCEINLINE
3129 ULONG
3130 StorPortInitializePerfOpts(
3131 _In_ PVOID HwDeviceExtension,
3132 _In_ BOOLEAN Query,
3133 _Inout_ PPERF_CONFIGURATION_DATA PerfConfigData)
3134 {
3135 return StorPortExtendedFunction(ExtFunctionInitializePerformanceOptimizations,
3136 HwDeviceExtension,
3137 Query,
3138 PerfConfigData);
3139 }
3140
3141 FORCEINLINE
3142 ULONG
3143 StorPortGetStartIoPerfParams(
3144 _In_ PVOID HwDeviceExtension,
3145 _In_ PSCSI_REQUEST_BLOCK Srb,
3146 _Inout_ PSTARTIO_PERFORMANCE_PARAMETERS StartIoPerfParams)
3147 {
3148 return StorPortExtendedFunction(ExtFunctionGetStartIoPerformanceParameters,
3149 HwDeviceExtension,
3150 Srb,
3151 StartIoPerfParams);
3152 }
3153
3154 FORCEINLINE
3155 ULONG
3156 StorPortLogSystemEvent(
3157 _In_ PVOID HwDeviceExtension,
3158 _Inout_ PSTOR_LOG_EVENT_DETAILS LogDetails,
3159 _Inout_ PULONG MaximumSize)
3160 {
3161 return StorPortExtendedFunction(ExtFunctionLogSystemEvent,
3162 HwDeviceExtension,
3163 LogDetails,
3164 MaximumSize);
3165 }
3166
3167 #if DBG
3168 #define DebugPrint(x) StorPortDebugPrint x
3169 #else
3170 #define DebugPrint(x)
3171 #endif
3172
3173 #ifdef __cplusplus
3174 }
3175 #endif
3176
3177 #endif /* _NTSTORPORT_ */