Author: ekohl
Date: Mon Oct 2 12:56:27 2017
New Revision: 76028
URL:
http://svn.reactos.org/svn/reactos?rev=76028&view=rev
Log:
[DDK]
Prepare the storport header file for the new storport driver.
Modified:
trunk/reactos/sdk/include/ddk/storport.h
Modified: trunk/reactos/sdk/include/ddk/storport.h
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/sdk/include/ddk/storport.h…
==============================================================================
--- trunk/reactos/sdk/include/ddk/storport.h [iso-8859-1] (original)
+++ trunk/reactos/sdk/include/ddk/storport.h [iso-8859-1] Mon Oct 2 12:56:27 2017
@@ -20,327 +20,2476 @@
*
*/
-#ifndef __STORPORT_H
-#define __STORPORT_H
-
-#include "srb.h"
+#ifndef _NTSTORPORT_
+#define _NTSTORPORT_
#ifdef __cplusplus
extern "C" {
#endif
#if defined(_STORPORT_)
-#define STORPORTAPI
+#define STORPORT_API
#else
-#define STORPORTAPI DECLSPEC_IMPORT
+#define STORPORT_API DECLSPEC_IMPORT
#endif
+#define DIRECT_ACCESS_DEVICE 0x00
+#define SEQUENTIAL_ACCESS_DEVICE 0x01
+#define PRINTER_DEVICE 0x02
+#define PROCESSOR_DEVICE 0x03
+#define WRITE_ONCE_READ_MULTIPLE_DEVICE 0x04
+#define READ_ONLY_DIRECT_ACCESS_DEVICE 0x05
+#define SCANNER_DEVICE 0x06
+#define OPTICAL_DEVICE 0x07
+#define MEDIUM_CHANGER 0x08
+#define COMMUNICATION_DEVICE 0x09
+#define ARRAY_CONTROLLER_DEVICE 0x0C
+#define SCSI_ENCLOSURE_DEVICE 0x0D
+#define REDUCED_BLOCK_DEVICE 0x0E
+#define OPTICAL_CARD_READER_WRITER_DEVICE 0x0F
+#define BRIDGE_CONTROLLER_DEVICE 0x10
+#define OBJECT_BASED_STORAGE_DEVICE 0x11
+#define LOGICAL_UNIT_NOT_PRESENT_DEVICE 0x7F
+
+#define DEVICE_CONNECTED 0x00
+
+#define CDB6GENERIC_LENGTH 6
+#define CDB10GENERIC_LENGTH 10
+#define CDB12GENERIC_LENGTH 12
+
+#define INQUIRYDATABUFFERSIZE 36
+
+#define MODE_PAGE_VENDOR_SPECIFIC 0x00
+#define MODE_PAGE_ERROR_RECOVERY 0x01
+#define MODE_PAGE_DISCONNECT 0x02
+#define MODE_PAGE_FORMAT_DEVICE 0x03
+#define MODE_PAGE_MRW 0x03
+#define MODE_PAGE_RIGID_GEOMETRY 0x04
+#define MODE_PAGE_FLEXIBILE 0x05
+#define MODE_PAGE_WRITE_PARAMETERS 0x05
+#define MODE_PAGE_VERIFY_ERROR 0x07
+#define MODE_PAGE_CACHING 0x08
+#define MODE_PAGE_PERIPHERAL 0x09
+#define MODE_PAGE_CONTROL 0x0A
+#define MODE_PAGE_MEDIUM_TYPES 0x0B
+#define MODE_PAGE_NOTCH_PARTITION 0x0C
+#define MODE_PAGE_CD_AUDIO_CONTROL 0x0E
+#define MODE_PAGE_DATA_COMPRESS 0x0F
+#define MODE_PAGE_DEVICE_CONFIG 0x10
+#define MODE_PAGE_XOR_CONTROL 0x10
+#define MODE_PAGE_MEDIUM_PARTITION 0x11
+#define MODE_PAGE_ENCLOSURE_SERVICES_MANAGEMENT 0x14
+#define MODE_PAGE_EXTENDED 0x15
+#define MODE_PAGE_EXTENDED_DEVICE_SPECIFIC 0x16
+#define MODE_PAGE_CDVD_FEATURE_SET 0x18
+#define MODE_PAGE_PROTOCOL_SPECIFIC_LUN 0x18
+#define MODE_PAGE_PROTOCOL_SPECIFIC_PORT 0x19
+#define MODE_PAGE_POWER_CONDITION 0x1A
+#define MODE_PAGE_LUN_MAPPING 0x1B
+#define MODE_PAGE_FAULT_REPORTING 0x1C
+#define MODE_PAGE_CDVD_INACTIVITY 0x1D
+#define MODE_PAGE_ELEMENT_ADDRESS 0x1D
+#define MODE_PAGE_TRANSPORT_GEOMETRY 0x1E
+#define MODE_PAGE_DEVICE_CAPABILITIES 0x1F
+#define MODE_PAGE_CAPABILITIES 0x2A
+#define MODE_SENSE_RETURN_ALL 0x3F
+
+#define MODE_SENSE_CURRENT_VALUES 0x00
+#define MODE_SENSE_CHANGEABLE_VALUES 0x40
+#define MODE_SENSE_DEFAULT_VAULES 0x80
+#define MODE_SENSE_SAVED_VALUES 0xc0
+
+#define SCSIOP_TEST_UNIT_READY 0x00
+#define SCSIOP_REZERO_UNIT 0x01
+#define SCSIOP_REWIND 0x01
+#define SCSIOP_REQUEST_BLOCK_ADDR 0x02
+#define SCSIOP_REQUEST_SENSE 0x03
+#define SCSIOP_FORMAT_UNIT 0x04
+#define SCSIOP_READ_BLOCK_LIMITS 0x05
+#define SCSIOP_REASSIGN_BLOCKS 0x07
+#define SCSIOP_INIT_ELEMENT_STATUS 0x07
+#define SCSIOP_READ6 0x08
+#define SCSIOP_RECEIVE 0x08
+#define SCSIOP_WRITE6 0x0A
+#define SCSIOP_PRINT 0x0A
+#define SCSIOP_SEND 0x0A
+#define SCSIOP_SEEK6 0x0B
+#define SCSIOP_TRACK_SELECT 0x0B
+#define SCSIOP_SLEW_PRINT 0x0B
+#define SCSIOP_SET_CAPACITY 0x0B
+#define SCSIOP_SEEK_BLOCK 0x0C
+#define SCSIOP_PARTITION 0x0D
+#define SCSIOP_READ_REVERSE 0x0F
+#define SCSIOP_WRITE_FILEMARKS 0x10
+#define SCSIOP_FLUSH_BUFFER 0x10
+#define SCSIOP_SPACE 0x11
+#define SCSIOP_INQUIRY 0x12
+#define SCSIOP_VERIFY6 0x13
+#define SCSIOP_RECOVER_BUF_DATA 0x14
+#define SCSIOP_MODE_SELECT 0x15
+#define SCSIOP_RESERVE_UNIT 0x16
+#define SCSIOP_RELEASE_UNIT 0x17
+#define SCSIOP_COPY 0x18
+#define SCSIOP_ERASE 0x19
+#define SCSIOP_MODE_SENSE 0x1A
+#define SCSIOP_START_STOP_UNIT 0x1B
+#define SCSIOP_STOP_PRINT 0x1B
+#define SCSIOP_LOAD_UNLOAD 0x1B
+#define SCSIOP_RECEIVE_DIAGNOSTIC 0x1C
+#define SCSIOP_SEND_DIAGNOSTIC 0x1D
+#define SCSIOP_MEDIUM_REMOVAL 0x1E
+#define SCSIOP_READ_FORMATTED_CAPACITY 0x23
+#define SCSIOP_READ_CAPACITY 0x25
+#define SCSIOP_READ 0x28
+#define SCSIOP_WRITE 0x2A
+#define SCSIOP_SEEK 0x2B
+#define SCSIOP_LOCATE 0x2B
+#define SCSIOP_POSITION_TO_ELEMENT 0x2B
+#define SCSIOP_WRITE_VERIFY 0x2E
+#define SCSIOP_VERIFY 0x2F
+#define SCSIOP_SEARCH_DATA_HIGH 0x30
+#define SCSIOP_SEARCH_DATA_EQUAL 0x31
+#define SCSIOP_SEARCH_DATA_LOW 0x32
+#define SCSIOP_SET_LIMITS 0x33
+#define SCSIOP_READ_POSITION 0x34
+#define SCSIOP_SYNCHRONIZE_CACHE 0x35
+#define SCSIOP_COMPARE 0x39
+#define SCSIOP_COPY_COMPARE 0x3A
+#define SCSIOP_WRITE_DATA_BUFF 0x3B
+#define SCSIOP_READ_DATA_BUFF 0x3C
+#define SCSIOP_WRITE_LONG 0x3F
+#define SCSIOP_CHANGE_DEFINITION 0x40
+#define SCSIOP_WRITE_SAME 0x41
+#define SCSIOP_READ_SUB_CHANNEL 0x42
+#define SCSIOP_READ_TOC 0x43
+#define SCSIOP_READ_HEADER 0x44
+#define SCSIOP_REPORT_DENSITY_SUPPORT 0x44
+#define SCSIOP_PLAY_AUDIO 0x45
+#define SCSIOP_GET_CONFIGURATION 0x46
+#define SCSIOP_PLAY_AUDIO_MSF 0x47
+#define SCSIOP_PLAY_TRACK_INDEX 0x48
+#define SCSIOP_PLAY_TRACK_RELATIVE 0x49
+#define SCSIOP_GET_EVENT_STATUS 0x4A
+#define SCSIOP_PAUSE_RESUME 0x4B
+#define SCSIOP_LOG_SELECT 0x4C
+#define SCSIOP_LOG_SENSE 0x4D
+#define SCSIOP_STOP_PLAY_SCAN 0x4E
+#define SCSIOP_XDWRITE 0x50
+#define SCSIOP_XPWRITE 0x51
+#define SCSIOP_READ_DISK_INFORMATION 0x51
+#define SCSIOP_READ_DISC_INFORMATION 0x51
+#define SCSIOP_READ_TRACK_INFORMATION 0x52
+#define SCSIOP_XDWRITE_READ 0x53
+#define SCSIOP_RESERVE_TRACK_RZONE 0x53
+#define SCSIOP_SEND_OPC_INFORMATION 0x54
+#define SCSIOP_MODE_SELECT10 0x55
+#define SCSIOP_RESERVE_UNIT10 0x56
+#define SCSIOP_RESERVE_ELEMENT 0x56
+#define SCSIOP_RELEASE_UNIT10 0x57
+#define SCSIOP_RELEASE_ELEMENT 0x57
+#define SCSIOP_REPAIR_TRACK 0x58
+#define SCSIOP_MODE_SENSE10 0x5A
+#define SCSIOP_CLOSE_TRACK_SESSION 0x5B
+#define SCSIOP_READ_BUFFER_CAPACITY 0x5C
+#define SCSIOP_SEND_CUE_SHEET 0x5D
+#define SCSIOP_PERSISTENT_RESERVE_IN 0x5E
+#define SCSIOP_PERSISTENT_RESERVE_OUT 0x5F
+#define SCSIOP_XDWRITE_EXTENDED16 0x80
+#define SCSIOP_WRITE_FILEMARKS16 0x80
+#define SCSIOP_REBUILD16 0x81
+#define SCSIOP_READ_REVERSE16 0x81
+#define SCSIOP_REGENERATE16 0x82
+#define SCSIOP_EXTENDED_COPY 0x83
+#define SCSIOP_RECEIVE_COPY_RESULTS 0x84
+#define SCSIOP_ATA_PASSTHROUGH16 0x85
+#define SCSIOP_ACCESS_CONTROL_IN 0x86
+#define SCSIOP_ACCESS_CONTROL_OUT 0x87
+#define SCSIOP_READ16 0x88
+#define SCSIOP_WRITE16 0x8A
+#define SCSIOP_READ_ATTRIBUTES 0x8C
+#define SCSIOP_WRITE_ATTRIBUTES 0x8D
+#define SCSIOP_WRITE_VERIFY16 0x8E
+#define SCSIOP_VERIFY16 0x8F
+#define SCSIOP_PREFETCH16 0x90
+#define SCSIOP_SYNCHRONIZE_CACHE16 0x91
+#define SCSIOP_SPACE16 0x91
+#define SCSIOP_LOCK_UNLOCK_CACHE16 0x92
+#define SCSIOP_LOCATE16 0x92
+#define SCSIOP_WRITE_SAME16 0x93
+#define SCSIOP_ERASE16 0x93
+#define SCSIOP_READ_CAPACITY16 0x9E
+#define SCSIOP_SERVICE_ACTION_IN16 0x9E
+#define SCSIOP_SERVICE_ACTION_OUT16 0x9F
+#define SCSIOP_REPORT_LUNS 0xA0
+#define SCSIOP_BLANK 0xA1
+#define SCSIOP_ATA_PASSTHROUGH12 0xA1
+#define SCSIOP_SEND_EVENT 0xA2
+#define SCSIOP_SEND_KEY 0xA3
+#define SCSIOP_MAINTENANCE_IN 0xA3
+#define SCSIOP_REPORT_KEY 0xA4
+#define SCSIOP_MAINTENANCE_OUT 0xA4
+#define SCSIOP_MOVE_MEDIUM 0xA5
+#define SCSIOP_LOAD_UNLOAD_SLOT 0xA6
+#define SCSIOP_EXCHANGE_MEDIUM 0xA6
+#define SCSIOP_SET_READ_AHEAD 0xA7
+#define SCSIOP_MOVE_MEDIUM_ATTACHED 0xA7
+#define SCSIOP_READ12 0xA8
+#define SCSIOP_GET_MESSAGE 0xA8
+#define SCSIOP_SERVICE_ACTION_OUT12 0xA9
+#define SCSIOP_WRITE12 0xAA
+#define SCSIOP_SEND_MESSAGE 0xAB
+#define SCSIOP_SERVICE_ACTION_IN12 0xAB
+#define SCSIOP_GET_PERFORMANCE 0xAC
+#define SCSIOP_READ_DVD_STRUCTURE 0xAD
+#define SCSIOP_WRITE_VERIFY12 0xAE
+#define SCSIOP_VERIFY12 0xAF
+#define SCSIOP_SEARCH_DATA_HIGH12 0xB0
+#define SCSIOP_SEARCH_DATA_EQUAL12 0xB1
+#define SCSIOP_SEARCH_DATA_LOW12 0xB2
+#define SCSIOP_SET_LIMITS12 0xB3
+#define SCSIOP_READ_ELEMENT_STATUS_ATTACHED 0xB4
+#define SCSIOP_REQUEST_VOL_ELEMENT 0xB5
+#define SCSIOP_SEND_VOLUME_TAG 0xB6
+#define SCSIOP_SET_STREAMING 0xB6
+#define SCSIOP_READ_DEFECT_DATA 0xB7
+#define SCSIOP_READ_ELEMENT_STATUS 0xB8
+#define SCSIOP_READ_CD_MSF 0xB9
+#define SCSIOP_SCAN_CD 0xBA
+#define SCSIOP_REDUNDANCY_GROUP_IN 0xBA
+#define SCSIOP_SET_CD_SPEED 0xBB
+#define SCSIOP_REDUNDANCY_GROUP_OUT 0xBB
+#define SCSIOP_PLAY_CD 0xBC
+#define SCSIOP_SPARE_IN 0xBC
+#define SCSIOP_MECHANISM_STATUS 0xBD
+#define SCSIOP_SPARE_OUT 0xBD
+#define SCSIOP_READ_CD 0xBE
+#define SCSIOP_VOLUME_SET_IN 0xBE
+#define SCSIOP_SEND_DVD_STRUCTURE 0xBF
+#define SCSIOP_VOLUME_SET_OUT 0xBF
+#define SCSIOP_INIT_ELEMENT_RANGE 0xE7
+
+#define SCSISTAT_GOOD 0x00
+#define SCSISTAT_CHECK_CONDITION 0x02
+#define SCSISTAT_CONDITION_MET 0x04
+#define SCSISTAT_BUSY 0x08
+#define SCSISTAT_INTERMEDIATE 0x10
+#define SCSISTAT_INTERMEDIATE_COND_MET 0x14
+#define SCSISTAT_RESERVATION_CONFLICT 0x18
+#define SCSISTAT_COMMAND_TERMINATED 0x22
+#define SCSISTAT_QUEUE_FULL 0x28
+
+#define SETBITON 1
+#define SETBITOFF 0
+
+#define SP_RETURN_NOT_FOUND 0
+#define SP_RETURN_FOUND 1
+#define SP_RETURN_ERROR 2
+#define SP_RETURN_BAD_CONFIG 3
+
+#define SRB_FUNCTION_EXECUTE_SCSI 0x00
+#define SRB_FUNCTION_CLAIM_DEVICE 0x01
+#define SRB_FUNCTION_IO_CONTROL 0x02
+#define SRB_FUNCTION_RECEIVE_EVENT 0x03
+#define SRB_FUNCTION_RELEASE_QUEUE 0x04
+#define SRB_FUNCTION_ATTACH_DEVICE 0x05
+#define SRB_FUNCTION_RELEASE_DEVICE 0x06
+#define SRB_FUNCTION_SHUTDOWN 0x07
+#define SRB_FUNCTION_FLUSH 0x08
+#define SRB_FUNCTION_ABORT_COMMAND 0x10
+#define SRB_FUNCTION_RELEASE_RECOVERY 0x11
+#define SRB_FUNCTION_RESET_BUS 0x12
+#define SRB_FUNCTION_RESET_DEVICE 0x13
+#define SRB_FUNCTION_TERMINATE_IO 0x14
+#define SRB_FUNCTION_FLUSH_QUEUE 0x15
+#define SRB_FUNCTION_REMOVE_DEVICE 0x16
+#define SRB_FUNCTION_WMI 0x17
+#define SRB_FUNCTION_LOCK_QUEUE 0x18
+#define SRB_FUNCTION_UNLOCK_QUEUE 0x19
+#define SRB_FUNCTION_RESET_LOGICAL_UNIT 0x20
+#define SRB_FUNCTION_SET_LINK_TIMEOUT 0x21
+#define SRB_FUNCTION_LINK_TIMEOUT_OCCURRED 0x22
+#define SRB_FUNCTION_LINK_TIMEOUT_COMPLETE 0x23
+#define SRB_FUNCTION_POWER 0x24
+#define SRB_FUNCTION_PNP 0x25
+#define SRB_FUNCTION_DUMP_POINTERS 0x26
+
+#define SRB_STATUS_PENDING 0x00
+#define SRB_STATUS_SUCCESS 0x01
+#define SRB_STATUS_ABORTED 0x02
+#define SRB_STATUS_ABORT_FAILED 0x03
+#define SRB_STATUS_ERROR 0x04
+#define SRB_STATUS_BUSY 0x05
+#define SRB_STATUS_INVALID_REQUEST 0x06
+#define SRB_STATUS_INVALID_PATH_ID 0x07
+#define SRB_STATUS_NO_DEVICE 0x08
+#define SRB_STATUS_TIMEOUT 0x09
+#define SRB_STATUS_SELECTION_TIMEOUT 0x0A
+#define SRB_STATUS_COMMAND_TIMEOUT 0x0B
+#define SRB_STATUS_MESSAGE_REJECTED 0x0D
+#define SRB_STATUS_BUS_RESET 0x0E
+#define SRB_STATUS_PARITY_ERROR 0x0F
+#define SRB_STATUS_REQUEST_SENSE_FAILED 0x10
+#define SRB_STATUS_NO_HBA 0x11
+#define SRB_STATUS_DATA_OVERRUN 0x12
+#define SRB_STATUS_UNEXPECTED_BUS_FREE 0x13
+#define SRB_STATUS_PHASE_SEQUENCE_FAILURE 0x14
+#define SRB_STATUS_BAD_SRB_BLOCK_LENGTH 0x15
+#define SRB_STATUS_REQUEST_FLUSHED 0x16
+#define SRB_STATUS_INVALID_LUN 0x20
+#define SRB_STATUS_INVALID_TARGET_ID 0x21
+#define SRB_STATUS_BAD_FUNCTION 0x22
+#define SRB_STATUS_ERROR_RECOVERY 0x23
+#define SRB_STATUS_NOT_POWERED 0x24
+#define SRB_STATUS_LINK_DOWN 0x25
+#define SRB_STATUS_INTERNAL_ERROR 0x30
+#define SRB_STATUS_QUEUE_FROZEN 0x40
+#define SRB_STATUS_AUTOSENSE_VALID 0x80
+#define SRB_STATUS(Status) (Status & ~(SRB_STATUS_AUTOSENSE_VALID |
SRB_STATUS_QUEUE_FROZEN))
+
+#define SRB_FLAGS_QUEUE_ACTION_ENABLE 0x00000002
+#define SRB_FLAGS_DISABLE_DISCONNECT 0x00000004
+#define SRB_FLAGS_DISABLE_SYNCH_TRANSFER 0x00000008
+
+#define SRB_FLAGS_BYPASS_FROZEN_QUEUE 0x00000010
+#define SRB_FLAGS_DISABLE_AUTOSENSE 0x00000020
+#define SRB_FLAGS_DATA_IN 0x00000040
+#define SRB_FLAGS_DATA_OUT 0x00000080
+#define SRB_FLAGS_NO_DATA_TRANSFER 0x00000000
+#define SRB_FLAGS_UNSPECIFIED_DIRECTION (SRB_FLAGS_DATA_IN | SRB_FLAGS_DATA_OUT)
+
+#define SRB_FLAGS_NO_QUEUE_FREEZE 0x00000100
+#define SRB_FLAGS_ADAPTER_CACHE_ENABLE 0x00000200
+#define SRB_FLAGS_FREE_SENSE_BUFFER 0x00000400
+
+#define SRB_FLAGS_IS_ACTIVE 0x00010000
+#define SRB_FLAGS_ALLOCATED_FROM_ZONE 0x00020000
+#define SRB_FLAGS_SGLIST_FROM_POOL 0x00040000
+#define SRB_FLAGS_BYPASS_LOCKED_QUEUE 0x00080000
+
+#define SRB_FLAGS_NO_KEEP_AWAKE 0x00100000
+#define SRB_FLAGS_PORT_DRIVER_ALLOCSENSE 0x00200000
+
+#define SRB_FLAGS_PORT_DRIVER_SENSEHASPORT 0x00400000
+#define SRB_FLAGS_DONT_START_NEXT_PACKET 0x00800000
+
+#define SRB_FLAGS_PORT_DRIVER_RESERVED 0x0F000000
+#define SRB_FLAGS_CLASS_DRIVER_RESERVED 0xF0000000
+
+#define SRB_SIMPLE_TAG_REQUEST 0x20
+#define SRB_HEAD_OF_QUEUE_TAG_REQUEST 0x21
+#define SRB_ORDERED_QUEUE_TAG_REQUEST 0x22
+
+#define SRB_WMI_FLAGS_ADAPTER_REQUEST 0x01
+#define SRB_POWER_FLAGS_ADAPTER_REQUEST 0x01
+#define SRB_PNP_FLAGS_ADAPTER_REQUEST 0x01
+
+#define STOR_MAP_NO_BUFFERS (0)
+#define STOR_MAP_ALL_BUFFERS (1)
+#define STOR_MAP_NON_READ_WRITE_BUFFERS (2)
+
+#define VPD_SUPPORTED_PAGES 0x00
+#define VPD_SERIAL_NUMBER 0x80
+#define VPD_DEVICE_IDENTIFIERS 0x83
+#define VPD_MEDIA_SERIAL_NUMBER 0x84
+#define VPD_SOFTWARE_INTERFACE_IDENTIFIERS 0x84
+#define VPD_NETWORK_MANAGEMENT_ADDRESSES 0x85
+#define VPD_EXTENDED_INQUIRY_DATA 0x86
+#define VPD_MODE_PAGE_POLICY 0x87
+#define VPD_SCSI_PORTS 0x88
+
+typedef enum _STOR_SYNCHRONIZATION_MODEL
+{
+ StorSynchronizeHalfDuplex,
+ StorSynchronizeFullDuplex
+} STOR_SYNCHRONIZATION_MODEL;
+
+typedef enum _STOR_DMA_WIDTH
+{
+ DmaUnknown,
+ Dma32Bit,
+ Dma64BitScatterGather,
+ Dma64Bit
+} STOR_DMA_WIDTH;
+
+typedef enum _STOR_SPINLOCK
+{
+ DpcLock = 1,
+ StartIoLock,
+ InterruptLock
+} STOR_SPINLOCK;
+
+typedef enum _SCSI_ADAPTER_CONTROL_TYPE
+{
+ ScsiQuerySupportedControlTypes = 0,
+ ScsiStopAdapter,
+ ScsiRestartAdapter,
+ ScsiSetBootConfig,
+ ScsiSetRunningConfig,
+ ScsiAdapterControlMax,
+ MakeAdapterControlTypeSizeOfUlong = 0xffffffff
+} SCSI_ADAPTER_CONTROL_TYPE, *PSCSI_ADAPTER_CONTROL_TYPE;
+
+typedef enum _SCSI_ADAPTER_CONTROL_STATUS
+{
+ ScsiAdapterControlSuccess = 0,
+ ScsiAdapterControlUnsuccessful
+} SCSI_ADAPTER_CONTROL_STATUS, *PSCSI_ADAPTER_CONTROL_STATUS;
+
+typedef enum _SCSI_NOTIFICATION_TYPE
+{
+ RequestComplete,
+ NextRequest,
+ NextLuRequest,
+ ResetDetected,
+ _obsolete1,
+ _obsolete2,
+ RequestTimerCall,
+ BusChangeDetected,
+ WMIEvent,
+ WMIReregister,
+ LinkUp,
+ LinkDown,
+ QueryTickCount,
+ BufferOverrunDetected,
+ TraceNotification,
+ GetExtendedFunctionTable,
+ EnablePassiveInitialization = 0x1000,
+ InitializeDpc,
+ IssueDpc,
+ AcquireSpinLock,
+ ReleaseSpinLock
+} SCSI_NOTIFICATION_TYPE, *PSCSI_NOTIFICATION_TYPE;
+
+typedef enum _STOR_DEVICE_POWER_STATE
+{
+ StorPowerDeviceUnspecified = 0,
+ StorPowerDeviceD0,
+ StorPowerDeviceD1,
+ StorPowerDeviceD2,
+ StorPowerDeviceD3,
+ StorPowerDeviceMaximum
+} STOR_DEVICE_POWER_STATE, *PSTOR_DEVICE_POWER_STATE;
+
+typedef enum _STOR_POWER_ACTION
+{
+ StorPowerActionNone = 0,
+ StorPowerActionReserved,
+ StorPowerActionSleep,
+ StorPowerActionHibernate,
+ StorPowerActionShutdown,
+ StorPowerActionShutdownReset,
+ StorPowerActionShutdownOff,
+ StorPowerActionWarmEject
+} STOR_POWER_ACTION, *PSTOR_POWER_ACTION;
+
+typedef enum _STOR_PNP_ACTION
+{
+ StorStartDevice = 0x0,
+ StorRemoveDevice = 0x2,
+ StorStopDevice = 0x4,
+ StorQueryCapabilities = 0x9,
+ StorQueryResourceRequirements = 0xB,
+ StorFilterResourceRequirements = 0xD,
+ StorSurpriseRemoval = 0x17
+} STOR_PNP_ACTION, *PSTOR_PNP_ACTION;
+
+typedef enum _VPD_CODE_SET
+{
+ VpdCodeSetReserved = 0,
+ VpdCodeSetBinary = 1,
+ VpdCodeSetAscii = 2,
+ VpdCodeSetUTF8 = 3
+} VPD_CODE_SET, *PVPD_CODE_SET;
+
+typedef enum _VPD_ASSOCIATION
+{
+ VpdAssocDevice = 0,
+ VpdAssocPort = 1,
+ VpdAssocTarget = 2,
+ VpdAssocReserved1 = 3,
+ VpdAssocReserved2 = 4
+} VPD_ASSOCIATION, *PVPD_ASSOCIATION;
+
+typedef enum _VPD_IDENTIFIER_TYPE
+{
+ VpdIdentifierTypeVendorSpecific = 0,
+ VpdIdentifierTypeVendorId = 1,
+ VpdIdentifierTypeEUI64 = 2,
+ VpdIdentifierTypeFCPHName = 3,
+ VpdIdentifierTypePortRelative = 4,
+ VpdIdentifierTypeTargetPortGroup = 5,
+ VpdIdentifierTypeLogicalUnitGroup = 6,
+ VpdIdentifierTypeMD5LogicalUnitId = 7,
+ VpdIdentifierTypeSCSINameString = 8
+} VPD_IDENTIFIER_TYPE, *PVPD_IDENTIFIER_TYPE;
+
+typedef struct _SCSI_REQUEST_BLOCK
+{
+ USHORT Length;
+ UCHAR Function;
+ UCHAR SrbStatus;
+ UCHAR ScsiStatus;
+ UCHAR PathId;
+ UCHAR TargetId;
+ UCHAR Lun;
+ UCHAR QueueTag;
+ UCHAR QueueAction;
+ UCHAR CdbLength;
+ UCHAR SenseInfoBufferLength;
+ ULONG SrbFlags;
+ ULONG DataTransferLength;
+ ULONG TimeOutValue;
+ PVOID DataBuffer;
+ PVOID SenseInfoBuffer;
+ struct _SCSI_REQUEST_BLOCK *NextSrb;
+ PVOID OriginalRequest;
+ PVOID SrbExtension;
+ union
+ {
+ ULONG InternalStatus;
+ ULONG QueueSortKey;
+ ULONG LinkTimeoutValue;
+ };
+#if defined(_WIN64)
+ ULONG Reserved;
+#endif
+ UCHAR Cdb[16];
+} SCSI_REQUEST_BLOCK, *PSCSI_REQUEST_BLOCK;
+
+typedef struct _SCSI_WMI_REQUEST_BLOCK
+{
+ USHORT Length;
+ UCHAR Function;
+ UCHAR SrbStatus;
+ UCHAR WMISubFunction;
+ UCHAR PathId;
+ UCHAR TargetId;
+ UCHAR Lun;
+ UCHAR Reserved1;
+ UCHAR WMIFlags;
+ UCHAR Reserved2[2];
+ ULONG SrbFlags;
+ ULONG DataTransferLength;
+ ULONG TimeOutValue;
+ PVOID DataBuffer;
+ PVOID DataPath;
+ PVOID Reserved3;
+ PVOID OriginalRequest;
+ PVOID SrbExtension;
+ ULONG Reserved4;
+#if (NTDDI_VERSION >= NTDDI_WS03SP1) && defined(_WIN64)
+ ULONG Reserved6;
+#endif
+ UCHAR Reserved5[16];
+} SCSI_WMI_REQUEST_BLOCK, *PSCSI_WMI_REQUEST_BLOCK;
+
+typedef struct _SCSI_POWER_REQUEST_BLOCK
+{
+ USHORT Length;
+ UCHAR Function;
+ UCHAR SrbStatus;
+ UCHAR SrbPowerFlags;
+ UCHAR PathId;
+ UCHAR TargetId;
+ UCHAR Lun;
+ STOR_DEVICE_POWER_STATE DevicePowerState;
+ ULONG SrbFlags;
+ ULONG DataTransferLength;
+ ULONG TimeOutValue;
+ PVOID DataBuffer;
+ PVOID SenseInfoBuffer;
+ struct _SCSI_REQUEST_BLOCK *NextSrb;
+ PVOID OriginalRequest;
+ PVOID SrbExtension;
+ STOR_POWER_ACTION PowerAction;
+#if defined(_WIN64)
+ ULONG Reserved;
+#endif
+ UCHAR Reserved5[16];
+} SCSI_POWER_REQUEST_BLOCK, *PSCSI_POWER_REQUEST_BLOCK;
+
+typedef struct _STOR_DEVICE_CAPABILITIES
+{
+ USHORT Version;
+ ULONG DeviceD1:1;
+ ULONG DeviceD2:1;
+ ULONG LockSupported:1;
+ ULONG EjectSupported:1;
+ ULONG Removable:1;
+ ULONG DockDevice:1;
+ ULONG UniqueID:1;
+ ULONG SilentInstall:1;
+ ULONG SurpriseRemovalOK:1;
+ ULONG NoDisplayInUI:1;
+} STOR_DEVICE_CAPABILITIES, *PSTOR_DEVICE_CAPABILITIES;
+
+typedef struct _SCSI_PNP_REQUEST_BLOCK
+{
+ USHORT Length;
+ UCHAR Function;
+ UCHAR SrbStatus;
+ UCHAR PnPSubFunction;
+ UCHAR PathId;
+ UCHAR TargetId;
+ UCHAR Lun;
+ STOR_PNP_ACTION PnPAction;
+ ULONG SrbFlags;
+ ULONG DataTransferLength;
+ ULONG TimeOutValue;
+ PVOID DataBuffer;
+ PVOID SenseInfoBuffer;
+ struct _SCSI_REQUEST_BLOCK *NextSrb;
+ PVOID OriginalRequest;
+ PVOID SrbExtension;
+ ULONG SrbPnPFlags;
+#if defined(_WIN64)
+ ULONG Reserved;
+#endif
+ UCHAR Reserved4[16];
+} SCSI_PNP_REQUEST_BLOCK, *PSCSI_PNP_REQUEST_BLOCK;
+
+#include <pshpack1.h>
+typedef union _CDB
+{
+ struct _CDB6GENERIC
+ {
+ UCHAR OperationCode;
+ UCHAR Immediate:1;
+ UCHAR CommandUniqueBits:4;
+ UCHAR LogicalUnitNumber:3;
+ UCHAR CommandUniqueBytes[3];
+ UCHAR Link:1;
+ UCHAR Flag:1;
+ UCHAR Reserved:4;
+ UCHAR VendorUnique:2;
+ } CDB6GENERIC, *PCDB6GENERIC;
+ struct _CDB6READWRITE
+ {
+ UCHAR OperationCode;
+ UCHAR LogicalBlockMsb1:5;
+ UCHAR LogicalUnitNumber:3;
+ UCHAR LogicalBlockMsb0;
+ UCHAR LogicalBlockLsb;
+ UCHAR TransferBlocks;
+ UCHAR Control;
+ } CDB6READWRITE, *PCDB6READWRITE;
+ struct _CDB6INQUIRY
+ {
+ UCHAR OperationCode;
+ UCHAR Reserved1:5;
+ UCHAR LogicalUnitNumber:3;
+ UCHAR PageCode;
+ UCHAR IReserved;
+ UCHAR AllocationLength;
+ UCHAR Control;
+ } CDB6INQUIRY, *PCDB6INQUIRY;
+ struct _CDB6INQUIRY3
+ {
+ UCHAR OperationCode;
+ UCHAR EnableVitalProductData:1;
+ UCHAR CommandSupportData:1;
+ UCHAR Reserved1:6;
+ UCHAR PageCode;
+ UCHAR Reserved2;
+ UCHAR AllocationLength;
+ UCHAR Control;
+ } CDB6INQUIRY3, *PCDB6INQUIRY3;
+ struct _CDB6VERIFY
+ {
+ UCHAR OperationCode;
+ UCHAR Fixed:1;
+ UCHAR ByteCompare:1;
+ UCHAR Immediate:1;
+ UCHAR Reserved:2;
+ UCHAR LogicalUnitNumber:3;
+ UCHAR VerificationLength[3];
+ UCHAR Control;
+ } CDB6VERIFY, *PCDB6VERIFY;
+ struct _CDB6FORMAT
+ {
+ UCHAR OperationCode;
+ UCHAR FormatControl:5;
+ UCHAR LogicalUnitNumber:3;
+ UCHAR FReserved1;
+ UCHAR InterleaveMsb;
+ UCHAR InterleaveLsb;
+ UCHAR FReserved2;
+ } CDB6FORMAT, *PCDB6FORMAT;
+ struct _CDB10
+ {
+ UCHAR OperationCode;
+ UCHAR RelativeAddress:1;
+ UCHAR Reserved1:2;
+ UCHAR ForceUnitAccess:1;
+ UCHAR DisablePageOut:1;
+ UCHAR LogicalUnitNumber:3;
+ UCHAR LogicalBlockByte0;
+ UCHAR LogicalBlockByte1;
+ UCHAR LogicalBlockByte2;
+ UCHAR LogicalBlockByte3;
+ UCHAR Reserved2;
+ UCHAR TransferBlocksMsb;
+ UCHAR TransferBlocksLsb;
+ UCHAR Control;
+ } CDB10, *PCDB10;
+ struct _CDB12
+ {
+ UCHAR OperationCode;
+ UCHAR RelativeAddress:1;
+ UCHAR Reserved1:2;
+ UCHAR ForceUnitAccess:1;
+ UCHAR DisablePageOut:1;
+ UCHAR LogicalUnitNumber:3;
+ UCHAR LogicalBlock[4];
+ UCHAR TransferLength[4];
+ UCHAR Reserved2;
+ UCHAR Control;
+ } CDB12, *PCDB12;
+ struct _CDB16
+ {
+ UCHAR OperationCode;
+ UCHAR Reserved1:3;
+ UCHAR ForceUnitAccess:1;
+ UCHAR DisablePageOut:1;
+ UCHAR Protection:3;
+ UCHAR LogicalBlock[8];
+ UCHAR TransferLength[4];
+ UCHAR Reserved2;
+ UCHAR Control;
+ } CDB16, *PCDB16;
+ struct _PAUSE_RESUME
+ {
+ UCHAR OperationCode;
+ UCHAR Reserved1:5;
+ UCHAR LogicalUnitNumber:3;
+ UCHAR Reserved2[6];
+ UCHAR Action;
+ UCHAR Control;
+ } PAUSE_RESUME, *PPAUSE_RESUME;
+ struct _READ_TOC
+ {
+ UCHAR OperationCode;
+ UCHAR Reserved0:1;
+ UCHAR Msf:1;
+ UCHAR Reserved1:3;
+ UCHAR LogicalUnitNumber:3;
+ UCHAR Format2:4;
+ UCHAR Reserved2:4;
+ UCHAR Reserved3[3];
+ UCHAR StartingTrack;
+ UCHAR AllocationLength[2];
+ UCHAR Control:6;
+ UCHAR Format:2;
+ } READ_TOC, *PREAD_TOC;
+ struct _READ_DISK_INFORMATION
+ {
+ UCHAR OperationCode;
+ UCHAR Reserved1:5;
+ UCHAR Lun:3;
+ UCHAR Reserved2[5];
+ UCHAR AllocationLength[2];
+ UCHAR Control;
+ } READ_DISK_INFORMATION, *PREAD_DISK_INFORMATION;
+ struct _READ_TRACK_INFORMATION
+ {
+ UCHAR OperationCode;
+ UCHAR Track:1;
+ UCHAR Reserved1:3;
+ UCHAR Reserved2:1;
+ UCHAR Lun:3;
+ UCHAR BlockAddress[4];
+ UCHAR Reserved3;
+ UCHAR AllocationLength[2];
+ UCHAR Control;
+ } READ_TRACK_INFORMATION, *PREAD_TRACK_INFORMATION;
+ struct _RESERVE_TRACK_RZONE
+ {
+ UCHAR OperationCode;
+ UCHAR Reserved1[4];
+ UCHAR ReservationSize[4];
+ UCHAR Control;
+ } RESERVE_TRACK_RZONE, *PRESERVE_TRACK_RZONE;
+ struct _SEND_OPC_INFORMATION
+ {
+ UCHAR OperationCode;
+ UCHAR DoOpc:1;
+ UCHAR Reserved1:7;
+ UCHAR Exclude0:1;
+ UCHAR Exclude1:1;
+ UCHAR Reserved2:6;
+ UCHAR Reserved3[4];
+ UCHAR ParameterListLength[2];
+ UCHAR Reserved4;
+ } SEND_OPC_INFORMATION, *PSEND_OPC_INFORMATION;
+ struct _REPAIR_TRACK
+ {
+ UCHAR OperationCode;
+ UCHAR Immediate:1;
+ UCHAR Reserved1:7;
+ UCHAR Reserved2[2];
+ UCHAR TrackNumber[2];
+ UCHAR Reserved3[3];
+ UCHAR Control;
+ } REPAIR_TRACK, *PREPAIR_TRACK;
+ struct _CLOSE_TRACK
+ {
+ UCHAR OperationCode;
+ UCHAR Immediate:1;
+ UCHAR Reserved1:7;
+ UCHAR Track:1;
+ UCHAR Session:1;
+ UCHAR Reserved2:6;
+ UCHAR Reserved3;
+ UCHAR TrackNumber[2];
+ UCHAR Reserved4[3];
+ UCHAR Control;
+ } CLOSE_TRACK, *PCLOSE_TRACK;
+ struct _READ_BUFFER_CAPACITY
+ {
+ UCHAR OperationCode;
+ UCHAR BlockInfo:1;
+ UCHAR Reserved1:7;
+ UCHAR Reserved2[5];
+ UCHAR AllocationLength[2];
+ UCHAR Control;
+ } READ_BUFFER_CAPACITY, *PREAD_BUFFER_CAPACITY;
+ struct _SEND_CUE_SHEET
+ {
+ UCHAR OperationCode;
+ UCHAR Reserved[5];
+ UCHAR CueSheetSize[3];
+ UCHAR Control;
+ } SEND_CUE_SHEET, *PSEND_CUE_SHEET;
+ struct _READ_HEADER
+ {
+ UCHAR OperationCode;
+ UCHAR Reserved1:1;
+ UCHAR Msf:1;
+ UCHAR Reserved2:3;
+ UCHAR Lun:3;
+ UCHAR LogicalBlockAddress[4];
+ UCHAR Reserved3;
+ UCHAR AllocationLength[2];
+ UCHAR Control;
+ } READ_HEADER, *PREAD_HEADER;
+ struct _PLAY_AUDIO
+ {
+ UCHAR OperationCode;
+ UCHAR Reserved1:5;
+ UCHAR LogicalUnitNumber:3;
+ UCHAR StartingBlockAddress[4];
+ UCHAR Reserved2;
+ UCHAR PlayLength[2];
+ UCHAR Control;
+ } PLAY_AUDIO, *PPLAY_AUDIO;
+ struct _PLAY_AUDIO_MSF
+ {
+ UCHAR OperationCode;
+ UCHAR Reserved1:5;
+ UCHAR LogicalUnitNumber:3;
+ UCHAR Reserved2;
+ UCHAR StartingM;
+ UCHAR StartingS;
+ UCHAR StartingF;
+ UCHAR EndingM;
+ UCHAR EndingS;
+ UCHAR EndingF;
+ UCHAR Control;
+ } PLAY_AUDIO_MSF, *PPLAY_AUDIO_MSF;
+ struct _BLANK_MEDIA
+ {
+ UCHAR OperationCode;
+ UCHAR BlankType:3;
+ UCHAR Reserved1:1;
+ UCHAR Immediate:1;
+ UCHAR Reserved2:3;
+ UCHAR AddressOrTrack[4];
+ UCHAR Reserved3[5];
+ UCHAR Control;
+ } BLANK_MEDIA, *PBLANK_MEDIA;
+ struct _PLAY_CD
+ {
+ UCHAR OperationCode;
+ UCHAR Reserved1:1;
+ UCHAR CMSF:1;
+ UCHAR ExpectedSectorType:3;
+ UCHAR Lun:3;
+ _ANONYMOUS_UNION union
+ {
+ struct _LBA
+ {
+ UCHAR StartingBlockAddress[4];
+ UCHAR PlayLength[4];
+ } LBA;
+ struct _MSF
+ {
+ UCHAR Reserved1;
+ UCHAR StartingM;
+ UCHAR StartingS;
+ UCHAR StartingF;
+ UCHAR EndingM;
+ UCHAR EndingS;
+ UCHAR EndingF;
+ UCHAR Reserved2;
+ } MSF;
+ } DUMMYUNIONNAME;
+ UCHAR Audio:1;
+ UCHAR Composite:1;
+ UCHAR Port1:1;
+ UCHAR Port2:1;
+ UCHAR Reserved2:3;
+ UCHAR Speed:1;
+ UCHAR Control;
+ } PLAY_CD, *PPLAY_CD;
+ struct _SCAN_CD
+ {
+ UCHAR OperationCode;
+ UCHAR RelativeAddress:1;
+ UCHAR Reserved1:3;
+ UCHAR Direct:1;
+ UCHAR Lun:3;
+ UCHAR StartingAddress[4];
+ UCHAR Reserved2[3];
+ UCHAR Reserved3:6;
+ UCHAR Type:2;
+ UCHAR Reserved4;
+ UCHAR Control;
+ } SCAN_CD, *PSCAN_CD;
+ struct _STOP_PLAY_SCAN
+ {
+ UCHAR OperationCode;
+ UCHAR Reserved1:5;
+ UCHAR Lun:3;
+ UCHAR Reserved2[7];
+ UCHAR Control;
+ } STOP_PLAY_SCAN, *PSTOP_PLAY_SCAN;
+ struct _SUBCHANNEL
+ {
+ UCHAR OperationCode;
+ UCHAR Reserved0:1;
+ UCHAR Msf:1;
+ UCHAR Reserved1:3;
+ UCHAR LogicalUnitNumber:3;
+ UCHAR Reserved2:6;
+ UCHAR SubQ:1;
+ UCHAR Reserved3:1;
+ UCHAR Format;
+ UCHAR Reserved4[2];
+ UCHAR TrackNumber;
+ UCHAR AllocationLength[2];
+ UCHAR Control;
+ } SUBCHANNEL, *PSUBCHANNEL;
+ struct _READ_CD
+ {
+ UCHAR OperationCode;
+ UCHAR RelativeAddress:1;
+ UCHAR Reserved0:1;
+ UCHAR ExpectedSectorType:3;
+ UCHAR Lun:3;
+ UCHAR StartingLBA[4];
+ UCHAR TransferBlocks[3];
+ UCHAR Reserved2:1;
+ UCHAR ErrorFlags:2;
+ UCHAR IncludeEDC:1;
+ UCHAR IncludeUserData:1;
+ UCHAR HeaderCode:2;
+ UCHAR IncludeSyncData:1;
+ UCHAR SubChannelSelection:3;
+ UCHAR Reserved3:5;
+ UCHAR Control;
+ } READ_CD, *PREAD_CD;
+ struct _READ_CD_MSF
+ {
+ UCHAR OperationCode;
+ UCHAR RelativeAddress:1;
+ UCHAR Reserved1:1;
+ UCHAR ExpectedSectorType:3;
+ UCHAR Lun:3;
+ UCHAR Reserved2;
+ UCHAR StartingM;
+ UCHAR StartingS;
+ UCHAR StartingF;
+ UCHAR EndingM;
+ UCHAR EndingS;
+ UCHAR EndingF;
+ UCHAR Reserved3;
+ UCHAR Reserved4:1;
+ UCHAR ErrorFlags:2;
+ UCHAR IncludeEDC:1;
+ UCHAR IncludeUserData:1;
+ UCHAR HeaderCode:2;
+ UCHAR IncludeSyncData:1;
+ UCHAR SubChannelSelection:3;
+ UCHAR Reserved5:5;
+ UCHAR Control;
+ } READ_CD_MSF, *PREAD_CD_MSF;
+ struct _PLXTR_READ_CDDA
+ {
+ UCHAR OperationCode;
+ UCHAR Reserved0:5;
+ UCHAR LogicalUnitNumber:3;
+ UCHAR LogicalBlockByte0;
+ UCHAR LogicalBlockByte1;
+ UCHAR LogicalBlockByte2;
+ UCHAR LogicalBlockByte3;
+ UCHAR TransferBlockByte0;
+ UCHAR TransferBlockByte1;
+ UCHAR TransferBlockByte2;
+ UCHAR TransferBlockByte3;
+ UCHAR SubCode;
+ UCHAR Control;
+ } PLXTR_READ_CDDA, *PPLXTR_READ_CDDA;
+ struct _NEC_READ_CDDA
+ {
+ UCHAR OperationCode;
+ UCHAR Reserved0;
+ UCHAR LogicalBlockByte0;
+ UCHAR LogicalBlockByte1;
+ UCHAR LogicalBlockByte2;
+ UCHAR LogicalBlockByte3;
+ UCHAR Reserved1;
+ UCHAR TransferBlockByte0;
+ UCHAR TransferBlockByte1;
+ UCHAR Control;
+ } NEC_READ_CDDA, *PNEC_READ_CDDA;
+ struct _MODE_SENSE
+ {
+ UCHAR OperationCode;
+ UCHAR Reserved1:3;
+ UCHAR Dbd:1;
+ UCHAR Reserved2:1;
+ UCHAR LogicalUnitNumber:3;
+ UCHAR PageCode:6;
+ UCHAR Pc:2;
+ UCHAR Reserved3;
+ UCHAR AllocationLength;
+ UCHAR Control;
+ } MODE_SENSE, *PMODE_SENSE;
+ struct _MODE_SENSE10
+ {
+ UCHAR OperationCode;
+ UCHAR Reserved1:3;
+ UCHAR Dbd:1;
+ UCHAR Reserved2:1;
+ UCHAR LogicalUnitNumber:3;
+ UCHAR PageCode:6;
+ UCHAR Pc:2;
+ UCHAR Reserved3[4];
+ UCHAR AllocationLength[2];
+ UCHAR Control;
+ } MODE_SENSE10, *PMODE_SENSE10;
+ struct _MODE_SELECT
+ {
+ UCHAR OperationCode;
+ UCHAR SPBit:1;
+ UCHAR Reserved1:3;
+ UCHAR PFBit:1;
+ UCHAR LogicalUnitNumber:3;
+ UCHAR Reserved2[2];
+ UCHAR ParameterListLength;
+ UCHAR Control;
+ } MODE_SELECT, *PMODE_SELECT;
+ struct _MODE_SELECT10
+ {
+ UCHAR OperationCode;
+ UCHAR SPBit:1;
+ UCHAR Reserved1:3;
+ UCHAR PFBit:1;
+ UCHAR LogicalUnitNumber:3;
+ UCHAR Reserved2[5];
+ UCHAR ParameterListLength[2];
+ UCHAR Control;
+ } MODE_SELECT10, *PMODE_SELECT10;
+ struct _LOCATE
+ {
+ UCHAR OperationCode;
+ UCHAR Immediate:1;
+ UCHAR CPBit:1;
+ UCHAR BTBit:1;
+ UCHAR Reserved1:2;
+ UCHAR LogicalUnitNumber:3;
+ UCHAR Reserved3;
+ UCHAR LogicalBlockAddress[4];
+ UCHAR Reserved4;
+ UCHAR Partition;
+ UCHAR Control;
+ } LOCATE, *PLOCATE;
+ struct _LOGSENSE
+ {
+ UCHAR OperationCode;
+ UCHAR SPBit:1;
+ UCHAR PPCBit:1;
+ UCHAR Reserved1:3;
+ UCHAR LogicalUnitNumber:3;
+ UCHAR PageCode:6;
+ UCHAR PCBit:2;
+ UCHAR Reserved2;
+ UCHAR Reserved3;
+ UCHAR ParameterPointer[2];
+ UCHAR AllocationLength[2];
+ UCHAR Control;
+ } LOGSENSE, *PLOGSENSE;
+ struct _LOGSELECT
+ {
+ UCHAR OperationCode;
+ UCHAR SPBit:1;
+ UCHAR PCRBit:1;
+ UCHAR Reserved1:3;
+ UCHAR LogicalUnitNumber:3;
+ UCHAR Reserved:6;
+ UCHAR PCBit:2;
+ UCHAR Reserved2[4];
+ UCHAR ParameterListLength[2];
+ UCHAR Control;
+ } LOGSELECT, *PLOGSELECT;
+ struct _PRINT
+ {
+ UCHAR OperationCode;
+ UCHAR Reserved:5;
+ UCHAR LogicalUnitNumber:3;
+ UCHAR TransferLength[3];
+ UCHAR Control;
+ } PRINT, *PPRINT;
+ struct _SEEK
+ {
+ UCHAR OperationCode;
+ UCHAR Reserved1:5;
+ UCHAR LogicalUnitNumber:3;
+ UCHAR LogicalBlockAddress[4];
+ UCHAR Reserved2[3];
+ UCHAR Control;
+ } SEEK, *PSEEK;
+ struct _ERASE
+ {
+ UCHAR OperationCode;
+ UCHAR Long:1;
+ UCHAR Immediate:1;
+ UCHAR Reserved1:3;
+ UCHAR LogicalUnitNumber:3;
+ UCHAR Reserved2[3];
+ UCHAR Control;
+ } ERASE, *PERASE;
+ struct _START_STOP
+ {
+ UCHAR OperationCode;
+ UCHAR Immediate:1;
+ UCHAR Reserved1:4;
+ UCHAR LogicalUnitNumber:3;
+ UCHAR Reserved2[2];
+ UCHAR Start:1;
+ UCHAR LoadEject:1;
+ UCHAR Reserved3:6;
+ UCHAR Control;
+ } START_STOP, *PSTART_STOP;
+ struct _MEDIA_REMOVAL
+ {
+ UCHAR OperationCode;
+ UCHAR Reserved1:5;
+ UCHAR LogicalUnitNumber:3;
+ UCHAR Reserved2[2];
+ UCHAR Prevent:1;
+ UCHAR Persistant:1;
+ UCHAR Reserved3:6;
+ UCHAR Control;
+ } MEDIA_REMOVAL, *PMEDIA_REMOVAL;
+ struct _SEEK_BLOCK
+ {
+ UCHAR OperationCode;
+ UCHAR Immediate:1;
+ UCHAR Reserved1:7;
+ UCHAR BlockAddress[3];
+ UCHAR Link:1;
+ UCHAR Flag:1;
+ UCHAR Reserved2:4;
+ UCHAR VendorUnique:2;
+ } SEEK_BLOCK, *PSEEK_BLOCK;
+ struct _REQUEST_BLOCK_ADDRESS
+ {
+ UCHAR OperationCode;
+ UCHAR Reserved1[3];
+ UCHAR AllocationLength;
+ UCHAR Link:1;
+ UCHAR Flag:1;
+ UCHAR Reserved2:4;
+ UCHAR VendorUnique:2;
+ } REQUEST_BLOCK_ADDRESS, *PREQUEST_BLOCK_ADDRESS;
+ struct _PARTITION
+ {
+ UCHAR OperationCode;
+ UCHAR Immediate:1;
+ UCHAR Sel:1;
+ UCHAR PartitionSelect:6;
+ UCHAR Reserved1[3];
+ UCHAR Control;
+ } PARTITION, *PPARTITION;
+ struct _WRITE_TAPE_MARKS
+ {
+ UCHAR OperationCode;
+ UCHAR Immediate:1;
+ UCHAR WriteSetMarks:1;
+ UCHAR Reserved:3;
+ UCHAR LogicalUnitNumber:3;
+ UCHAR TransferLength[3];
+ UCHAR Control;
+ } WRITE_TAPE_MARKS, *PWRITE_TAPE_MARKS;
+ struct _SPACE_TAPE_MARKS
+ {
+ UCHAR OperationCode;
+ UCHAR Code:3;
+ UCHAR Reserved:2;
+ UCHAR LogicalUnitNumber:3;
+ UCHAR NumMarksMSB;
+ UCHAR NumMarks;
+ UCHAR NumMarksLSB;
+ union
+ {
+ UCHAR value;
+ struct
+ {
+ UCHAR Link:1;
+ UCHAR Flag:1;
+ UCHAR Reserved:4;
+ UCHAR VendorUnique:2;
+ } Fields;
+ } Byte6;
+ } SPACE_TAPE_MARKS, *PSPACE_TAPE_MARKS;
+ struct _READ_POSITION
+ {
+ UCHAR Operation;
+ UCHAR BlockType:1;
+ UCHAR Reserved1:4;
+ UCHAR Lun:3;
+ UCHAR Reserved2[7];
+ UCHAR Control;
+ } READ_POSITION, *PREAD_POSITION;
+ struct _CDB6READWRITETAPE
+ {
+ UCHAR OperationCode;
+ UCHAR VendorSpecific:5;
+ UCHAR Reserved:3;
+ UCHAR TransferLenMSB;
+ UCHAR TransferLen;
+ UCHAR TransferLenLSB;
+ UCHAR Link:1;
+ UCHAR Flag:1;
+ UCHAR Reserved1:4;
+ UCHAR VendorUnique:2;
+ } CDB6READWRITETAPE, *PCDB6READWRITETAPE;
+ struct _INIT_ELEMENT_STATUS
+ {
+ UCHAR OperationCode;
+ UCHAR Reserved1:5;
+ UCHAR LogicalUnitNubmer:3;
+ UCHAR Reserved2[3];
+ UCHAR Reserved3:7;
+ UCHAR NoBarCode:1;
+ } INIT_ELEMENT_STATUS, *PINIT_ELEMENT_STATUS;
+ struct _INITIALIZE_ELEMENT_RANGE
+ {
+ UCHAR OperationCode;
+ UCHAR Range:1;
+ UCHAR Reserved1:4;
+ UCHAR LogicalUnitNubmer:3;
+ UCHAR FirstElementAddress[2];
+ UCHAR Reserved2[2];
+ UCHAR NumberOfElements[2];
+ UCHAR Reserved3;
+ UCHAR Reserved4:7;
+ UCHAR NoBarCode:1;
+ } INITIALIZE_ELEMENT_RANGE, *PINITIALIZE_ELEMENT_RANGE;
+ struct _POSITION_TO_ELEMENT
+ {
+ UCHAR OperationCode;
+ UCHAR Reserved1:5;
+ UCHAR LogicalUnitNumber:3;
+ UCHAR TransportElementAddress[2];
+ UCHAR DestinationElementAddress[2];
+ UCHAR Reserved2[2];
+ UCHAR Flip:1;
+ UCHAR Reserved3:7;
+ UCHAR Control;
+ } POSITION_TO_ELEMENT, *PPOSITION_TO_ELEMENT;
+ struct _MOVE_MEDIUM
+ {
+ UCHAR OperationCode;
+ UCHAR Reserved1:5;
+ UCHAR LogicalUnitNumber:3;
+ UCHAR TransportElementAddress[2];
+ UCHAR SourceElementAddress[2];
+ UCHAR DestinationElementAddress[2];
+ UCHAR Reserved2[2];
+ UCHAR Flip:1;
+ UCHAR Reserved3:7;
+ UCHAR Control;
+ } MOVE_MEDIUM, *PMOVE_MEDIUM;
+ struct _EXCHANGE_MEDIUM
+ {
+ UCHAR OperationCode;
+ UCHAR Reserved1:5;
+ UCHAR LogicalUnitNumber:3;
+ UCHAR TransportElementAddress[2];
+ UCHAR SourceElementAddress[2];
+ UCHAR Destination1ElementAddress[2];
+ UCHAR Destination2ElementAddress[2];
+ UCHAR Flip1:1;
+ UCHAR Flip2:1;
+ UCHAR Reserved3:6;
+ UCHAR Control;
+ } EXCHANGE_MEDIUM, *PEXCHANGE_MEDIUM;
+ struct _READ_ELEMENT_STATUS
+ {
+ UCHAR OperationCode;
+ UCHAR ElementType:4;
+ UCHAR VolTag:1;
+ UCHAR LogicalUnitNumber:3;
+ UCHAR StartingElementAddress[2];
+ UCHAR NumberOfElements[2];
+ UCHAR Reserved1;
+ UCHAR AllocationLength[3];
+ UCHAR Reserved2;
+ UCHAR Control;
+ } READ_ELEMENT_STATUS, *PREAD_ELEMENT_STATUS;
+ struct _SEND_VOLUME_TAG
+ {
+ UCHAR OperationCode;
+ UCHAR ElementType:4;
+ UCHAR Reserved1:1;
+ UCHAR LogicalUnitNumber:3;
+ UCHAR StartingElementAddress[2];
+ UCHAR Reserved2;
+ UCHAR ActionCode:5;
+ UCHAR Reserved3:3;
+ UCHAR Reserved4[2];
+ UCHAR ParameterListLength[2];
+ UCHAR Reserved5;
+ UCHAR Control;
+ } SEND_VOLUME_TAG, *PSEND_VOLUME_TAG;
+ struct _REQUEST_VOLUME_ELEMENT_ADDRESS
+ {
+ UCHAR OperationCode;
+ UCHAR ElementType:4;
+ UCHAR VolTag:1;
+ UCHAR LogicalUnitNumber:3;
+ UCHAR StartingElementAddress[2];
+ UCHAR NumberElements[2];
+ UCHAR Reserved1;
+ UCHAR AllocationLength[3];
+ UCHAR Reserved2;
+ UCHAR Control;
+ } REQUEST_VOLUME_ELEMENT_ADDRESS, *PREQUEST_VOLUME_ELEMENT_ADDRESS;
+ struct _LOAD_UNLOAD
+ {
+ UCHAR OperationCode;
+ UCHAR Immediate:1;
+ UCHAR Reserved1:4;
+ UCHAR Lun:3;
+ UCHAR Reserved2[2];
+ UCHAR Start:1;
+ UCHAR LoadEject:1;
+ UCHAR Reserved3:6;
+ UCHAR Reserved4[3];
+ UCHAR Slot;
+ UCHAR Reserved5[3];
+ } LOAD_UNLOAD, *PLOAD_UNLOAD;
+ struct _MECH_STATUS
+ {
+ UCHAR OperationCode;
+ UCHAR Reserved:5;
+ UCHAR Lun:3;
+ UCHAR Reserved1[6];
+ UCHAR AllocationLength[2];
+ UCHAR Reserved2[1];
+ UCHAR Control;
+ } MECH_STATUS, *PMECH_STATUS;
+ struct _SYNCHRONIZE_CACHE10
+ {
+ UCHAR OperationCode;
+ UCHAR RelAddr:1;
+ UCHAR Immediate:1;
+ UCHAR Reserved:3;
+ UCHAR Lun:3;
+ UCHAR LogicalBlockAddress[4];
+ UCHAR Reserved2;
+ UCHAR BlockCount[2];
+ UCHAR Control;
+ } SYNCHRONIZE_CACHE10, *PSYNCHRONIZE_CACHE10;
+ struct _GET_EVENT_STATUS_NOTIFICATION
+ {
+ UCHAR OperationCode;
+ UCHAR Immediate:1;
+ UCHAR Reserved:4;
+ UCHAR Lun:3;
+ UCHAR Reserved2[2];
+ UCHAR NotificationClassRequest;
+ UCHAR Reserved3[2];
+ UCHAR EventListLength[2];
+ UCHAR Control;
+ } GET_EVENT_STATUS_NOTIFICATION, *PGET_EVENT_STATUS_NOTIFICATION;
+ struct _GET_PERFORMANCE
+ {
+ UCHAR OperationCode;
+ UCHAR Except:2;
+ UCHAR Write:1;
+ UCHAR Tolerance:2;
+ UCHAR Reserved0:3;
+ UCHAR StartingLBA[4];
+ UCHAR Reserved1[2];
+ UCHAR MaximumNumberOfDescriptors[2];
+ UCHAR Type;
+ UCHAR Control;
+ } GET_PERFORMANCE;
+ struct _READ_DVD_STRUCTURE
+ {
+ UCHAR OperationCode;
+ UCHAR Reserved1:5;
+ UCHAR Lun:3;
+ UCHAR RMDBlockNumber[4];
+ UCHAR LayerNumber;
+ UCHAR Format;
+ UCHAR AllocationLength[2];
+ UCHAR Reserved3:6;
+ UCHAR AGID:2;
+ UCHAR Control;
+ } READ_DVD_STRUCTURE, *PREAD_DVD_STRUCTURE;
+ struct _SET_STREAMING
+ {
+ UCHAR OperationCode;
+ UCHAR Reserved[8];
+ UCHAR ParameterListLength[2];
+ UCHAR Control;
+ } SET_STREAMING;
+ struct _SEND_DVD_STRUCTURE
+ {
+ UCHAR OperationCode;
+ UCHAR Reserved1:5;
+ UCHAR Lun:3;
+ UCHAR Reserved2[5];
+ UCHAR Format;
+ UCHAR ParameterListLength[2];
+ UCHAR Reserved3;
+ UCHAR Control;
+ } SEND_DVD_STRUCTURE, *PSEND_DVD_STRUCTURE;
+ struct _SEND_KEY
+ {
+ UCHAR OperationCode;
+ UCHAR Reserved1:5;
+ UCHAR Lun:3;
+ UCHAR Reserved2[6];
+ UCHAR ParameterListLength[2];
+ UCHAR KeyFormat:6;
+ UCHAR AGID:2;
+ UCHAR Control;
+ } SEND_KEY, *PSEND_KEY;
+ struct _REPORT_KEY
+ {
+ UCHAR OperationCode;
+ UCHAR Reserved1:5;
+ UCHAR Lun:3;
+ UCHAR LogicalBlockAddress[4];
+ UCHAR Reserved2[2];
+ UCHAR AllocationLength[2];
+ UCHAR KeyFormat:6;
+ UCHAR AGID:2;
+ UCHAR Control;
+ } REPORT_KEY, *PREPORT_KEY;
+ struct _SET_READ_AHEAD
+ {
+ UCHAR OperationCode;
+ UCHAR Reserved1:5;
+ UCHAR Lun:3;
+ UCHAR TriggerLBA[4];
+ UCHAR ReadAheadLBA[4];
+ UCHAR Reserved2;
+ UCHAR Control;
+ } SET_READ_AHEAD, *PSET_READ_AHEAD;
+ struct _READ_FORMATTED_CAPACITIES
+ {
+ UCHAR OperationCode;
+ UCHAR Reserved1:5;
+ UCHAR Lun:3;
+ UCHAR Reserved2[5];
+ UCHAR AllocationLength[2];
+ UCHAR Control;
+ } READ_FORMATTED_CAPACITIES, *PREAD_FORMATTED_CAPACITIES;
+ struct _REPORT_LUNS
+ {
+ UCHAR OperationCode;
+ UCHAR Reserved1[5];
+ UCHAR AllocationLength[4];
+ UCHAR Reserved2[1];
+ UCHAR Control;
+ } REPORT_LUNS, *PREPORT_LUNS;
+ struct _PERSISTENT_RESERVE_IN
+ {
+ UCHAR OperationCode;
+ UCHAR ServiceAction:5;
+ UCHAR Reserved1:3;
+ UCHAR Reserved2[5];
+ UCHAR AllocationLength[2];
+ UCHAR Control;
+ } PERSISTENT_RESERVE_IN, *PPERSISTENT_RESERVE_IN;
+ struct _PERSISTENT_RESERVE_OUT
+ {
+ UCHAR OperationCode;
+ UCHAR ServiceAction:5;
+ UCHAR Reserved1:3;
+ UCHAR Type:4;
+ UCHAR Scope:4;
+ UCHAR Reserved2[4];
+ UCHAR ParameterListLength[2];
+ UCHAR Control;
+ } PERSISTENT_RESERVE_OUT, *PPERSISTENT_RESERVE_OUT;
+ struct _GET_CONFIGURATION
+ {
+ UCHAR OperationCode;
+ UCHAR RequestType:1;
+ UCHAR Reserved1:7;
+ UCHAR StartingFeature[2];
+ UCHAR Reserved2[3];
+ UCHAR AllocationLength[2];
+ UCHAR Control;
+ } GET_CONFIGURATION, *PGET_CONFIGURATION;
+ struct _SET_CD_SPEED
+ {
+ UCHAR OperationCode;
+ _ANONYMOUS_UNION union
+ {
+ UCHAR Reserved1;
+ _ANONYMOUS_STRUCT struct
+ {
+ UCHAR RotationControl:2;
+ UCHAR Reserved3:6;
+ } DUMMYSTRUCTNAME;
+ } DUMMYUNIONNAME;
+ UCHAR ReadSpeed[2];
+ UCHAR WriteSpeed[2];
+ UCHAR Reserved2[5];
+ UCHAR Control;
+ } SET_CD_SPEED, *PSET_CD_SPEED;
+ struct _READ12
+ {
+ UCHAR OperationCode;
+ UCHAR RelativeAddress:1;
+ UCHAR Reserved1:2;
+ UCHAR ForceUnitAccess:1;
+ UCHAR DisablePageOut:1;
+ UCHAR LogicalUnitNumber:3;
+ UCHAR LogicalBlock[4];
+ UCHAR TransferLength[4];
+ UCHAR Reserved2:7;
+ UCHAR Streaming:1;
+ UCHAR Control;
+ } READ12;
+ struct _WRITE12
+ {
+ UCHAR OperationCode;
+ UCHAR RelativeAddress:1;
+ UCHAR Reserved1:1;
+ UCHAR EBP:1;
+ UCHAR ForceUnitAccess:1;
+ UCHAR DisablePageOut:1;
+ UCHAR LogicalUnitNumber:3;
+ UCHAR LogicalBlock[4];
+ UCHAR TransferLength[4];
+ UCHAR Reserved2:7;
+ UCHAR Streaming:1;
+ UCHAR Control;
+ } WRITE12;
+ struct _READ16
+ {
+ UCHAR OperationCode;
+ UCHAR Reserved1:3;
+ UCHAR ForceUnitAccess:1;
+ UCHAR DisablePageOut:1;
+ UCHAR ReadProtect:3;
+ UCHAR LogicalBlock[8];
+ UCHAR TransferLength[4];
+ UCHAR Reserved2:7;
+ UCHAR Streaming:1;
+ UCHAR Control;
+ } READ16;
+ struct _WRITE16
+ {
+ UCHAR OperationCode;
+ UCHAR Reserved1:3;
+ UCHAR ForceUnitAccess:1;
+ UCHAR DisablePageOut:1;
+ UCHAR WriteProtect:3;
+ UCHAR LogicalBlock[8];
+ UCHAR TransferLength[4];
+ UCHAR Reserved2:7;
+ UCHAR Streaming:1;
+ UCHAR Control;
+ } WRITE16;
+ struct _VERIFY16
+ {
+ UCHAR OperationCode;
+ UCHAR Reserved1:1;
+ UCHAR ByteCheck:1;
+ UCHAR BlockVerify:1;
+ UCHAR Reserved2: 1;
+ UCHAR DisablePageOut:1;
+ UCHAR VerifyProtect:3;
+ UCHAR LogicalBlock[8];
+ UCHAR VerificationLength[4];
+ UCHAR Reserved3:7;
+ UCHAR Streaming:1;
+ UCHAR Control;
+ } VERIFY16;
+ struct _SYNCHRONIZE_CACHE16
+ {
+ UCHAR OperationCode;
+ UCHAR Reserved1:1;
+ UCHAR Immediate:1;
+ UCHAR Reserved2:6;
+ UCHAR LogicalBlock[8];
+ UCHAR BlockCount[4];
+ UCHAR Reserved3;
+ UCHAR Control;
+ } SYNCHRONIZE_CACHE16;
+ struct _READ_CAPACITY16
+ {
+ UCHAR OperationCode;
+ UCHAR ServiceAction:5;
+ UCHAR Reserved1:3;
+ UCHAR LogicalBlock[8];
+ UCHAR BlockCount[4];
+ UCHAR PMI:1;
+ UCHAR Reserved2:7;
+ UCHAR Control;
+ } READ_CAPACITY16;
+ ULONG AsUlong[4];
+ UCHAR AsByte[16];
+} CDB, *PCDB;
+
+typedef union _EIGHT_BYTE
+{
+ struct
+ {
+ UCHAR Byte0;
+ UCHAR Byte1;
+ UCHAR Byte2;
+ UCHAR Byte3;
+ UCHAR Byte4;
+ UCHAR Byte5;
+ UCHAR Byte6;
+ UCHAR Byte7;
+ };
+ ULONGLONG AsULongLong;
+} EIGHT_BYTE, *PEIGHT_BYTE;
+
+typedef union _FOUR_BYTE
+{
+ struct
+ {
+ UCHAR Byte0;
+ UCHAR Byte1;
+ UCHAR Byte2;
+ UCHAR Byte3;
+ };
+ ULONG AsULong;
+} FOUR_BYTE, *PFOUR_BYTE;
+
+typedef union _TWO_BYTE
+{
+ struct
+ {
+ UCHAR Byte0;
+ UCHAR Byte1;
+ };
+ USHORT AsUShort;
+} TWO_BYTE, *PTWO_BYTE;
+#include <poppack.h>
+
+#if (NTDDI_VERSION < NTDDI_WINXP)
+typedef struct _INQUIRYDATA
+{
+ UCHAR DeviceType:5;
+ UCHAR DeviceTypeQualifier:3;
+ UCHAR DeviceTypeModifier:7;
+ UCHAR RemovableMedia:1;
+ UCHAR Versions;
+ UCHAR ResponseDataFormat:4;
+ UCHAR HiSupport:1;
+ UCHAR NormACA:1;
+ UCHAR ReservedBit:1;
+ UCHAR AERC:1;
+ UCHAR AdditionalLength;
+ UCHAR Reserved[2];
+ UCHAR SoftReset:1;
+ UCHAR CommandQueue:1;
+ UCHAR Reserved2:1;
+ UCHAR LinkedCommands:1;
+ UCHAR Synchronous:1;
+ UCHAR Wide16Bit:1;
+ UCHAR Wide32Bit:1;
+ UCHAR RelativeAddressing:1;
+ UCHAR VendorId[8];
+ UCHAR ProductId[16];
+ UCHAR ProductRevisionLevel[4];
+ UCHAR VendorSpecific[20];
+ UCHAR Reserved3[40];
+} INQUIRYDATA, *PINQUIRYDATA;
+#else
+#include <pshpack1.h>
+typedef struct _INQUIRYDATA
+{
+ UCHAR DeviceType:5;
+ UCHAR DeviceTypeQualifier:3;
+ UCHAR DeviceTypeModifier:7;
+ UCHAR RemovableMedia:1;
+ union
+ {
+ UCHAR Versions;
+ struct
+ {
+ UCHAR ANSIVersion:3;
+ UCHAR ECMAVersion:3;
+ UCHAR ISOVersion:2;
+ };
+ };
+ UCHAR ResponseDataFormat:4;
+ UCHAR HiSupport:1;
+ UCHAR NormACA:1;
+ UCHAR TerminateTask:1;
+ UCHAR AERC:1;
+ UCHAR AdditionalLength;
+ UCHAR Reserved;
+ UCHAR Addr16:1;
+ UCHAR Addr32:1;
+ UCHAR AckReqQ:1;
+ UCHAR MediumChanger:1;
+ UCHAR MultiPort:1;
+ UCHAR ReservedBit2:1;
+ UCHAR EnclosureServices:1;
+ UCHAR ReservedBit3:1;
+ UCHAR SoftReset:1;
+ UCHAR CommandQueue:1;
+ UCHAR TransferDisable:1;
+ UCHAR LinkedCommands:1;
+ UCHAR Synchronous:1;
+ UCHAR Wide16Bit:1;
+ UCHAR Wide32Bit:1;
+ UCHAR RelativeAddressing:1;
+ UCHAR VendorId[8];
+ UCHAR ProductId[16];
+ UCHAR ProductRevisionLevel[4];
+ UCHAR VendorSpecific[20];
+ UCHAR Reserved3[40];
+} INQUIRYDATA, *PINQUIRYDATA;
+#include <poppack.h>
+#endif
+
+typedef struct _VPD_MEDIA_SERIAL_NUMBER_PAGE
+{
+ UCHAR DeviceType:5;
+ UCHAR DeviceTypeQualifier:3;
+ UCHAR PageCode;
+ UCHAR Reserved;
+ UCHAR PageLength;
+ UCHAR SerialNumber[0];
+} VPD_MEDIA_SERIAL_NUMBER_PAGE, *PVPD_MEDIA_SERIAL_NUMBER_PAGE;
+
+typedef struct _VPD_SERIAL_NUMBER_PAGE
+{
+ UCHAR DeviceType:5;
+ UCHAR DeviceTypeQualifier:3;
+ UCHAR PageCode;
+ UCHAR Reserved;
+ UCHAR PageLength;
+ UCHAR SerialNumber[0];
+} VPD_SERIAL_NUMBER_PAGE, *PVPD_SERIAL_NUMBER_PAGE;
+
+typedef struct _VPD_IDENTIFICATION_DESCRIPTOR
+{
+ UCHAR CodeSet:4;
+ UCHAR Reserved:4;
+ UCHAR IdentifierType:4;
+ UCHAR Association:2;
+ UCHAR Reserved2:2;
+ UCHAR Reserved3;
+ UCHAR IdentifierLength;
+ UCHAR Identifier[0];
+} VPD_IDENTIFICATION_DESCRIPTOR, *PVPD_IDENTIFICATION_DESCRIPTOR;
+
+typedef struct _VPD_IDENTIFICATION_PAGE
+{
+ UCHAR DeviceType:5;
+ UCHAR DeviceTypeQualifier:3;
+ UCHAR PageCode;
+ UCHAR Reserved;
+ UCHAR PageLength;
+ UCHAR Descriptors[0];
+} VPD_IDENTIFICATION_PAGE, *PVPD_IDENTIFICATION_PAGE;
+
+typedef struct _VPD_SUPPORTED_PAGES_PAGE
+{
+ UCHAR DeviceType:5;
+ UCHAR DeviceTypeQualifier:3;
+ UCHAR PageCode;
+ UCHAR Reserved;
+ UCHAR PageLength;
+ UCHAR SupportedPageList[0];
+} VPD_SUPPORTED_PAGES_PAGE, *PVPD_SUPPORTED_PAGES_PAGE;
+
+#include <pshpack1.h>
+typedef struct _READ_CAPACITY_DATA
+{
+ ULONG LogicalBlockAddress;
+ ULONG BytesPerBlock;
+} READ_CAPACITY_DATA, *PREAD_CAPACITY_DATA;
+
+typedef struct _READ_CAPACITY_DATA_EX
+{
+ LARGE_INTEGER LogicalBlockAddress;
+ ULONG BytesPerBlock;
+} READ_CAPACITY_DATA_EX, *PREAD_CAPACITY_DATA_EX;
+
+typedef struct _MODE_PARAMETER_HEADER
+{
+ UCHAR ModeDataLength;
+ UCHAR MediumType;
+ UCHAR DeviceSpecificParameter;
+ UCHAR BlockDescriptorLength;
+}MODE_PARAMETER_HEADER, *PMODE_PARAMETER_HEADER;
+
+typedef struct _MODE_PARAMETER_HEADER10
+{
+ UCHAR ModeDataLength[2];
+ UCHAR MediumType;
+ UCHAR DeviceSpecificParameter;
+ UCHAR Reserved[2];
+ UCHAR BlockDescriptorLength[2];
+}MODE_PARAMETER_HEADER10, *PMODE_PARAMETER_HEADER10;
+
+typedef struct _MODE_PARAMETER_BLOCK
+{
+ UCHAR DensityCode;
+ UCHAR NumberOfBlocks[3];
+ UCHAR Reserved;
+ UCHAR BlockLength[3];
+}MODE_PARAMETER_BLOCK, *PMODE_PARAMETER_BLOCK;
+
+typedef struct _LUN_LIST
+{
+ UCHAR LunListLength[4];
+ UCHAR Reserved[4];
+#if !defined(__midl)
+ UCHAR Lun[0][8];
+#endif
+} LUN_LIST, *PLUN_LIST;
+#include <poppack.h>
+
typedef PHYSICAL_ADDRESS STOR_PHYSICAL_ADDRESS;
-typedef struct _STOR_SCATTER_GATHER_ELEMENT {
- STOR_PHYSICAL_ADDRESS PhysicalAddress;
- ULONG Length;
- ULONG_PTR Reserved;
+typedef struct _ACCESS_RANGE
+{
+ STOR_PHYSICAL_ADDRESS RangeStart;
+ ULONG RangeLength;
+ BOOLEAN RangeInMemory;
+} ACCESS_RANGE, *PACCESS_RANGE;
+
+typedef struct _MEMORY_REGION
+{
+ PUCHAR VirtualBase;
+ PHYSICAL_ADDRESS PhysicalBase;
+ ULONG Length;
+} MEMORY_REGION, *PMEMORY_REGION;
+
+typedef struct _PORT_CONFIGURATION_INFORMATION
+{
+ ULONG Length;
+ ULONG SystemIoBusNumber;
+ INTERFACE_TYPE AdapterInterfaceType;
+ ULONG BusInterruptLevel;
+ ULONG BusInterruptVector;
+ KINTERRUPT_MODE InterruptMode;
+ ULONG MaximumTransferLength;
+ ULONG NumberOfPhysicalBreaks;
+ ULONG DmaChannel;
+ ULONG DmaPort;
+ DMA_WIDTH DmaWidth;
+ DMA_SPEED DmaSpeed;
+ ULONG AlignmentMask;
+ ULONG NumberOfAccessRanges;
+ ACCESS_RANGE (*AccessRanges)[];
+ PVOID Reserved;
+ UCHAR NumberOfBuses;
+ CCHAR InitiatorBusId[8];
+ BOOLEAN ScatterGather;
+ BOOLEAN Master;
+ BOOLEAN CachesData;
+ BOOLEAN AdapterScansDown;
+ BOOLEAN AtdiskPrimaryClaimed;
+ BOOLEAN AtdiskSecondaryClaimed;
+ BOOLEAN Dma32BitAddresses;
+ BOOLEAN DemandMode;
+ UCHAR MapBuffers;
+ BOOLEAN NeedPhysicalAddresses;
+ BOOLEAN TaggedQueuing;
+ BOOLEAN AutoRequestSense;
+ BOOLEAN MultipleRequestPerLu;
+ BOOLEAN ReceiveEvent;
+ BOOLEAN RealModeInitialized;
+ BOOLEAN BufferAccessScsiPortControlled;
+ UCHAR MaximumNumberOfTargets;
+ UCHAR ReservedUchars[2];
+ ULONG SlotNumber;
+ ULONG BusInterruptLevel2;
+ ULONG BusInterruptVector2;
+ KINTERRUPT_MODE InterruptMode2;
+ ULONG DmaChannel2;
+ ULONG DmaPort2;
+ DMA_WIDTH DmaWidth2;
+ DMA_SPEED DmaSpeed2;
+ ULONG DeviceExtensionSize;
+ ULONG SpecificLuExtensionSize;
+ ULONG SrbExtensionSize;
+ UCHAR Dma64BitAddresses;
+ BOOLEAN ResetTargetSupported;
+ UCHAR MaximumNumberOfLogicalUnits;
+ BOOLEAN WmiDataProvider;
+ STOR_SYNCHRONIZATION_MODEL SynchronizationModel;
+} PORT_CONFIGURATION_INFORMATION, *PPORT_CONFIGURATION_INFORMATION;
+
+typedef struct _STOR_SCATTER_GATHER_ELEMENT
+{
+ STOR_PHYSICAL_ADDRESS PhysicalAddress;
+ ULONG Length;
+ ULONG_PTR Reserved;
} STOR_SCATTER_GATHER_ELEMENT, *PSTOR_SCATTER_GATHER_ELEMENT;
-typedef struct _STOR_SCATTER_GATHER_LIST {
- ULONG NumberOfElements;
- ULONG_PTR Reserved;
- STOR_SCATTER_GATHER_ELEMENT List[0];
+typedef struct _STOR_SCATTER_GATHER_LIST
+{
+ ULONG NumberOfElements;
+ ULONG_PTR Reserved;
+ STOR_SCATTER_GATHER_ELEMENT List[];
} STOR_SCATTER_GATHER_LIST, *PSTOR_SCATTER_GATHER_LIST;
-typedef struct _SCSI_WMI_REQUEST_BLOCK {
- USHORT Length;
- UCHAR Function;
- UCHAR SrbStatus;
- UCHAR WMISubFunction;
- UCHAR PathId;
- UCHAR TargetId;
- UCHAR Lun;
- UCHAR Reserved1;
- UCHAR WMIFlags;
- UCHAR Reserved2[2];
- ULONG SrbFlags;
- ULONG DataTransferLength;
- ULONG TimeOutValue;
- PVOID DataBuffer;
- PVOID DataPath;
- PVOID Reserved3;
- PVOID OriginalRequest;
- PVOID SrbExtension;
- ULONG Reserved4;
- UCHAR Reserved5[16];
-} SCSI_WMI_REQUEST_BLOCK, *PSCSI_WMI_REQUEST_BLOCK;
-
-STORPORTAPI
+typedef struct _DPC_BUFFER
+{
+ CSHORT Type;
+ UCHAR Number;
+ UCHAR Importance;
+ struct
+ {
+ PVOID F;
+ PVOID B;
+ };
+ PVOID DeferredRoutine;
+ PVOID DeferredContext;
+ PVOID SystemArgument1;
+ PVOID SystemArgument2;
+ PVOID DpcData;
+} DPC_BUFFER;
+
+typedef struct _STOR_DPC
+{
+ DPC_BUFFER Dpc;
+ ULONG_PTR Lock;
+} STOR_DPC, *PSTOR_DPC;
+
+typedef struct _STOR_LOCK_HANDLE
+{
+ STOR_SPINLOCK Lock;
+ struct
+ {
+ struct
+ {
+ PVOID Next;
+ PVOID Lock;
+ } LockQueue;
+ KIRQL OldIrql;
+ } Context;
+} STOR_LOCK_HANDLE, *PSTOR_LOCK_HANDLE;
+
+typedef
+BOOLEAN
+(NTAPI *PHW_INITIALIZE)(
+ _In_ PVOID DeviceExtension);
+
+typedef
+BOOLEAN
+(NTAPI *PHW_BUILDIO)(
+ _In_ PVOID DeviceExtension,
+ _In_ PSCSI_REQUEST_BLOCK Srb);
+
+typedef
+BOOLEAN
+(NTAPI *PHW_STARTIO)(
+ _In_ PVOID DeviceExtension,
+ _In_ PSCSI_REQUEST_BLOCK Srb);
+
+typedef
+BOOLEAN
+(NTAPI *PHW_INTERRUPT)(
+ _In_ PVOID DeviceExtension);
+
+typedef
+VOID
+(NTAPI *PHW_TIMER)(
+ _In_ PVOID DeviceExtension);
+
+typedef
+VOID
+(NTAPI *PHW_DMA_STARTED)(
+ _In_ PVOID DeviceExtension);
+
+typedef
ULONG
+(NTAPI *PHW_FIND_ADAPTER)(
+ IN PVOID DeviceExtension,
+ IN PVOID HwContext,
+ IN PVOID BusInformation,
+ IN PCHAR ArgumentString,
+ IN OUT PPORT_CONFIGURATION_INFORMATION ConfigInfo,
+ OUT PBOOLEAN Again);
+
+typedef
+BOOLEAN
+(NTAPI *PHW_RESET_BUS)(
+ IN PVOID DeviceExtension,
+ IN ULONG PathId);
+
+typedef
+BOOLEAN
+(NTAPI *PHW_ADAPTER_STATE)(
+ IN PVOID DeviceExtension,
+ IN PVOID Context,
+ IN BOOLEAN SaveState);
+
+typedef
+SCSI_ADAPTER_CONTROL_STATUS
+(NTAPI *PHW_ADAPTER_CONTROL)(
+ IN PVOID DeviceExtension,
+ IN SCSI_ADAPTER_CONTROL_TYPE ControlType,
+ IN PVOID Parameters);
+
+typedef
+BOOLEAN
+(*PHW_PASSIVE_INITIALIZE_ROUTINE)(
+ _In_ PVOID DeviceExtension);
+
+typedef
+VOID
+(*PHW_DPC_ROUTINE)(
+ _In_ PSTOR_DPC Dpc,
+ _In_ PVOID HwDeviceExtension,
+ _In_ PVOID SystemArgument1,
+ _In_ PVOID SystemArgument2);
+
+typedef
+BOOLEAN
+(NTAPI STOR_SYNCHRONIZED_ACCESS)(
+ _In_ PVOID HwDeviceExtension,
+ _In_ PVOID Context);
+
+typedef STOR_SYNCHRONIZED_ACCESS *PSTOR_SYNCHRONIZED_ACCESS;
+
+typedef struct _HW_INITIALIZATION_DATA
+{
+ ULONG HwInitializationDataSize;
+ INTERFACE_TYPE AdapterInterfaceType;
+ PHW_INITIALIZE HwInitialize;
+ PHW_STARTIO HwStartIo;
+ PHW_INTERRUPT HwInterrupt;
+ PHW_FIND_ADAPTER HwFindAdapter;
+ PHW_RESET_BUS HwResetBus;
+ PHW_DMA_STARTED HwDmaStarted;
+ PHW_ADAPTER_STATE HwAdapterState;
+ ULONG DeviceExtensionSize;
+ ULONG SpecificLuExtensionSize;
+ ULONG SrbExtensionSize;
+ ULONG NumberOfAccessRanges;
+ PVOID Reserved;
+ UCHAR MapBuffers;
+ BOOLEAN NeedPhysicalAddresses;
+ BOOLEAN TaggedQueuing;
+ BOOLEAN AutoRequestSense;
+ BOOLEAN MultipleRequestPerLu;
+ BOOLEAN ReceiveEvent;
+ USHORT VendorIdLength;
+ PVOID VendorId;
+ USHORT ReservedUshort;
+ USHORT DeviceIdLength;
+ PVOID DeviceId;
+ PHW_ADAPTER_CONTROL HwAdapterControl;
+ PHW_BUILDIO HwBuildIo;
+} HW_INITIALIZATION_DATA, *PHW_INITIALIZATION_DATA;
+
+
+
+#define REVERSE_BYTES_QUAD(Destination, Source) { \
+ PEIGHT_BYTE d = (PEIGHT_BYTE)(Destination); \
+ PEIGHT_BYTE s = (PEIGHT_BYTE)(Source); \
+ d->Byte7 = s->Byte0; \
+ d->Byte6 = s->Byte1; \
+ d->Byte5 = s->Byte2; \
+ d->Byte4 = s->Byte3; \
+ d->Byte3 = s->Byte4; \
+ d->Byte2 = s->Byte5; \
+ d->Byte1 = s->Byte6; \
+ d->Byte0 = s->Byte7; \
+}
+
+#define REVERSE_BYTES(Destination, Source) { \
+ PFOUR_BYTE d = (PFOUR_BYTE)(Destination); \
+ PFOUR_BYTE s = (PFOUR_BYTE)(Source); \
+ d->Byte3 = s->Byte0; \
+ d->Byte2 = s->Byte1; \
+ d->Byte1 = s->Byte2; \
+ d->Byte0 = s->Byte3; \
+}
+
+#define REVERSE_BYTES_SHORT(Destination, Source) { \
+ PTWO_BYTE d = (PTWO_BYTE)(Destination); \
+ PTWO_BYTE s = (PTWO_BYTE)(Source); \
+ d->Byte1 = s->Byte0; \
+ d->Byte0 = s->Byte1; \
+}
+
+#define StorPortCopyMemory(Destination,Source,Length)
memcpy((Destination),(Source),(Length))
+
+STORPORT_API
+PUCHAR
+NTAPI
+StorPortAllocateRegistryBuffer(
+ _In_ PVOID HwDeviceExtension,
+ _In_ PULONG Length);
+
+STORPORT_API
+BOOLEAN
+NTAPI
+StorPortBusy(
+ _In_ PVOID HwDeviceExtension,
+ _In_ ULONG RequestsToComplete);
+
+STORPORT_API
+VOID
+NTAPI
+StorPortCompleteRequest(
+ _In_ PVOID HwDeviceExtension,
+ _In_ UCHAR PathId,
+ _In_ UCHAR TargetId,
+ _In_ UCHAR Lun,
+ _In_ UCHAR SrbStatus);
+
+STORPORT_API
+ULONG64
+NTAPI
+StorPortConvertPhysicalAddressToUlong64(
+ _In_ STOR_PHYSICAL_ADDRESS Address);
+
+STORPORT_API
+STOR_PHYSICAL_ADDRESS
+NTAPI
+StorPortConvertUlong64ToPhysicalAddress(
+ _In_ ULONG64 UlongAddress);
+
+STORPORT_API
+VOID
+__cdecl
+StorPortDebugPrint(
+ _In_ ULONG DebugPrintLevel,
+ _In_ PCCHAR DebugMessage,
+ ...);
+
+STORPORT_API
+BOOLEAN
+NTAPI
+StorPortDeviceBusy(
+ _In_ PVOID HwDeviceExtension,
+ _In_ UCHAR PathId,
+ _In_ UCHAR TargetId,
+ _In_ UCHAR Lun,
+ _In_ ULONG RequestsToComplete);
+
+STORPORT_API
+BOOLEAN
+NTAPI
+StorPortDeviceReady(
+ _In_ PVOID HwDeviceExtension,
+ _In_ UCHAR PathId,
+ _In_ UCHAR TargetId,
+ _In_ UCHAR Lun);
+
+STORPORT_API
+VOID
+NTAPI
+StorPortFreeDeviceBase(
+ _In_ PVOID HwDeviceExtension,
+ _In_ PVOID MappedAddress);
+
+STORPORT_API
+VOID
+NTAPI
+StorPortFreeRegistryBuffer(
+ _In_ PVOID HwDeviceExtension,
+ _In_ PUCHAR Buffer);
+
+STORPORT_API
+ULONG
+NTAPI
+StorPortGetBusData(
+ _In_ PVOID DeviceExtension,
+ _In_ ULONG BusDataType,
+ _In_ ULONG SystemIoBusNumber,
+ _In_ ULONG SlotNumber,
+ _Out_ _When_(Length != 0, _Out_writes_bytes_(Length)) PVOID Buffer,
+ _In_ ULONG Length);
+
+STORPORT_API
+PVOID
+NTAPI
+StorPortGetDeviceBase(
+ _In_ PVOID HwDeviceExtension,
+ _In_ INTERFACE_TYPE BusType,
+ _In_ ULONG SystemIoBusNumber,
+ _In_ STOR_PHYSICAL_ADDRESS IoAddress,
+ _In_ ULONG NumberOfBytes,
+ _In_ BOOLEAN InIoSpace);
+
+STORPORT_API
+PVOID
+NTAPI
+StorPortGetLogicalUnit(
+ _In_ PVOID HwDeviceExtension,
+ _In_ UCHAR PathId,
+ _In_ UCHAR TargetId,
+ _In_ UCHAR Lun);
+
+STORPORT_API
+STOR_PHYSICAL_ADDRESS
+NTAPI
+StorPortGetPhysicalAddress(
+ _In_ PVOID HwDeviceExtension,
+ _In_opt_ PSCSI_REQUEST_BLOCK Srb,
+ _In_ PVOID VirtualAddress,
+ _Out_ ULONG *Length);
+
+STORPORT_API
+PSTOR_SCATTER_GATHER_LIST
+NTAPI
+StorPortGetScatterGatherList(
+ _In_ PVOID DeviceExtension,
+ _In_ PSCSI_REQUEST_BLOCK Srb);
+
+STORPORT_API
+PSCSI_REQUEST_BLOCK
+NTAPI
+StorPortGetSrb(
+ _In_ PVOID DeviceExtension,
+ _In_ UCHAR PathId,
+ _In_ UCHAR TargetId,
+ _In_ UCHAR Lun,
+ _In_ LONG QueueTag);
+
+STORPORT_API
+PVOID
+NTAPI
+StorPortGetUncachedExtension(
+ _In_ PVOID HwDeviceExtension,
+ _In_ PPORT_CONFIGURATION_INFORMATION ConfigInfo,
+ _In_ ULONG NumberOfBytes);
+
+STORPORT_API
+PVOID
+NTAPI
+StorPortGetVirtualAddress(
+ _In_ PVOID HwDeviceExtension,
+ _In_ STOR_PHYSICAL_ADDRESS PhysicalAddress);
+
+STORPORT_API
+ULONG
NTAPI
StorPortInitialize(
- _In_ PVOID Argument1,
- _In_ PVOID Argument2,
- _In_ PHW_INITIALIZATION_DATA HwInitializationData,
- _In_opt_ PVOID Unused);
-
-STORPORTAPI
-VOID
-NTAPI
-StorPortFreeDeviceBase(
- _In_ PVOID HwDeviceExtension,
- _In_ PVOID MappedAddress);
-
-STORPORTAPI
-ULONG
-NTAPI
-StorPortGetBusData(
- _In_ PVOID DeviceExtension,
- _In_ ULONG BusDataType,
- _In_ ULONG SystemIoBusNumber,
- _In_ ULONG SlotNumber,
- _Out_ _When_(Length != 0, _Out_writes_bytes_(Length)) PVOID Buffer,
- _In_ ULONG Length);
-
-STORPORTAPI
-ULONG
-NTAPI
-StorPortSetBusDataByOffset(
- _In_ PVOID DeviceExtension,
- _In_ ULONG BusDataType,
- _In_ ULONG SystemIoBusNumber,
- _In_ ULONG SlotNumber,
- _In_reads_bytes_(Length) PVOID Buffer,
- _In_ ULONG Offset,
- _In_ ULONG Length);
-
-STORPORTAPI
-PVOID
-NTAPI
-StorPortGetDeviceBase(
- _In_ PVOID HwDeviceExtension,
- _In_ INTERFACE_TYPE BusType,
- _In_ ULONG SystemIoBusNumber,
- _In_ SCSI_PHYSICAL_ADDRESS IoAddress,
- _In_ ULONG NumberOfBytes,
- _In_ BOOLEAN InIoSpace);
-
-STORPORTAPI
-PVOID
-NTAPI
-StorPortGetLogicalUnit(
- _In_ PVOID HwDeviceExtension,
- _In_ UCHAR PathId,
- _In_ UCHAR TargetId,
- _In_ UCHAR Lun);
-
-STORPORTAPI
-PSCSI_REQUEST_BLOCK
-NTAPI
-StorPortGetSrb(
- _In_ PVOID DeviceExtension,
- _In_ UCHAR PathId,
- _In_ UCHAR TargetId,
- _In_ UCHAR Lun,
- _In_ LONG QueueTag);
-
-STORPORTAPI
-STOR_PHYSICAL_ADDRESS
-NTAPI
-StorPortGetPhysicalAddress(
- _In_ PVOID HwDeviceExtension,
- _In_opt_ PSCSI_REQUEST_BLOCK Srb,
- _In_ PVOID VirtualAddress,
- _Out_ ULONG *Length);
-
-STORPORTAPI
-PVOID
-NTAPI
-StorPortGetVirtualAddress(
- _In_ PVOID HwDeviceExtension,
- _In_ STOR_PHYSICAL_ADDRESS PhysicalAddress);
-
-STORPORTAPI
-PVOID
-NTAPI
-StorPortGetUncachedExtension(
- _In_ PVOID HwDeviceExtension,
- _In_ PPORT_CONFIGURATION_INFORMATION ConfigInfo,
- _In_ ULONG NumberOfBytes);
-
-STORPORTAPI
+ _In_ PVOID Argument1,
+ _In_ PVOID Argument2,
+ _In_ PHW_INITIALIZATION_DATA HwInitializationData,
+ _In_opt_ PVOID Unused);
+
+STORPORT_API
+VOID
+NTAPI
+StorPortLogError(
+ _In_ PVOID HwDeviceExtension,
+ _In_opt_ PSCSI_REQUEST_BLOCK Srb,
+ _In_ UCHAR PathId,
+ _In_ UCHAR TargetId,
+ _In_ UCHAR Lun,
+ _In_ ULONG ErrorCode,
+ _In_ ULONG UniqueId);
+
+STORPORT_API
+VOID
+NTAPI
+StorPortMoveMemory(
+ _Out_writes_bytes_(Length) PVOID WriteBuffer,
+ _In_reads_bytes_(Length) PVOID ReadBuffer,
+ _In_ ULONG Length);
+
+STORPORT_API
VOID
__cdecl
StorPortNotification(
- _In_ SCSI_NOTIFICATION_TYPE NotificationType,
- _In_ PVOID HwDeviceExtension,
- ...);
-
-STORPORTAPI
-VOID
-NTAPI
-StorPortLogError(
- _In_ PVOID HwDeviceExtension,
- _In_opt_ PSCSI_REQUEST_BLOCK Srb,
- _In_ UCHAR PathId,
- _In_ UCHAR TargetId,
- _In_ UCHAR Lun,
- _In_ ULONG ErrorCode,
- _In_ ULONG UniqueId);
-
-STORPORTAPI
-VOID
-NTAPI
-StorPortCompleteRequest(
- _In_ PVOID HwDeviceExtension,
- _In_ UCHAR PathId,
- _In_ UCHAR TargetId,
- _In_ UCHAR Lun,
- _In_ UCHAR SrbStatus);
-
-STORPORTAPI
-VOID
-NTAPI
-StorPortMoveMemory(
- _Out_writes_bytes_(Length) PVOID WriteBuffer,
- _In_reads_bytes_(Length) PVOID ReadBuffer,
- _In_ ULONG Length);
-
-STORPORTAPI
-VOID
-NTAPI
-StorPortStallExecution(
- _In_ ULONG Delay);
-
-STORPORTAPI
-STOR_PHYSICAL_ADDRESS
-NTAPI
-StorPortConvertUlong64ToPhysicalAddress(
- _In_ ULONG64 UlongAddress);
-
-STORPORTAPI
-ULONG64
-NTAPI
-StorPortConvertPhysicalAddressToUlong64(
- _In_ STOR_PHYSICAL_ADDRESS Address);
-
-STORPORTAPI
+ _In_ SCSI_NOTIFICATION_TYPE NotificationType,
+ _In_ PVOID HwDeviceExtension,
+ ...);
+
+STORPORT_API
+VOID
+NTAPI
+StorPortQuerySystemTime(
+ _Out_ PLARGE_INTEGER CurrentTime);
+
+STORPORT_API
BOOLEAN
NTAPI
-StorPortValidateRange(
- _In_ PVOID HwDeviceExtension,
- _In_ INTERFACE_TYPE BusType,
- _In_ ULONG SystemIoBusNumber,
- _In_ STOR_PHYSICAL_ADDRESS IoAddress,
- _In_ ULONG NumberOfBytes,
- _In_ BOOLEAN InIoSpace);
-
-STORPORTAPI
-VOID
-__cdecl
-StorPortDebugPrint(
- _In_ ULONG DebugPrintLevel,
- _In_ PCCHAR DebugMessage,
- ...);
-
-STORPORTAPI
+StorPortPause(
+ _In_ PVOID HwDeviceExtension,
+ _In_ ULONG TimeOut);
+
+STORPORT_API
+BOOLEAN
+NTAPI
+StorPortPauseDevice(
+ _In_ PVOID HwDeviceExtension,
+ _In_ UCHAR PathId,
+ _In_ UCHAR TargetId,
+ _In_ UCHAR Lun,
+ _In_ ULONG TimeOut);
+
+STORPORT_API
+VOID
+NTAPI
+StorPortReadPortBufferUchar(
+ _In_ PVOID HwDeviceExtension,
+ _In_ PUCHAR Port,
+ _In_ PUCHAR Buffer,
+ _In_ ULONG Count);
+
+STORPORT_API
+VOID
+NTAPI
+StorPortReadPortBufferUlong(
+ _In_ PVOID HwDeviceExtension,
+ _In_ PULONG Port,
+ _In_ PULONG Buffer,
+ _In_ ULONG Count);
+
+STORPORT_API
+VOID
+NTAPI
+StorPortReadPortBufferUshort(
+ _In_ PVOID HwDeviceExtension,
+ _In_ PUSHORT Port,
+ _In_ PUSHORT Buffer,
+ _In_ ULONG Count);
+
+STORPORT_API
UCHAR
NTAPI
StorPortReadPortUchar(
- _In_ PVOID HwDeviceExtension,
- _In_ PUCHAR Port);
-
-STORPORTAPI
+ _In_ PVOID HwDeviceExtension,
+ _In_ PUCHAR Port);
+
+STORPORT_API
ULONG
NTAPI
StorPortReadPortUlong(
- _In_ PVOID HwDeviceExtension,
- _In_ PULONG Port);
-
-STORPORTAPI
+ _In_ PVOID HwDeviceExtension,
+ _In_ PULONG Port);
+
+STORPORT_API
USHORT
NTAPI
StorPortReadPortUshort(
- _In_ PVOID HwDeviceExtension,
- _In_ PUSHORT Port);
-
-STORPORTAPI
+ _In_ PVOID HwDeviceExtension,
+ _In_ PUSHORT Port);
+
+STORPORT_API
+VOID
+NTAPI
+StorPortReadRegisterBufferUchar(
+ _In_ PVOID HwDeviceExtension,
+ _In_ PUCHAR Register,
+ _In_ PUCHAR Buffer,
+ _In_ ULONG Count);
+
+STORPORT_API
+VOID
+NTAPI
+StorPortReadRegisterBufferUlong(
+ _In_ PVOID HwDeviceExtension,
+ _In_ PULONG Register,
+ _In_ PULONG Buffer,
+ _In_ ULONG Count);
+
+STORPORT_API
+VOID
+NTAPI
+StorPortReadRegisterBufferUshort(
+ _In_ PVOID HwDeviceExtension,
+ _In_ PUSHORT Register,
+ _In_ PUSHORT Buffer,
+ _In_ ULONG Count);
+
+STORPORT_API
UCHAR
NTAPI
StorPortReadRegisterUchar(
- _In_ PVOID HwDeviceExtension,
- _In_ PUCHAR Register);
-
-STORPORTAPI
+ _In_ PVOID HwDeviceExtension,
+ _In_ PUCHAR Register);
+
+STORPORT_API
ULONG
NTAPI
StorPortReadRegisterUlong(
- _In_ PVOID HwDeviceExtension,
- _In_ PULONG Register);
-
-STORPORTAPI
+ _In_ PVOID HwDeviceExtension,
+ _In_ PULONG Register);
+
+STORPORT_API
USHORT
NTAPI
StorPortReadRegisterUshort(
- _In_ PVOID HwDeviceExtension,
- _In_ PUSHORT Register);
-
-STORPORTAPI
-VOID
-NTAPI
-StorPortWritePortUchar(
- _In_ PVOID HwDeviceExtension,
- _In_ PUCHAR Port,
- _In_ UCHAR Value);
-
-STORPORTAPI
-VOID
-NTAPI
-StorPortWritePortUlong(
- _In_ PVOID HwDeviceExtension,
- _In_ PULONG Port,
- _In_ ULONG Value);
-
-STORPORTAPI
-VOID
-NTAPI
-StorPortWritePortUshort(
- _In_ PVOID HwDeviceExtension,
- _In_ PUSHORT Port,
- _In_ USHORT Value);
-
-STORPORTAPI
-VOID
-NTAPI
-StorPortWriteRegisterUchar(
- _In_ PVOID HwDeviceExtension,
- _In_ PUCHAR Register,
- _In_ UCHAR Value);
-
-STORPORTAPI
-VOID
-NTAPI
-StorPortWriteRegisterUlong(
- _In_ PVOID HwDeviceExtension,
- _In_ PULONG Register,
- _In_ ULONG Value);
-
-STORPORTAPI
-VOID
-NTAPI
-StorPortWriteRegisterUshort(
- _In_ PVOID HwDeviceExtension,
- _In_ PUSHORT Register,
- _In_ USHORT Value);
-
-STORPORTAPI
+ _In_ PVOID HwDeviceExtension,
+ _In_ PUSHORT Register);
+
+STORPORT_API
BOOLEAN
NTAPI
-StorPortPauseDevice(
- _In_ PVOID HwDeviceExtension,
- _In_ UCHAR PathId,
- _In_ UCHAR TargetId,
- _In_ UCHAR Lun,
- _In_ ULONG TimeOut);
-
-STORPORTAPI
+StorPortReady(
+ _In_ PVOID HwDeviceExtension);
+
+STORPORT_API
+BOOLEAN
+NTAPI
+StorPortRegistryRead(
+ _In_ PVOID HwDeviceExtension,
+ _In_ PUCHAR ValueName,
+ _In_ ULONG Global,
+ _In_ ULONG Type,
+ _In_ PUCHAR Buffer,
+ _In_ PULONG BufferLength);
+
+STORPORT_API
+BOOLEAN
+NTAPI
+StorPortRegistryWrite(
+ _In_ PVOID HwDeviceExtension,
+ _In_ PUCHAR ValueName,
+ _In_ ULONG Global,
+ _In_ ULONG Type,
+ _In_ PUCHAR Buffer,
+ _In_ ULONG BufferLength);
+
+STORPORT_API
+BOOLEAN
+NTAPI
+StorPortResume(
+ _In_ PVOID HwDeviceExtension);
+
+STORPORT_API
BOOLEAN
NTAPI
StorPortResumeDevice(
@@ -349,71 +2498,228 @@
_In_ UCHAR TargetId,
_In_ UCHAR Lun);
-STORPORTAPI
+STORPORT_API
+ULONG
+NTAPI
+StorPortSetBusDataByOffset(
+ _In_ PVOID DeviceExtension,
+ _In_ ULONG BusDataType,
+ _In_ ULONG SystemIoBusNumber,
+ _In_ ULONG SlotNumber,
+ _In_reads_bytes_(Length) PVOID Buffer,
+ _In_ ULONG Offset,
+ _In_ ULONG Length);
+
+STORPORT_API
BOOLEAN
NTAPI
-StorPortPause(
- _In_ PVOID HwDeviceExtension,
- _In_ ULONG TimeOut);
-
-STORPORTAPI
-BOOLEAN
-NTAPI
-StorPortResume(
- _In_ PVOID HwDeviceExtension);
-
-STORPORTAPI
-BOOLEAN
-NTAPI
-StorPortDeviceBusy(
+StorPortSetDeviceQueueDepth(
_In_ PVOID HwDeviceExtension,
_In_ UCHAR PathId,
_In_ UCHAR TargetId,
_In_ UCHAR Lun,
- _In_ ULONG RequestsToComplete);
-
-STORPORTAPI
+ _In_ ULONG Depth);
+
+STORPORT_API
+VOID
+NTAPI
+StorPortStallExecution(
+ _In_ ULONG Delay);
+
+STORPORT_API
+VOID
+NTAPI
+StorPortSynchronizeAccess(
+ _In_ PVOID HwDeviceExtension,
+ _In_ PSTOR_SYNCHRONIZED_ACCESS SynchronizedAccessRoutine,
+ _In_opt_ PVOID Context);
+
+STORPORT_API
BOOLEAN
NTAPI
-StorPortDeviceReady(
- _In_ PVOID HwDeviceExtension,
- _In_ UCHAR PathId,
- _In_ UCHAR TargetId,
- _In_ UCHAR Lun);
-
-STORPORTAPI
+StorPortValidateRange(
+ _In_ PVOID HwDeviceExtension,
+ _In_ INTERFACE_TYPE BusType,
+ _In_ ULONG SystemIoBusNumber,
+ _In_ STOR_PHYSICAL_ADDRESS IoAddress,
+ _In_ ULONG NumberOfBytes,
+ _In_ BOOLEAN InIoSpace);
+
+STORPORT_API
+VOID
+NTAPI
+StorPortWritePortBufferUchar(
+ _In_ PVOID HwDeviceExtension,
+ _In_ PUCHAR Port,
+ _In_ PUCHAR Buffer,
+ _In_ ULONG Count);
+
+STORPORT_API
+VOID
+NTAPI
+StorPortWritePortBufferUlong(
+ _In_ PVOID HwDeviceExtension,
+ _In_ PULONG Port,
+ _In_ PULONG Buffer,
+ _In_ ULONG Count);
+
+STORPORT_API
+VOID
+NTAPI
+StorPortWritePortBufferUshort(
+ _In_ PVOID HwDeviceExtension,
+ _In_ PUSHORT Port,
+ _In_ PUSHORT Buffer,
+ _In_ ULONG Count);
+
+STORPORT_API
+VOID
+NTAPI
+StorPortWritePortUchar(
+ _In_ PVOID HwDeviceExtension,
+ _In_ PUCHAR Port,
+ _In_ UCHAR Value);
+
+STORPORT_API
+VOID
+NTAPI
+StorPortWritePortUlong(
+ _In_ PVOID HwDeviceExtension,
+ _In_ PULONG Port,
+ _In_ ULONG Value);
+
+STORPORT_API
+VOID
+NTAPI
+StorPortWritePortUshort(
+ _In_ PVOID HwDeviceExtension,
+ _In_ PUSHORT Port,
+ _In_ USHORT Value);
+
+STORPORT_API
+VOID
+NTAPI
+StorPortWriteRegisterBufferUchar(
+ _In_ PVOID HwDeviceExtension,
+ _In_ PUCHAR Register,
+ _In_ PUCHAR Buffer,
+ _In_ ULONG Count);
+
+STORPORT_API
+VOID
+NTAPI
+StorPortWriteRegisterBufferUlong(
+ _In_ PVOID HwDeviceExtension,
+ _In_ PULONG Register,
+ _In_ PULONG Buffer,
+ _In_ ULONG Count);
+
+STORPORT_API
+VOID
+NTAPI
+StorPortWriteRegisterBufferUshort(
+ _In_ PVOID HwDeviceExtension,
+ _In_ PUSHORT Register,
+ _In_ PUSHORT Buffer,
+ _In_ ULONG Count);
+
+STORPORT_API
+VOID
+NTAPI
+StorPortWriteRegisterUchar(
+ _In_ PVOID HwDeviceExtension,
+ _In_ PUCHAR Register,
+ _In_ UCHAR Value);
+
+STORPORT_API
+VOID
+NTAPI
+StorPortWriteRegisterUlong(
+ _In_ PVOID HwDeviceExtension,
+ _In_ PULONG Register,
+ _In_ ULONG Value);
+
+STORPORT_API
+VOID
+NTAPI
+StorPortWriteRegisterUshort(
+ _In_ PVOID HwDeviceExtension,
+ _In_ PUSHORT Register,
+ _In_ USHORT Value);
+
+
+FORCEINLINE
BOOLEAN
-NTAPI
-StorPortBusy(
- _In_ PVOID HwDeviceExtension,
- _In_ ULONG RequestsToComplete);
-
-STORPORTAPI
+StorPortEnablePassiveInitialization(
+ _In_ PVOID DeviceExtension,
+ _In_ PHW_PASSIVE_INITIALIZE_ROUTINE HwPassiveInitializeRoutine)
+{
+ LONG Succ;
+ Succ = FALSE;
+ StorPortNotification(EnablePassiveInitialization,
+ DeviceExtension,
+ HwPassiveInitializeRoutine,
+ &Succ);
+ return (BOOLEAN)Succ;
+}
+
+FORCEINLINE
+VOID
+StorPortInitializeDpc(
+ _In_ PVOID DeviceExtension,
+ _Out_ PSTOR_DPC Dpc,
+ _In_ PHW_DPC_ROUTINE HwDpcRoutine)
+{
+ StorPortNotification(InitializeDpc,
+ DeviceExtension,
+ Dpc,
+ HwDpcRoutine);
+}
+
+FORCEINLINE
BOOLEAN
-NTAPI
-StorPortReady(
- _In_ PVOID HwDeviceExtension);
-
-STORPORTAPI
-PSTOR_SCATTER_GATHER_LIST
-NTAPI
-StorPortGetScatterGatherList(
- _In_ PVOID DeviceExtension,
- _In_ PSCSI_REQUEST_BLOCK Srb);
-
-typedef BOOLEAN
-(NTAPI STOR_SYNCHRONIZED_ACCESS)(
- _In_ PVOID HwDeviceExtension,
- _In_ PVOID Context);
-typedef STOR_SYNCHRONIZED_ACCESS *PSTOR_SYNCHRONIZED_ACCESS;
-
-STORPORTAPI
-VOID
-NTAPI
-StorPortSynchronizeAccess(
- _In_ PVOID HwDeviceExtension,
- _In_ PSTOR_SYNCHRONIZED_ACCESS SynchronizedAccessRoutine,
- _In_opt_ PVOID Context);
+StorPortIssueDpc(
+ _In_ PVOID DeviceExtension,
+ _In_ PSTOR_DPC Dpc,
+ _In_ PVOID SystemArgument1,
+ _In_ PVOID SystemArgument2)
+{
+ LONG Succ;
+ Succ = FALSE;
+ StorPortNotification(IssueDpc,
+ DeviceExtension,
+ Dpc,
+ SystemArgument1,
+ SystemArgument2,
+ &Succ);
+ return (BOOLEAN)Succ;
+}
+
+FORCEINLINE
+VOID
+StorPortAcquireSpinLock(
+ _In_ PVOID DeviceExtension,
+ _In_ STOR_SPINLOCK SpinLock,
+ _In_ PVOID LockContext,
+ _Inout_ PSTOR_LOCK_HANDLE LockHandle)
+{
+ StorPortNotification(AcquireSpinLock,
+ DeviceExtension,
+ SpinLock,
+ LockContext,
+ LockHandle);
+}
+
+FORCEINLINE
+VOID
+StorPortReleaseSpinLock(
+ _In_ PVOID DeviceExtension,
+ _Inout_ PSTOR_LOCK_HANDLE LockHandle)
+{
+ StorPortNotification(ReleaseSpinLock,
+ DeviceExtension,
+ LockHandle);
+}
#if DBG
#define DebugPrint(x) StorPortDebugPrint x
@@ -425,4 +2731,4 @@
}
#endif
-#endif /* __STORPORT_H */
+#endif /* _NTSTORPORT_ */