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