From 084f682e5445870dff97e677e1122554c878c575 Mon Sep 17 00:00:00 2001 From: Eric Kohl Date: Mon, 2 Oct 2017 12:56:27 +0000 Subject: [PATCH] [DDK] Prepare the storport header file for the new storport driver. svn path=/trunk/; revision=76028 --- reactos/sdk/include/ddk/storport.h | 2924 +++++++++++++++++++++++++--- 1 file changed, 2615 insertions(+), 309 deletions(-) diff --git a/reactos/sdk/include/ddk/storport.h b/reactos/sdk/include/ddk/storport.h index 21b707ecb8d..b08a156e947 100644 --- a/reactos/sdk/include/ddk/storport.h +++ b/reactos/sdk/include/ddk/storport.h @@ -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 +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 + +#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 +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 +#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 +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 + 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; +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; -STORPORTAPI -ULONG -NTAPI -StorPortInitialize( - _In_ PVOID Argument1, - _In_ PVOID Argument2, - _In_ PHW_INITIALIZATION_DATA HwInitializationData, - _In_opt_ PVOID Unused); +typedef struct _STOR_DPC +{ + DPC_BUFFER Dpc; + ULONG_PTR Lock; +} STOR_DPC, *PSTOR_DPC; -STORPORTAPI +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 -StorPortFreeDeviceBase( - _In_ PVOID HwDeviceExtension, - _In_ PVOID MappedAddress); +(NTAPI *PHW_TIMER)( + _In_ PVOID DeviceExtension); -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 +typedef VOID -__cdecl -StorPortNotification( - _In_ SCSI_NOTIFICATION_TYPE NotificationType, - _In_ PVOID HwDeviceExtension, - ...); +(NTAPI *PHW_DMA_STARTED)( + _In_ PVOID DeviceExtension); -STORPORTAPI +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 -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); +(*PHW_DPC_ROUTINE)( + _In_ PSTOR_DPC Dpc, + _In_ PVOID HwDeviceExtension, + _In_ PVOID SystemArgument1, + _In_ PVOID SystemArgument2); -STORPORTAPI +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); + _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 +STORPORT_API ULONG64 NTAPI StorPortConvertPhysicalAddressToUlong64( - _In_ STOR_PHYSICAL_ADDRESS Address); + _In_ STOR_PHYSICAL_ADDRESS Address); -STORPORTAPI -BOOLEAN +STORPORT_API +STOR_PHYSICAL_ADDRESS NTAPI -StorPortValidateRange( - _In_ PVOID HwDeviceExtension, - _In_ INTERFACE_TYPE BusType, - _In_ ULONG SystemIoBusNumber, - _In_ STOR_PHYSICAL_ADDRESS IoAddress, - _In_ ULONG NumberOfBytes, - _In_ BOOLEAN InIoSpace); +StorPortConvertUlong64ToPhysicalAddress( + _In_ ULONG64 UlongAddress); -STORPORTAPI +STORPORT_API VOID __cdecl StorPortDebugPrint( - _In_ ULONG DebugPrintLevel, - _In_ PCCHAR DebugMessage, - ...); + _In_ ULONG DebugPrintLevel, + _In_ PCCHAR DebugMessage, + ...); -STORPORTAPI -UCHAR +STORPORT_API +BOOLEAN NTAPI -StorPortReadPortUchar( - _In_ PVOID HwDeviceExtension, - _In_ PUCHAR Port); +StorPortDeviceBusy( + _In_ PVOID HwDeviceExtension, + _In_ UCHAR PathId, + _In_ UCHAR TargetId, + _In_ UCHAR Lun, + _In_ ULONG RequestsToComplete); -STORPORTAPI +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 -StorPortReadPortUlong( - _In_ PVOID HwDeviceExtension, - _In_ PULONG Port); +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 -USHORT +STORPORT_API +PVOID NTAPI -StorPortReadPortUshort( - _In_ PVOID HwDeviceExtension, - _In_ PUSHORT Port); +StorPortGetDeviceBase( + _In_ PVOID HwDeviceExtension, + _In_ INTERFACE_TYPE BusType, + _In_ ULONG SystemIoBusNumber, + _In_ STOR_PHYSICAL_ADDRESS IoAddress, + _In_ ULONG NumberOfBytes, + _In_ BOOLEAN InIoSpace); -STORPORTAPI -UCHAR +STORPORT_API +PVOID NTAPI -StorPortReadRegisterUchar( - _In_ PVOID HwDeviceExtension, - _In_ PUCHAR Register); +StorPortGetLogicalUnit( + _In_ PVOID HwDeviceExtension, + _In_ UCHAR PathId, + _In_ UCHAR TargetId, + _In_ UCHAR Lun); -STORPORTAPI +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 -StorPortReadRegisterUlong( - _In_ PVOID HwDeviceExtension, - _In_ PULONG Register); +StorPortInitialize( + _In_ PVOID Argument1, + _In_ PVOID Argument2, + _In_ PHW_INITIALIZATION_DATA HwInitializationData, + _In_opt_ PVOID Unused); -STORPORTAPI -USHORT -NTAPI -StorPortReadRegisterUshort( - _In_ PVOID HwDeviceExtension, - _In_ PUSHORT Register); - -STORPORTAPI +STORPORT_API VOID NTAPI -StorPortWritePortUchar( - _In_ PVOID HwDeviceExtension, - _In_ PUCHAR Port, - _In_ UCHAR Value); +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 +STORPORT_API VOID NTAPI -StorPortWritePortUlong( - _In_ PVOID HwDeviceExtension, - _In_ PULONG Port, - _In_ ULONG Value); +StorPortMoveMemory( + _Out_writes_bytes_(Length) PVOID WriteBuffer, + _In_reads_bytes_(Length) PVOID ReadBuffer, + _In_ ULONG Length); -STORPORTAPI +STORPORT_API +VOID +__cdecl +StorPortNotification( + _In_ SCSI_NOTIFICATION_TYPE NotificationType, + _In_ PVOID HwDeviceExtension, + ...); + +STORPORT_API VOID NTAPI -StorPortWritePortUshort( - _In_ PVOID HwDeviceExtension, - _In_ PUSHORT Port, - _In_ USHORT Value); +StorPortQuerySystemTime( + _Out_ PLARGE_INTEGER CurrentTime); -STORPORTAPI -VOID +STORPORT_API +BOOLEAN NTAPI -StorPortWriteRegisterUchar( - _In_ PVOID HwDeviceExtension, - _In_ PUCHAR Register, - _In_ UCHAR Value); +StorPortPause( + _In_ PVOID HwDeviceExtension, + _In_ ULONG TimeOut); -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 +STORPORT_API BOOLEAN NTAPI StorPortPauseDevice( - _In_ PVOID HwDeviceExtension, - _In_ UCHAR PathId, - _In_ UCHAR TargetId, - _In_ UCHAR Lun, - _In_ ULONG TimeOut); + _In_ PVOID HwDeviceExtension, + _In_ UCHAR PathId, + _In_ UCHAR TargetId, + _In_ UCHAR Lun, + _In_ ULONG TimeOut); -STORPORTAPI +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); + +STORPORT_API +ULONG +NTAPI +StorPortReadPortUlong( + _In_ PVOID HwDeviceExtension, + _In_ PULONG Port); + +STORPORT_API +USHORT +NTAPI +StorPortReadPortUshort( + _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); + +STORPORT_API +ULONG +NTAPI +StorPortReadRegisterUlong( + _In_ PVOID HwDeviceExtension, + _In_ PULONG Register); + +STORPORT_API +USHORT +NTAPI +StorPortReadRegisterUshort( + _In_ PVOID HwDeviceExtension, + _In_ PUSHORT Register); + +STORPORT_API +BOOLEAN +NTAPI +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 @@ StorPortResumeDevice( _In_ UCHAR TargetId, _In_ UCHAR Lun); -STORPORTAPI -BOOLEAN +STORPORT_API +ULONG NTAPI -StorPortPause( - _In_ PVOID HwDeviceExtension, - _In_ ULONG TimeOut); +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 +STORPORT_API 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); + _In_ ULONG Depth); -STORPORTAPI -BOOLEAN +STORPORT_API +VOID NTAPI -StorPortDeviceReady( - _In_ PVOID HwDeviceExtension, - _In_ UCHAR PathId, - _In_ UCHAR TargetId, - _In_ UCHAR Lun); +StorPortStallExecution( + _In_ ULONG Delay); -STORPORTAPI -BOOLEAN -NTAPI -StorPortBusy( - _In_ PVOID HwDeviceExtension, - _In_ ULONG RequestsToComplete); - -STORPORTAPI -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 +STORPORT_API VOID NTAPI StorPortSynchronizeAccess( - _In_ PVOID HwDeviceExtension, - _In_ PSTOR_SYNCHRONIZED_ACCESS SynchronizedAccessRoutine, - _In_opt_ PVOID Context); + _In_ PVOID HwDeviceExtension, + _In_ PSTOR_SYNCHRONIZED_ACCESS SynchronizedAccessRoutine, + _In_opt_ PVOID Context); + +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); + +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 +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 +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 @@ StorPortSynchronizeAccess( } #endif -#endif /* __STORPORT_H */ +#endif /* _NTSTORPORT_ */