[DDK] Import definitions required by newer storage class drivers

CORE-17129
This commit is contained in:
Victor Perevertkin 2020-08-28 05:16:59 +03:00
parent 093f377c40
commit 3da77f9173
No known key found for this signature in database
GPG key ID: C750B7222E9C7830
4 changed files with 1981 additions and 197 deletions

View file

@ -85,6 +85,9 @@
#define CLASS_TAG_DEVICE_CONTROL 'OIcS' #define CLASS_TAG_DEVICE_CONTROL 'OIcS'
#define CLASS_TAG_MODE_DATA 'oLcS' #define CLASS_TAG_MODE_DATA 'oLcS'
#define CLASS_TAG_MULTIPATH 'mPcS' #define CLASS_TAG_MULTIPATH 'mPcS'
#define CLASS_TAG_LOCK_TRACKING 'TLcS'
#define CLASS_TAG_LB_PROVISIONING 'PLcS'
#define CLASS_TAG_MANAGE_DATASET 'MDcS'
#define MAXIMUM_RETRIES 4 #define MAXIMUM_RETRIES 4
@ -182,6 +185,7 @@
#define GUID_CLASSPNP_QUERY_REGINFOEX {0x00e34b11, 0x2444, 0x4745, {0xa5, 0x3d, 0x62, 0x01, 0x00, 0xcd, 0x82, 0xf7}} #define GUID_CLASSPNP_QUERY_REGINFOEX {0x00e34b11, 0x2444, 0x4745, {0xa5, 0x3d, 0x62, 0x01, 0x00, 0xcd, 0x82, 0xf7}}
#define GUID_CLASSPNP_SENSEINFO2 {0x509a8c5f, 0x71d7, 0x48f6, {0x82, 0x1e, 0x17, 0x3c, 0x49, 0xbf, 0x2f, 0x18}} #define GUID_CLASSPNP_SENSEINFO2 {0x509a8c5f, 0x71d7, 0x48f6, {0x82, 0x1e, 0x17, 0x3c, 0x49, 0xbf, 0x2f, 0x18}}
#define GUID_CLASSPNP_WORKING_SET {0x105701b0, 0x9e9b, 0x47cb, {0x97, 0x80, 0x81, 0x19, 0x8a, 0xf7, 0xb5, 0x24}} #define GUID_CLASSPNP_WORKING_SET {0x105701b0, 0x9e9b, 0x47cb, {0x97, 0x80, 0x81, 0x19, 0x8a, 0xf7, 0xb5, 0x24}}
#define GUID_CLASSPNP_SRB_SUPPORT {0x0a483941, 0xbdfd, 0x4f7b, {0xbe, 0x95, 0xce, 0xe2, 0xa2, 0x16, 0x09, 0x0c}}
#define DEFAULT_FAILURE_PREDICTION_PERIOD 60 * 60 * 1 #define DEFAULT_FAILURE_PREDICTION_PERIOD 60 * 60 * 1
@ -250,6 +254,16 @@ typedef enum {
PowerDownDeviceUnlocked2 PowerDownDeviceUnlocked2
} CLASS_POWER_DOWN_STATE2; } CLASS_POWER_DOWN_STATE2;
typedef enum {
PowerDownDeviceInitial3 = 0,
PowerDownDeviceLocked3,
PowerDownDeviceQuiesced3,
PowerDownDeviceFlushed3,
PowerDownDeviceStopped3,
PowerDownDeviceOff3,
PowerDownDeviceUnlocked3
} CLASS_POWER_DOWN_STATE3;
typedef enum { typedef enum {
PowerUpDeviceInitial, PowerUpDeviceInitial,
PowerUpDeviceLocked, PowerUpDeviceLocked,
@ -273,6 +287,9 @@ typedef struct _CLASS_PRIVATE_COMMON_DATA CLASS_PRIVATE_COMMON_DATA, *PCLASS_PRI
struct _MEDIA_CHANGE_DETECTION_INFO; struct _MEDIA_CHANGE_DETECTION_INFO;
typedef struct _MEDIA_CHANGE_DETECTION_INFO MEDIA_CHANGE_DETECTION_INFO, *PMEDIA_CHANGE_DETECTION_INFO; typedef struct _MEDIA_CHANGE_DETECTION_INFO MEDIA_CHANGE_DETECTION_INFO, *PMEDIA_CHANGE_DETECTION_INFO;
struct _DICTIONARY_HEADER;
typedef struct _DICTIONARY_HEADER DICTIONARY_HEADER, *PDICTIONARY_HEADER;
typedef struct _DICTIONARY { typedef struct _DICTIONARY {
ULONGLONG Signature; ULONGLONG Signature;
struct _DICTIONARY_HEADER* List; struct _DICTIONARY_HEADER* List;
@ -551,6 +568,10 @@ typedef struct _CLASS_INTERPRET_SENSE_INFO2 {
C_ASSERT((MAXULONG - sizeof(SRB_HISTORY)) / 30000 >= sizeof(SRB_HISTORY_ITEM)); C_ASSERT((MAXULONG - sizeof(SRB_HISTORY)) / 30000 >= sizeof(SRB_HISTORY_ITEM));
// for SrbSupport
#define CLASS_SRB_SCSI_REQUEST_BLOCK 0x1
#define CLASS_SRB_STORAGE_REQUEST_BLOCK 0x2
typedef struct _CLASS_DRIVER_EXTENSION { typedef struct _CLASS_DRIVER_EXTENSION {
UNICODE_STRING RegistryPath; UNICODE_STRING RegistryPath;
CLASS_INIT_DATA InitData; CLASS_INIT_DATA InitData;
@ -566,6 +587,9 @@ typedef struct _CLASS_DRIVER_EXTENSION {
PCLASS_INTERPRET_SENSE_INFO2 InterpretSenseInfo; PCLASS_INTERPRET_SENSE_INFO2 InterpretSenseInfo;
PCLASS_WORKING_SET WorkingSet; PCLASS_WORKING_SET WorkingSet;
#endif #endif
#if (NTDDI_VERSION >= NTDDI_WIN8)
ULONG SrbSupport;
#endif
} CLASS_DRIVER_EXTENSION, *PCLASS_DRIVER_EXTENSION; } CLASS_DRIVER_EXTENSION, *PCLASS_DRIVER_EXTENSION;
typedef struct _COMMON_DEVICE_EXTENSION { typedef struct _COMMON_DEVICE_EXTENSION {
@ -651,6 +675,7 @@ typedef struct _CLASS_POWER_CONTEXT {
union { union {
CLASS_POWER_DOWN_STATE PowerDown; CLASS_POWER_DOWN_STATE PowerDown;
CLASS_POWER_DOWN_STATE2 PowerDown2; CLASS_POWER_DOWN_STATE2 PowerDown2;
CLASS_POWER_DOWN_STATE3 PowerDown3;
CLASS_POWER_UP_STATE PowerUp; CLASS_POWER_UP_STATE PowerUp;
} PowerChangeState; } PowerChangeState;
CLASS_POWER_OPTIONS Options; CLASS_POWER_OPTIONS Options;
@ -665,14 +690,30 @@ typedef struct _CLASS_POWER_CONTEXT {
SCSI_REQUEST_BLOCK Srb; SCSI_REQUEST_BLOCK Srb;
} CLASS_POWER_CONTEXT, *PCLASS_POWER_CONTEXT; } CLASS_POWER_CONTEXT, *PCLASS_POWER_CONTEXT;
#if (NTDDI_VERSION >= NTDDI_WIN8)
#define CLASS_SRBEX_SCSI_CDB16_BUFFER_SIZE (sizeof(STORAGE_REQUEST_BLOCK) + sizeof(STOR_ADDR_BTL8) + sizeof(SRBEX_DATA_SCSI_CDB16))
#define CLASS_SRBEX_NO_SRBEX_DATA_BUFFER_SIZE (sizeof(STORAGE_REQUEST_BLOCK) + sizeof(STOR_ADDR_BTL8))
#endif
typedef struct _COMPLETION_CONTEXT { typedef struct _COMPLETION_CONTEXT {
PDEVICE_OBJECT DeviceObject; PDEVICE_OBJECT DeviceObject;
#if (NTDDI_VERSION >= NTDDI_WIN8)
union
{
SCSI_REQUEST_BLOCK Srb; SCSI_REQUEST_BLOCK Srb;
STORAGE_REQUEST_BLOCK SrbEx;
UCHAR SrbExBuffer[CLASS_SRBEX_SCSI_CDB16_BUFFER_SIZE];
} Srb;
#else
SCSI_REQUEST_BLOCK Srb;
#endif
} COMPLETION_CONTEXT, *PCOMPLETION_CONTEXT; } COMPLETION_CONTEXT, *PCOMPLETION_CONTEXT;
_IRQL_requires_max_(PASSIVE_LEVEL) _IRQL_requires_max_(PASSIVE_LEVEL)
_Must_inspect_result_ _Must_inspect_result_
SCSIPORTAPI SCSIPORT_API
ULONG ULONG
NTAPI NTAPI
ClassInitialize( ClassInitialize(
@ -686,6 +727,143 @@ typedef struct _CLASS_QUERY_WMI_REGINFO_EX_LIST {
__callback PCLASS_QUERY_WMI_REGINFO_EX ClassPdoQueryWmiRegInfoEx; __callback PCLASS_QUERY_WMI_REGINFO_EX ClassPdoQueryWmiRegInfoEx;
} CLASS_QUERY_WMI_REGINFO_EX_LIST, *PCLASS_QUERY_WMI_REGINFO_EX_LIST; } CLASS_QUERY_WMI_REGINFO_EX_LIST, *PCLASS_QUERY_WMI_REGINFO_EX_LIST;
typedef enum
{
SupportUnknown = 0,
Supported,
NotSupported
} CLASS_FUNCTION_SUPPORT;
typedef struct _CLASS_VPD_B1_DATA
{
NTSTATUS CommandStatus;
USHORT MediumRotationRate;
UCHAR NominalFormFactor;
UCHAR Zoned;
ULONG MediumProductType;
ULONG DepopulationTime;
} CLASS_VPD_B1_DATA, *PCLASS_VPD_B1_DATA;
typedef struct _CLASS_VPD_B0_DATA
{
NTSTATUS CommandStatus;
ULONG MaxUnmapLbaCount;
ULONG MaxUnmapBlockDescrCount;
ULONG OptimalUnmapGranularity;
ULONG UnmapGranularityAlignment;
BOOLEAN UGAVALID;
UCHAR Reserved0;
USHORT OptimalTransferLengthGranularity;
ULONG MaximumTransferLength;
ULONG OptimalTransferLength;
} CLASS_VPD_B0_DATA, *PCLASS_VPD_B0_DATA;
#ifdef _MSC_VER
#pragma warning(push)
#pragma warning(disable:4214)
#endif
typedef struct _CLASS_VPD_B2_DATA
{
NTSTATUS CommandStatus;
UCHAR ThresholdExponent;
UCHAR DP:1;
UCHAR ANC_SUP:1;
UCHAR Reserved0:2;
UCHAR LBPRZ:1;
UCHAR LBPWS10:1;
UCHAR LBPWS:1;
UCHAR LBPU:1;
UCHAR ProvisioningType:3;
UCHAR Reserved1:5;
ULONG SoftThresholdEventPending;
} CLASS_VPD_B2_DATA, *PCLASS_VPD_B2_DATA;
#ifdef _MSC_VER
#pragma warning(pop)
#endif
typedef struct _CLASS_READ_CAPACITY16_DATA
{
NTSTATUS CommandStatus;
ULONG BytesPerLogicalSector;
ULONG BytesPerPhysicalSector;
ULONG BytesOffsetForSectorAlignment;
BOOLEAN LBProvisioningEnabled;
BOOLEAN LBProvisioningReadZeros;
UCHAR Reserved0[2];
ULONG Reserved1;
} CLASS_READ_CAPACITY16_DATA, *PCLASS_READ_CAPACITY16_DATA;
typedef struct _CLASS_VPD_ECOP_BLOCK_DEVICE_ROD_LIMITS
{
NTSTATUS CommandStatus;
USHORT MaximumRangeDescriptors;
UCHAR Restricted;
UCHAR Reserved;
ULONG MaximumInactivityTimer;
ULONG DefaultInactivityTimer;
ULONGLONG MaximumTokenTransferSize;
ULONGLONG OptimalTransferCount;
} CLASS_VPD_ECOP_BLOCK_DEVICE_ROD_LIMITS, *PCLASS_VPD_ECOP_BLOCK_DEVICE_ROD_LIMITS;
#ifdef _MSC_VER
#pragma warning(push)
#pragma warning(disable:4214)
#endif
typedef struct _CLASS_FUNCTION_SUPPORT_INFO
{
KSPIN_LOCK SyncLock;
ULONG GenerationCount;
volatile ULONG ChangeRequestCount;
struct
{
ULONG BlockLimits:1;
ULONG BlockDeviceCharacteristics:1;
ULONG LBProvisioning:1;
ULONG BlockDeviceRODLimits:1;
ULONG ZonedBlockDeviceCharacteristics:1;
ULONG Reserved:22;
ULONG DeviceType:5;
} ValidInquiryPages;
struct
{
CLASS_FUNCTION_SUPPORT SeekPenaltyProperty;
CLASS_FUNCTION_SUPPORT AccessAlignmentProperty;
CLASS_FUNCTION_SUPPORT TrimProperty;
CLASS_FUNCTION_SUPPORT TrimProcess;
} LowerLayerSupport;
BOOLEAN RegAccessAlignmentQueryNotSupported;
BOOLEAN AsynchronousNotificationSupported;
#if (NTDDI_VERSION >= NTDDI_WIN10_RS2)
BOOLEAN UseModeSense10;
UCHAR Reserved;
#else
UCHAR Reserved[2];
#endif
CLASS_VPD_B0_DATA BlockLimitsData;
CLASS_VPD_B1_DATA DeviceCharacteristicsData;
CLASS_VPD_B2_DATA LBProvisioningData;
CLASS_READ_CAPACITY16_DATA ReadCapacity16Data;
CLASS_VPD_ECOP_BLOCK_DEVICE_ROD_LIMITS BlockDeviceRODLimitsData;
struct
{
ULONG D3ColdSupported:1;
ULONG DeviceWakeable:1;
ULONG IdlePowerEnabled:1;
ULONG D3IdleTimeoutOverridden:1;
ULONG NoVerifyDuringIdlePower:1;
ULONG Reserved2:27;
ULONG D3IdleTimeout;
} IdlePower;
#if (NTDDI_VERSION >= NTDDI_WINTHRESHOLD)
CLASS_FUNCTION_SUPPORT HwFirmwareGetInfoSupport;
PSTORAGE_HW_FIRMWARE_INFO HwFirmwareInfo;
#endif
} CLASS_FUNCTION_SUPPORT_INFO, *PCLASS_FUNCTION_SUPPORT_INFO;
#ifdef _MSC_VER
#pragma warning(pop)
#endif
typedef struct _FUNCTIONAL_DEVICE_EXTENSION { typedef struct _FUNCTIONAL_DEVICE_EXTENSION {
_ANONYMOUS_UNION union { _ANONYMOUS_UNION union {
_ANONYMOUS_STRUCT struct { _ANONYMOUS_STRUCT struct {
@ -701,6 +879,12 @@ typedef struct _FUNCTIONAL_DEVICE_EXTENSION {
ULONG DMByteSkew; ULONG DMByteSkew;
ULONG DMSkew; ULONG DMSkew;
BOOLEAN DMActive; BOOLEAN DMActive;
#if (NTDDI_VERSION >= NTDDI_WIN8)
UCHAR SenseDataLength;
#else
UCHAR Reserved;
#endif
UCHAR Reserved0[2];
DISK_GEOMETRY DiskGeometry; DISK_GEOMETRY DiskGeometry;
PSENSE_DATA SenseData; PSENSE_DATA SenseData;
ULONG TimeOutValue; ULONG TimeOutValue;
@ -755,22 +939,31 @@ typedef struct _FUNCTIONAL_DEVICE_EXTENSION {
ULONG SavedSrbFlags; ULONG SavedSrbFlags;
ULONG SavedErrorCount; ULONG SavedErrorCount;
ULONG_PTR Reserved1; ULONG_PTR Reserved1;
#endif #endif /* (SPVER(NTDDI_VERSION) < 2) */
#else /* (NTDDI_VERSION <= NTDDI_WIN2K) */ #else /* (NTDDI_VERSION <= NTDDI_WIN2K) */
PCLASS_PRIVATE_FDO_DATA PrivateFdoData; PCLASS_PRIVATE_FDO_DATA PrivateFdoData;
#if (NTDDI_VERSION >= NTDDI_WIN8)
PCLASS_FUNCTION_SUPPORT_INFO FunctionSupportInfo;
PSTORAGE_MINIPORT_DESCRIPTOR MiniportDescriptor;
#else
ULONG_PTR Reserved2; ULONG_PTR Reserved2;
ULONG_PTR Reserved3; ULONG_PTR Reserved3;
ULONG_PTR Reserved4; #endif
#if (NTDDI_VERSION >= NTDDI_WINTHRESHOLD)
PADDITIONAL_FDO_DATA AdditionalFdoData;
#else
ULONG_PTR Reserved4;
#endif
#endif /* (NTDDI_VERSION <= NTDDI_WIN2K) */ #endif /* (NTDDI_VERSION <= NTDDI_WIN2K) */
} FUNCTIONAL_DEVICE_EXTENSION, *PFUNCTIONAL_DEVICE_EXTENSION; } FUNCTIONAL_DEVICE_EXTENSION, *PFUNCTIONAL_DEVICE_EXTENSION;
_IRQL_requires_max_(PASSIVE_LEVEL) _IRQL_requires_max_(PASSIVE_LEVEL)
_Must_inspect_result_ _Must_inspect_result_
SCSIPORTAPI SCSIPORT_API
ULONG ULONG
NTAPI NTAPI
ClassInitializeEx( ClassInitializeEx(
@ -781,7 +974,7 @@ ClassInitializeEx(
_IRQL_requires_max_(PASSIVE_LEVEL) _IRQL_requires_max_(PASSIVE_LEVEL)
_Must_inspect_result_ _Must_inspect_result_
_Post_satisfies_(return <= 0) _Post_satisfies_(return <= 0)
SCSIPORTAPI SCSIPORT_API
NTSTATUS NTSTATUS
NTAPI NTAPI
ClassCreateDeviceObject( ClassCreateDeviceObject(
@ -793,19 +986,19 @@ ClassCreateDeviceObject(
PDEVICE_OBJECT *DeviceObject); PDEVICE_OBJECT *DeviceObject);
_Must_inspect_result_ _Must_inspect_result_
SCSIPORTAPI SCSIPORT_API
NTSTATUS NTSTATUS
NTAPI NTAPI
ClassReadDriveCapacity( ClassReadDriveCapacity(
_In_ PDEVICE_OBJECT DeviceObject); _In_ PDEVICE_OBJECT DeviceObject);
SCSIPORTAPI SCSIPORT_API
VOID VOID
NTAPI NTAPI
ClassReleaseQueue( ClassReleaseQueue(
_In_ PDEVICE_OBJECT DeviceObject); _In_ PDEVICE_OBJECT DeviceObject);
SCSIPORTAPI SCSIPORT_API
VOID VOID
NTAPI NTAPI
ClassSplitRequest( ClassSplitRequest(
@ -813,14 +1006,14 @@ ClassSplitRequest(
_In_ PIRP Irp, _In_ PIRP Irp,
_In_ ULONG MaximumBytes); _In_ ULONG MaximumBytes);
SCSIPORTAPI SCSIPORT_API
NTSTATUS NTSTATUS
NTAPI NTAPI
ClassDeviceControl( ClassDeviceControl(
_In_ PDEVICE_OBJECT DeviceObject, _In_ PDEVICE_OBJECT DeviceObject,
_Inout_ PIRP Irp); _Inout_ PIRP Irp);
SCSIPORTAPI SCSIPORT_API
NTSTATUS NTSTATUS
NTAPI NTAPI
ClassIoComplete( ClassIoComplete(
@ -828,7 +1021,7 @@ ClassIoComplete(
PIRP Irp, PIRP Irp,
PVOID Context); PVOID Context);
SCSIPORTAPI SCSIPORT_API
NTSTATUS NTSTATUS
NTAPI NTAPI
ClassIoCompleteAssociated( ClassIoCompleteAssociated(
@ -836,7 +1029,7 @@ ClassIoCompleteAssociated(
PIRP Irp, PIRP Irp,
PVOID Context); PVOID Context);
SCSIPORTAPI SCSIPORT_API
BOOLEAN BOOLEAN
NTAPI NTAPI
ClassInterpretSenseInfo( ClassInterpretSenseInfo(
@ -860,21 +1053,21 @@ ClassSendDeviceIoControlSynchronous(
_In_ BOOLEAN InternalDeviceIoControl, _In_ BOOLEAN InternalDeviceIoControl,
_Out_ PIO_STATUS_BLOCK IoStatus); _Out_ PIO_STATUS_BLOCK IoStatus);
SCSIPORTAPI SCSIPORT_API
NTSTATUS NTSTATUS
NTAPI NTAPI
ClassSendIrpSynchronous( ClassSendIrpSynchronous(
_In_ PDEVICE_OBJECT TargetDeviceObject, _In_ PDEVICE_OBJECT TargetDeviceObject,
_In_ PIRP Irp); _In_ PIRP Irp);
SCSIPORTAPI SCSIPORT_API
NTSTATUS NTSTATUS
NTAPI NTAPI
ClassForwardIrpSynchronous( ClassForwardIrpSynchronous(
_In_ PCOMMON_DEVICE_EXTENSION CommonExtension, _In_ PCOMMON_DEVICE_EXTENSION CommonExtension,
_In_ PIRP Irp); _In_ PIRP Irp);
SCSIPORTAPI SCSIPORT_API
NTSTATUS NTSTATUS
NTAPI NTAPI
ClassSendSrbSynchronous( ClassSendSrbSynchronous(
@ -884,7 +1077,7 @@ ClassSendSrbSynchronous(
_In_ ULONG BufferLength, _In_ ULONG BufferLength,
_In_ BOOLEAN WriteToDevice); _In_ BOOLEAN WriteToDevice);
SCSIPORTAPI SCSIPORT_API
NTSTATUS NTSTATUS
NTAPI NTAPI
ClassSendSrbAsynchronous( ClassSendSrbAsynchronous(
@ -895,14 +1088,14 @@ ClassSendSrbAsynchronous(
_In_ ULONG BufferLength, _In_ ULONG BufferLength,
_In_ BOOLEAN WriteToDevice); _In_ BOOLEAN WriteToDevice);
SCSIPORTAPI SCSIPORT_API
NTSTATUS NTSTATUS
NTAPI NTAPI
ClassBuildRequest( ClassBuildRequest(
_In_ PDEVICE_OBJECT DeviceObject, _In_ PDEVICE_OBJECT DeviceObject,
_In_ PIRP Irp); _In_ PIRP Irp);
SCSIPORTAPI SCSIPORT_API
ULONG ULONG
NTAPI NTAPI
ClassModeSense( ClassModeSense(
@ -911,7 +1104,7 @@ ClassModeSense(
_In_ ULONG Length, _In_ ULONG Length,
_In_ UCHAR PageMode); _In_ UCHAR PageMode);
SCSIPORTAPI SCSIPORT_API
PVOID PVOID
NTAPI NTAPI
ClassFindModePage( ClassFindModePage(
@ -921,14 +1114,14 @@ ClassFindModePage(
_In_ BOOLEAN Use6Byte); _In_ BOOLEAN Use6Byte);
_IRQL_requires_max_(PASSIVE_LEVEL) _IRQL_requires_max_(PASSIVE_LEVEL)
SCSIPORTAPI SCSIPORT_API
NTSTATUS NTSTATUS
NTAPI NTAPI
ClassClaimDevice( ClassClaimDevice(
_In_ PDEVICE_OBJECT LowerDeviceObject, _In_ PDEVICE_OBJECT LowerDeviceObject,
_In_ BOOLEAN Release); _In_ BOOLEAN Release);
SCSIPORTAPI SCSIPORT_API
NTSTATUS NTSTATUS
NTAPI NTAPI
ClassInternalIoControl( ClassInternalIoControl(
@ -936,7 +1129,7 @@ ClassInternalIoControl(
PIRP Irp); PIRP Irp);
_IRQL_requires_max_(PASSIVE_LEVEL) _IRQL_requires_max_(PASSIVE_LEVEL)
SCSIPORTAPI SCSIPORT_API
VOID VOID
NTAPI NTAPI
ClassInitializeSrbLookasideList( ClassInitializeSrbLookasideList(
@ -944,51 +1137,51 @@ ClassInitializeSrbLookasideList(
_In_ ULONG NumberElements); _In_ ULONG NumberElements);
_IRQL_requires_max_(PASSIVE_LEVEL) _IRQL_requires_max_(PASSIVE_LEVEL)
SCSIPORTAPI SCSIPORT_API
VOID VOID
NTAPI NTAPI
ClassDeleteSrbLookasideList( ClassDeleteSrbLookasideList(
_Inout_ PCOMMON_DEVICE_EXTENSION CommonExtension); _Inout_ PCOMMON_DEVICE_EXTENSION CommonExtension);
_IRQL_requires_max_(PASSIVE_LEVEL) _IRQL_requires_max_(PASSIVE_LEVEL)
SCSIPORTAPI SCSIPORT_API
ULONG ULONG
NTAPI NTAPI
ClassQueryTimeOutRegistryValue( ClassQueryTimeOutRegistryValue(
_In_ PDEVICE_OBJECT DeviceObject); _In_ PDEVICE_OBJECT DeviceObject);
_IRQL_requires_max_(PASSIVE_LEVEL) _IRQL_requires_max_(PASSIVE_LEVEL)
SCSIPORTAPI SCSIPORT_API
NTSTATUS NTSTATUS
NTAPI NTAPI
ClassGetDescriptor( ClassGetDescriptor(
_In_ PDEVICE_OBJECT DeviceObject, _In_ PDEVICE_OBJECT DeviceObject,
_In_ PSTORAGE_PROPERTY_ID PropertyId, _In_ PSTORAGE_PROPERTY_ID PropertyId,
_Outptr_ PSTORAGE_DESCRIPTOR_HEADER *Descriptor); _Outptr_ PVOID *Descriptor);
_IRQL_requires_max_(PASSIVE_LEVEL) _IRQL_requires_max_(PASSIVE_LEVEL)
SCSIPORTAPI SCSIPORT_API
VOID VOID
NTAPI NTAPI
ClassInvalidateBusRelations( ClassInvalidateBusRelations(
_In_ PDEVICE_OBJECT Fdo); _In_ PDEVICE_OBJECT Fdo);
_IRQL_requires_max_(PASSIVE_LEVEL) _IRQL_requires_max_(PASSIVE_LEVEL)
SCSIPORTAPI SCSIPORT_API
VOID VOID
NTAPI NTAPI
ClassMarkChildrenMissing( ClassMarkChildrenMissing(
_In_ PFUNCTIONAL_DEVICE_EXTENSION Fdo); _In_ PFUNCTIONAL_DEVICE_EXTENSION Fdo);
_IRQL_requires_max_(PASSIVE_LEVEL) _IRQL_requires_max_(PASSIVE_LEVEL)
SCSIPORTAPI SCSIPORT_API
BOOLEAN BOOLEAN
NTAPI NTAPI
ClassMarkChildMissing( ClassMarkChildMissing(
_In_ PPHYSICAL_DEVICE_EXTENSION PdoExtension, _In_ PPHYSICAL_DEVICE_EXTENSION PdoExtension,
_In_ BOOLEAN AcquireChildLock); _In_ BOOLEAN AcquireChildLock);
SCSIPORTAPI SCSIPORT_API
VOID VOID
ClassDebugPrint( ClassDebugPrint(
_In_ CLASS_DEBUG_LEVEL DebugPrintLevel, _In_ CLASS_DEBUG_LEVEL DebugPrintLevel,
@ -997,13 +1190,13 @@ ClassDebugPrint(
__drv_aliasesMem __drv_aliasesMem
_IRQL_requires_max_(DISPATCH_LEVEL) _IRQL_requires_max_(DISPATCH_LEVEL)
SCSIPORTAPI SCSIPORT_API
PCLASS_DRIVER_EXTENSION PCLASS_DRIVER_EXTENSION
NTAPI NTAPI
ClassGetDriverExtension( ClassGetDriverExtension(
_In_ PDRIVER_OBJECT DriverObject); _In_ PDRIVER_OBJECT DriverObject);
SCSIPORTAPI SCSIPORT_API
VOID VOID
NTAPI NTAPI
ClassCompleteRequest( ClassCompleteRequest(
@ -1011,14 +1204,14 @@ ClassCompleteRequest(
_In_ PIRP Irp, _In_ PIRP Irp,
_In_ CCHAR PriorityBoost); _In_ CCHAR PriorityBoost);
SCSIPORTAPI SCSIPORT_API
VOID VOID
NTAPI NTAPI
ClassReleaseRemoveLock( ClassReleaseRemoveLock(
_In_ PDEVICE_OBJECT DeviceObject, _In_ PDEVICE_OBJECT DeviceObject,
PIRP Tag); PIRP Tag);
SCSIPORTAPI SCSIPORT_API
ULONG ULONG
NTAPI NTAPI
ClassAcquireRemoveLockEx( ClassAcquireRemoveLockEx(
@ -1028,7 +1221,7 @@ ClassAcquireRemoveLockEx(
_In_ ULONG Line); _In_ ULONG Line);
_IRQL_requires_max_(PASSIVE_LEVEL) _IRQL_requires_max_(PASSIVE_LEVEL)
SCSIPORTAPI SCSIPORT_API
VOID VOID
NTAPI NTAPI
ClassUpdateInformationInRegistry( ClassUpdateInformationInRegistry(
@ -1038,7 +1231,7 @@ ClassUpdateInformationInRegistry(
_In_reads_bytes_opt_(InquiryDataLength) PINQUIRYDATA InquiryData, _In_reads_bytes_opt_(InquiryDataLength) PINQUIRYDATA InquiryData,
_In_ ULONG InquiryDataLength); _In_ ULONG InquiryDataLength);
SCSIPORTAPI SCSIPORT_API
NTSTATUS NTSTATUS
NTAPI NTAPI
ClassWmiCompleteRequest( ClassWmiCompleteRequest(
@ -1049,7 +1242,7 @@ ClassWmiCompleteRequest(
_In_ CCHAR PriorityBoost); _In_ CCHAR PriorityBoost);
_IRQL_requires_max_(DISPATCH_LEVEL) _IRQL_requires_max_(DISPATCH_LEVEL)
SCSIPORTAPI SCSIPORT_API
NTSTATUS NTSTATUS
NTAPI NTAPI
ClassWmiFireEvent( ClassWmiFireEvent(
@ -1059,14 +1252,14 @@ ClassWmiFireEvent(
_In_ ULONG EventDataSize, _In_ ULONG EventDataSize,
_In_reads_bytes_(EventDataSize) PVOID EventData); _In_reads_bytes_(EventDataSize) PVOID EventData);
SCSIPORTAPI SCSIPORT_API
VOID VOID
NTAPI NTAPI
ClassResetMediaChangeTimer( ClassResetMediaChangeTimer(
_In_ PFUNCTIONAL_DEVICE_EXTENSION FdoExtension); _In_ PFUNCTIONAL_DEVICE_EXTENSION FdoExtension);
_IRQL_requires_max_(PASSIVE_LEVEL) _IRQL_requires_max_(PASSIVE_LEVEL)
SCSIPORTAPI SCSIPORT_API
VOID VOID
NTAPI NTAPI
ClassInitializeMediaChangeDetection( ClassInitializeMediaChangeDetection(
@ -1074,20 +1267,20 @@ ClassInitializeMediaChangeDetection(
_In_ PUCHAR EventPrefix); _In_ PUCHAR EventPrefix);
_IRQL_requires_max_(PASSIVE_LEVEL) _IRQL_requires_max_(PASSIVE_LEVEL)
SCSIPORTAPI SCSIPORT_API
NTSTATUS NTSTATUS
NTAPI NTAPI
ClassInitializeTestUnitPolling( ClassInitializeTestUnitPolling(
_In_ PFUNCTIONAL_DEVICE_EXTENSION FdoExtension, _In_ PFUNCTIONAL_DEVICE_EXTENSION FdoExtension,
_In_ BOOLEAN AllowDriveToSleep); _In_ BOOLEAN AllowDriveToSleep);
SCSIPORTAPI SCSIPORT_API
PVPB PVPB
NTAPI NTAPI
ClassGetVpb( ClassGetVpb(
_In_ PDEVICE_OBJECT DeviceObject); _In_ PDEVICE_OBJECT DeviceObject);
SCSIPORTAPI SCSIPORT_API
NTSTATUS NTSTATUS
NTAPI NTAPI
ClassSpinDownPowerHandler( ClassSpinDownPowerHandler(
@ -1122,13 +1315,13 @@ ClassNotifyFailurePredicted(
_In_ UCHAR Lun); _In_ UCHAR Lun);
_IRQL_requires_max_(PASSIVE_LEVEL) _IRQL_requires_max_(PASSIVE_LEVEL)
SCSIPORTAPI SCSIPORT_API
VOID VOID
NTAPI NTAPI
ClassAcquireChildLock( ClassAcquireChildLock(
_In_ PFUNCTIONAL_DEVICE_EXTENSION FdoExtension); _In_ PFUNCTIONAL_DEVICE_EXTENSION FdoExtension);
SCSIPORTAPI SCSIPORT_API
VOID VOID
NTAPI NTAPI
ClassReleaseChildLock( ClassReleaseChildLock(
@ -1142,14 +1335,14 @@ ClassSendStartUnit(
_In_ PDEVICE_OBJECT DeviceObject); _In_ PDEVICE_OBJECT DeviceObject);
_IRQL_requires_max_(PASSIVE_LEVEL) _IRQL_requires_max_(PASSIVE_LEVEL)
SCSIPORTAPI SCSIPORT_API
NTSTATUS NTSTATUS
NTAPI NTAPI
ClassRemoveDevice( ClassRemoveDevice(
_In_ PDEVICE_OBJECT DeviceObject, _In_ PDEVICE_OBJECT DeviceObject,
_In_ UCHAR RemoveType); _In_ UCHAR RemoveType);
SCSIPORTAPI SCSIPORT_API
NTSTATUS NTSTATUS
NTAPI NTAPI
ClassAsynchronousCompletion( ClassAsynchronousCompletion(
@ -1157,13 +1350,13 @@ ClassAsynchronousCompletion(
PIRP Irp, PIRP Irp,
PVOID Event); PVOID Event);
SCSIPORTAPI SCSIPORT_API
VOID VOID
NTAPI NTAPI
ClassCheckMediaState( ClassCheckMediaState(
_In_ PFUNCTIONAL_DEVICE_EXTENSION FdoExtension); _In_ PFUNCTIONAL_DEVICE_EXTENSION FdoExtension);
SCSIPORTAPI SCSIPORT_API
NTSTATUS NTSTATUS
NTAPI NTAPI
ClassCheckVerifyComplete( ClassCheckVerifyComplete(
@ -1172,7 +1365,7 @@ ClassCheckVerifyComplete(
PVOID Context); PVOID Context);
_IRQL_requires_max_(PASSIVE_LEVEL) _IRQL_requires_max_(PASSIVE_LEVEL)
SCSIPORTAPI SCSIPORT_API
VOID VOID
NTAPI NTAPI
ClassSetMediaChangeState( ClassSetMediaChangeState(
@ -1181,21 +1374,21 @@ ClassSetMediaChangeState(
_In_ BOOLEAN Wait); _In_ BOOLEAN Wait);
_IRQL_requires_max_(PASSIVE_LEVEL) _IRQL_requires_max_(PASSIVE_LEVEL)
SCSIPORTAPI SCSIPORT_API
VOID VOID
NTAPI NTAPI
ClassEnableMediaChangeDetection( ClassEnableMediaChangeDetection(
_In_ PFUNCTIONAL_DEVICE_EXTENSION FdoExtension); _In_ PFUNCTIONAL_DEVICE_EXTENSION FdoExtension);
_IRQL_requires_max_(PASSIVE_LEVEL) _IRQL_requires_max_(PASSIVE_LEVEL)
SCSIPORTAPI SCSIPORT_API
VOID VOID
NTAPI NTAPI
ClassDisableMediaChangeDetection( ClassDisableMediaChangeDetection(
_In_ PFUNCTIONAL_DEVICE_EXTENSION FdoExtension); _In_ PFUNCTIONAL_DEVICE_EXTENSION FdoExtension);
_IRQL_requires_max_(PASSIVE_LEVEL) _IRQL_requires_max_(PASSIVE_LEVEL)
SCSIPORTAPI SCSIPORT_API
VOID VOID
NTAPI NTAPI
ClassCleanupMediaChangeDetection( ClassCleanupMediaChangeDetection(
@ -1239,6 +1432,33 @@ ClassSendNotification(
#endif /* (NTDDI_VERSION >= NTDDI_VISTA) */ #endif /* (NTDDI_VERSION >= NTDDI_VISTA) */
__inline
UCHAR
GET_FDO_EXTENSON_SENSE_DATA_LENGTH (
_In_ PFUNCTIONAL_DEVICE_EXTENSION FdoExtension)
{
UCHAR SenseDataLength = 0;
if (FdoExtension->SenseData != NULL)
{
#if (NTDDI_VERSION >= NTDDI_WIN8)
if (FdoExtension->SenseDataLength > 0)
{
SenseDataLength = FdoExtension->SenseDataLength;
}
else
{
// For backward compatibility with Windows 7 and earlier
SenseDataLength = SENSE_BUFFER_SIZE;
}
#else
SenseDataLength = SENSE_BUFFER_SIZE;
#endif
}
return SenseDataLength;
}
static __inline static __inline
BOOLEAN BOOLEAN
PORT_ALLOCATED_SENSE( PORT_ALLOCATED_SENSE(

File diff suppressed because it is too large Load diff

View file

@ -146,7 +146,7 @@ typedef struct _SCSIWMILIB_CONTEXT {
} SCSI_WMILIB_CONTEXT, *PSCSI_WMILIB_CONTEXT; } SCSI_WMILIB_CONTEXT, *PSCSI_WMILIB_CONTEXT;
_Must_inspect_result_ _Must_inspect_result_
SCSIPORTAPI SCSIPORT_API
BOOLEAN BOOLEAN
NTAPI NTAPI
ScsiPortWmiDispatchFunction( ScsiPortWmiDispatchFunction(
@ -189,7 +189,7 @@ ScsiPortWmiDispatchFunction(
#define ScsiPortWmiGetReturnStatus(RequestContext) \ #define ScsiPortWmiGetReturnStatus(RequestContext) \
((RequestContext)->ReturnStatus) ((RequestContext)->ReturnStatus)
SCSIPORTAPI SCSIPORT_API
VOID VOID
NTAPI NTAPI
ScsiPortWmiPostProcess( ScsiPortWmiPostProcess(
@ -197,7 +197,7 @@ ScsiPortWmiPostProcess(
_In_ UCHAR SrbStatus, _In_ UCHAR SrbStatus,
_In_ ULONG BufferUsed); _In_ ULONG BufferUsed);
SCSIPORTAPI SCSIPORT_API
VOID VOID
NTAPI NTAPI
ScsiPortWmiFireLogicalUnitEvent( ScsiPortWmiFireLogicalUnitEvent(

View file

@ -76,6 +76,7 @@ extern "C" {
#define SRB_FUNCTION_RELEASE_DEVICE 0x06 #define SRB_FUNCTION_RELEASE_DEVICE 0x06
#define SRB_FUNCTION_SHUTDOWN 0x07 #define SRB_FUNCTION_SHUTDOWN 0x07
#define SRB_FUNCTION_FLUSH 0x08 #define SRB_FUNCTION_FLUSH 0x08
#define SRB_FUNCTION_PROTOCOL_COMMAND 0x09
#define SRB_FUNCTION_ABORT_COMMAND 0x10 #define SRB_FUNCTION_ABORT_COMMAND 0x10
#define SRB_FUNCTION_RELEASE_RECOVERY 0x11 #define SRB_FUNCTION_RELEASE_RECOVERY 0x11
#define SRB_FUNCTION_RESET_BUS 0x12 #define SRB_FUNCTION_RESET_BUS 0x12
@ -86,6 +87,7 @@ extern "C" {
#define SRB_FUNCTION_WMI 0x17 #define SRB_FUNCTION_WMI 0x17
#define SRB_FUNCTION_LOCK_QUEUE 0x18 #define SRB_FUNCTION_LOCK_QUEUE 0x18
#define SRB_FUNCTION_UNLOCK_QUEUE 0x19 #define SRB_FUNCTION_UNLOCK_QUEUE 0x19
#define SRB_FUNCTION_QUIESCE_DEVICE 0x1a
#define SRB_FUNCTION_RESET_LOGICAL_UNIT 0x20 #define SRB_FUNCTION_RESET_LOGICAL_UNIT 0x20
#define SRB_FUNCTION_SET_LINK_TIMEOUT 0x21 #define SRB_FUNCTION_SET_LINK_TIMEOUT 0x21
#define SRB_FUNCTION_LINK_TIMEOUT_OCCURRED 0x22 #define SRB_FUNCTION_LINK_TIMEOUT_OCCURRED 0x22
@ -93,6 +95,11 @@ extern "C" {
#define SRB_FUNCTION_POWER 0x24 #define SRB_FUNCTION_POWER 0x24
#define SRB_FUNCTION_PNP 0x25 #define SRB_FUNCTION_PNP 0x25
#define SRB_FUNCTION_DUMP_POINTERS 0x26 #define SRB_FUNCTION_DUMP_POINTERS 0x26
#define SRB_FUNCTION_FREE_DUMP_POINTERS 0x27
#define SRB_FUNCTION_STORAGE_REQUEST_BLOCK 0x28 // special value
#define SRB_FUNCTION_CRYPTO_OPERATION 0x29
#define SRB_FUNCTION_GET_DUMP_INFO 0x2a
#define SRB_FUNCTION_FREE_DUMP_INFO 0x2b
/* SCSI_REQUEST_BLOCK.SrbStatus constants */ /* SCSI_REQUEST_BLOCK.SrbStatus constants */
#define SRB_STATUS_PENDING 0x00 #define SRB_STATUS_PENDING 0x00
@ -123,6 +130,8 @@ extern "C" {
#define SRB_STATUS_ERROR_RECOVERY 0x23 #define SRB_STATUS_ERROR_RECOVERY 0x23
#define SRB_STATUS_NOT_POWERED 0x24 #define SRB_STATUS_NOT_POWERED 0x24
#define SRB_STATUS_LINK_DOWN 0x25 #define SRB_STATUS_LINK_DOWN 0x25
#define SRB_STATUS_INSUFFICIENT_RESOURCES 0x26
#define SRB_STATUS_THROTTLED_REQUEST 0x27
#define SRB_STATUS_INTERNAL_ERROR 0x30 #define SRB_STATUS_INTERNAL_ERROR 0x30
#define SRB_STATUS_QUEUE_FROZEN 0x40 #define SRB_STATUS_QUEUE_FROZEN 0x40
@ -144,6 +153,8 @@ extern "C" {
#define SRB_FLAGS_NO_QUEUE_FREEZE 0x00000100 #define SRB_FLAGS_NO_QUEUE_FREEZE 0x00000100
#define SRB_FLAGS_ADAPTER_CACHE_ENABLE 0x00000200 #define SRB_FLAGS_ADAPTER_CACHE_ENABLE 0x00000200
#define SRB_FLAGS_FREE_SENSE_BUFFER 0x00000400 #define SRB_FLAGS_FREE_SENSE_BUFFER 0x00000400
#define SRB_FLAGS_D3_PROCESSING 0x00000800
#define SRB_FLAGS_SEQUENTIAL_REQUIRED 0x00001000
#define SRB_FLAGS_IS_ACTIVE 0x00010000 #define SRB_FLAGS_IS_ACTIVE 0x00010000
#define SRB_FLAGS_ALLOCATED_FROM_ZONE 0x00020000 #define SRB_FLAGS_ALLOCATED_FROM_ZONE 0x00020000
#define SRB_FLAGS_SGLIST_FROM_POOL 0x00040000 #define SRB_FLAGS_SGLIST_FROM_POOL 0x00040000
@ -424,6 +435,228 @@ typedef struct _SCSI_PNP_REQUEST_BLOCK {
UCHAR Reserved4[16]; UCHAR Reserved4[16];
} SCSI_PNP_REQUEST_BLOCK, *PSCSI_PNP_REQUEST_BLOCK; } SCSI_PNP_REQUEST_BLOCK, *PSCSI_PNP_REQUEST_BLOCK;
#if (NTDDI_VERSION >= NTDDI_WIN8)
#if defined(_WIN64)
#define SRB_ALIGN DECLSPEC_ALIGN(8)
#define POINTER_ALIGN DECLSPEC_ALIGN(8)
#else
#define SRB_ALIGN
#define POINTER_ALIGN
#endif
typedef enum _SRBEXDATATYPE {
SrbExDataTypeUnknown = 0,
SrbExDataTypeBidirectional,
SrbExDataTypeScsiCdb16 = 0x40,
SrbExDataTypeScsiCdb32,
SrbExDataTypeScsiCdbVar,
SrbExDataTypeWmi = 0x60,
SrbExDataTypePower,
SrbExDataTypePnP,
SrbExDataTypeIoInfo = 0x80,
SrbExDataTypeMSReservedStart = 0xf0000000,
SrbExDataTypeReserved = 0xffffffff
} SRBEXDATATYPE, *PSRBEXDATATYPE;
typedef struct SRB_ALIGN _SRBEX_DATA {
SRBEXDATATYPE Type;
ULONG Length;
_Field_size_bytes_(Length) UCHAR Data[ANYSIZE_ARRAY];
} SRBEX_DATA, *PSRBEX_DATA;
#define SRBEX_DATA_BIDIRECTIONAL_LENGTH ((2 * sizeof(ULONG)) + sizeof(PVOID))
typedef struct SRB_ALIGN _SRBEX_DATA_BIDIRECTIONAL {
_Field_range_(SrbExDataTypeBidirectional, SrbExDataTypeBidirectional)
SRBEXDATATYPE Type;
_Field_range_(SRBEX_DATA_BIDIRECTIONAL_LENGTH, SRBEX_DATA_BIDIRECTIONAL_LENGTH)
ULONG Length;
ULONG DataInTransferLength;
ULONG Reserved1;
_Field_size_bytes_full_(DataInTransferLength)
PVOID POINTER_ALIGN DataInBuffer;
} SRBEX_DATA_BIDIRECTIONAL, *PSRBEX_DATA_BIDIRECTIONAL;
#define SRBEX_DATA_SCSI_CDB16_LENGTH ((20 * sizeof(UCHAR)) + sizeof(ULONG) + sizeof(PVOID))
typedef struct SRB_ALIGN _SRBEX_DATA_SCSI_CDB16 {
_Field_range_(SrbExDataTypeScsiCdb16, SrbExDataTypeScsiCdb16)
SRBEXDATATYPE Type;
_Field_range_(SRBEX_DATA_SCSI_CDB16_LENGTH, SRBEX_DATA_SCSI_CDB16_LENGTH)
ULONG Length;
UCHAR ScsiStatus;
UCHAR SenseInfoBufferLength;
UCHAR CdbLength;
UCHAR Reserved;
ULONG Reserved1;
_Field_size_bytes_full_(SenseInfoBufferLength)
PVOID POINTER_ALIGN SenseInfoBuffer;
UCHAR POINTER_ALIGN Cdb[16];
} SRBEX_DATA_SCSI_CDB16, *PSRBEX_DATA_SCSI_CDB16;
#define SRBEX_DATA_SCSI_CDB32_LENGTH ((36 * sizeof(UCHAR)) + sizeof(ULONG) + sizeof(PVOID))
typedef struct SRB_ALIGN _SRBEX_DATA_SCSI_CDB32 {
_Field_range_(SrbExDataTypeScsiCdb32, SrbExDataTypeScsiCdb32)
SRBEXDATATYPE Type;
_Field_range_(SRBEX_DATA_SCSI_CDB32_LENGTH, SRBEX_DATA_SCSI_CDB32_LENGTH)
ULONG Length;
UCHAR ScsiStatus;
UCHAR SenseInfoBufferLength;
UCHAR CdbLength;
UCHAR Reserved;
ULONG Reserved1;
_Field_size_bytes_full_(SenseInfoBufferLength)
PVOID POINTER_ALIGN SenseInfoBuffer;
UCHAR POINTER_ALIGN Cdb[32];
} SRBEX_DATA_SCSI_CDB32, *PSRBEX_DATA_SCSI_CDB32;
#define SRBEX_DATA_SCSI_CDB_VAR_LENGTH_MIN ((4 * sizeof(UCHAR)) + (3 * sizeof(ULONG)) + sizeof(PVOID))
#define SRBEX_DATA_SCSI_CDB_VAR_LENGTH_MAX 0xffffffffUL
typedef struct SRB_ALIGN _SRBEX_DATA_SCSI_CDB_VAR {
_Field_range_(SrbExDataTypeScsiCdbVar, SrbExDataTypeScsiCdbVar)
SRBEXDATATYPE Type;
_Field_range_(SRBEX_DATA_SCSI_CDB_VAR_LENGTH_MIN, SRBEX_DATA_SCSI_CDB_VAR_LENGTH_MAX)
ULONG Length;
UCHAR ScsiStatus;
UCHAR SenseInfoBufferLength;
UCHAR Reserved[2];
ULONG CdbLength;
ULONG Reserved1[2];
_Field_size_bytes_full_(SenseInfoBufferLength)
PVOID POINTER_ALIGN SenseInfoBuffer;
_Field_size_bytes_full_(CdbLength)
UCHAR POINTER_ALIGN Cdb[ANYSIZE_ARRAY];
} SRBEX_DATA_SCSI_CDB_VAR, *PSRBEX_DATA_SCSI_CDB_VAR;
#define SRBEX_DATA_WMI_LENGTH ((4 * sizeof(UCHAR)) + sizeof(ULONG) + sizeof(PVOID))
typedef struct SRB_ALIGN _SRBEX_DATA_WMI {
_Field_range_(SrbExDataTypeWmi, SrbExDataTypeWmi)
SRBEXDATATYPE Type;
_Field_range_(SRBEX_DATA_WMI_LENGTH, SRBEX_DATA_WMI_LENGTH)
ULONG Length;
UCHAR WMISubFunction;
UCHAR WMIFlags;
UCHAR Reserved[2];
ULONG Reserved1;
PVOID POINTER_ALIGN DataPath;
} SRBEX_DATA_WMI, *PSRBEX_DATA_WMI;
#define SRBEX_DATA_POWER_LENGTH ((4 * sizeof(UCHAR)) + sizeof(STOR_DEVICE_POWER_STATE) + sizeof(STOR_POWER_ACTION))
typedef struct SRB_ALIGN _SRBEX_DATA_POWER {
_Field_range_(SrbExDataTypePower, SrbExDataTypePower)
SRBEXDATATYPE Type;
_Field_range_(SRBEX_DATA_POWER_LENGTH, SRBEX_DATA_POWER_LENGTH)
ULONG Length;
UCHAR SrbPowerFlags;
UCHAR Reserved[3];
STOR_DEVICE_POWER_STATE DevicePowerState;
STOR_POWER_ACTION PowerAction;
} SRBEX_DATA_POWER, *PSRBEX_DATA_POWER;
#define SRBEX_DATA_PNP_LENGTH ((4 * sizeof(UCHAR)) + sizeof(STOR_PNP_ACTION) + (2 * sizeof(ULONG)))
typedef struct SRB_ALIGN _SRBEX_DATA_PNP {
_Field_range_(SrbExDataTypePnP, SrbExDataTypePnP)
SRBEXDATATYPE Type;
_Field_range_(SRBEX_DATA_PNP_LENGTH, SRBEX_DATA_PNP_LENGTH)
ULONG Length;
UCHAR PnPSubFunction;
UCHAR Reserved[3];
STOR_PNP_ACTION PnPAction;
ULONG SrbPnPFlags;
ULONG Reserved1;
} SRBEX_DATA_PNP, *PSRBEX_DATA_PNP;
#define SRBEX_DATA_IO_INFO_LENGTH ((5 * sizeof(ULONG)) + (4 * sizeof(UCHAR)))
#define REQUEST_INFO_NO_CACHE_FLAG 0x00000001
#define REQUEST_INFO_PAGING_IO_FLAG 0x00000002
#define REQUEST_INFO_SEQUENTIAL_IO_FLAG 0x00000004
#define REQUEST_INFO_TEMPORARY_FLAG 0x00000008
#define REQUEST_INFO_WRITE_THROUGH_FLAG 0x00000010
#define REQUEST_INFO_HYBRID_WRITE_THROUGH_FLAG 0x00000020
#if (NTDDI_VERSION >= NTDDI_WINTHRESHOLD)
#define REQUEST_INFO_NO_FILE_OBJECT_FLAG 0x00000040
#define REQUEST_INFO_VOLSNAP_IO_FLAG 0x00000080
#define REQUEST_INFO_STREAM_FLAG 0x00000100
#endif /* (NTDDI_VERSION >= NTDDI_WINTHRESHOLD) */
#define REQUEST_INFO_VALID_CACHEPRIORITY_FLAG 0x80000000
typedef struct SRB_ALIGN _SRBEX_DATA_IO_INFO {
_Field_range_(SrbExDataTypeIoInfo, SrbExDataTypeIoInfo)
SRBEXDATATYPE Type;
_Field_range_(SRBEX_DATA_IO_INFO_LENGTH, SRBEX_DATA_IO_INFO_LENGTH)
ULONG Length;
ULONG Flags;
ULONG Key;
ULONG RWLength;
BOOLEAN IsWriteRequest;
UCHAR CachePriority;
UCHAR Reserved[2];
ULONG Reserved1[2];
} SRBEX_DATA_IO_INFO, *PSRBEX_DATA_IO_INFO;
#define SRB_SIGNATURE 0x53524258
#define STORAGE_REQUEST_BLOCK_VERSION_1 0x1
typedef struct SRB_ALIGN _STORAGE_REQUEST_BLOCK_HEADER {
USHORT Length;
_Field_range_(SRB_FUNCTION_STORAGE_REQUEST_BLOCK, SRB_FUNCTION_STORAGE_REQUEST_BLOCK)
UCHAR Function;
UCHAR SrbStatus;
} STORAGE_REQUEST_BLOCK_HEADER, *PSTORAGE_REQUEST_BLOCK_HEADER;
typedef _Struct_size_bytes_(SrbLength) struct SRB_ALIGN _STORAGE_REQUEST_BLOCK {
USHORT Length;
_Field_range_(SRB_FUNCTION_STORAGE_REQUEST_BLOCK, SRB_FUNCTION_STORAGE_REQUEST_BLOCK)
UCHAR Function;
UCHAR SrbStatus;
UCHAR ReservedUchar[4];
_Field_range_(SRB_SIGNATURE, SRB_SIGNATURE)
ULONG Signature;
_Field_range_(STORAGE_REQUEST_BLOCK_VERSION_1, STORAGE_REQUEST_BLOCK_VERSION_1)
ULONG Version;
ULONG SrbLength;
ULONG SrbFunction;
ULONG SrbFlags;
ULONG ReservedUlong;
ULONG RequestTag;
USHORT RequestPriority;
USHORT RequestAttribute;
ULONG TimeOutValue;
ULONG SystemStatus;
ULONG ZeroGuard1;
_Field_range_(sizeof(STORAGE_REQUEST_BLOCK), SrbLength - sizeof(STOR_ADDRESS))
ULONG AddressOffset;
ULONG NumSrbExData;
ULONG DataTransferLength;
_Field_size_bytes_full_(DataTransferLength)
PVOID POINTER_ALIGN DataBuffer;
PVOID POINTER_ALIGN ZeroGuard2;
PVOID POINTER_ALIGN OriginalRequest;
PVOID POINTER_ALIGN ClassContext;
PVOID POINTER_ALIGN PortContext;
PVOID POINTER_ALIGN MiniportContext;
struct _STORAGE_REQUEST_BLOCK POINTER_ALIGN *NextSrb;
_At_buffer_(SrbExDataOffset, _Iter_, NumSrbExData, _Field_range_(0, SrbLength - sizeof(SRBEX_DATA)))
_Field_size_(NumSrbExData)
ULONG SrbExDataOffset[ANYSIZE_ARRAY];
} STORAGE_REQUEST_BLOCK, *PSTORAGE_REQUEST_BLOCK;
#define SRB_TYPE_SCSI_REQUEST_BLOCK 0
#define SRB_TYPE_STORAGE_REQUEST_BLOCK 1
#define STORAGE_ADDRESS_TYPE_BTL8 0
#endif /* (NTDDI_VERSION >= NTDDI_WIN8) */
typedef typedef
_Must_inspect_result_ _Must_inspect_result_
BOOLEAN BOOLEAN
@ -536,12 +769,12 @@ typedef struct _HW_INITIALIZATION_DATA {
} HW_INITIALIZATION_DATA, *PHW_INITIALIZATION_DATA; } HW_INITIALIZATION_DATA, *PHW_INITIALIZATION_DATA;
#if defined(_NTDDK_) #if defined(_NTDDK_)
#define SCSIPORTAPI #define SCSIPORT_API
#else #else
#define SCSIPORTAPI DECLSPEC_IMPORT #define SCSIPORT_API DECLSPEC_IMPORT
#endif #endif
SCSIPORTAPI SCSIPORT_API
VOID VOID
NTAPI NTAPI
ScsiPortCompleteRequest( ScsiPortCompleteRequest(
@ -552,7 +785,7 @@ ScsiPortCompleteRequest(
_In_ UCHAR SrbStatus); _In_ UCHAR SrbStatus);
_Must_inspect_result_ _Must_inspect_result_
SCSIPORTAPI SCSIPORT_API
ULONG ULONG
NTAPI NTAPI
ScsiPortConvertPhysicalAddressToUlong( ScsiPortConvertPhysicalAddressToUlong(
@ -562,19 +795,19 @@ ScsiPortConvertPhysicalAddressToUlong(
#define ScsiPortConvertPhysicalAddressToULongPtr(Address) ((ULONG_PTR)((Address).QuadPart)) #define ScsiPortConvertPhysicalAddressToULongPtr(Address) ((ULONG_PTR)((Address).QuadPart))
_Must_inspect_result_ _Must_inspect_result_
SCSIPORTAPI SCSIPORT_API
SCSI_PHYSICAL_ADDRESS SCSI_PHYSICAL_ADDRESS
NTAPI NTAPI
ScsiPortConvertUlongToPhysicalAddress( ScsiPortConvertUlongToPhysicalAddress(
_In_ ULONG_PTR UlongAddress); _In_ ULONG_PTR UlongAddress);
SCSIPORTAPI SCSIPORT_API
VOID VOID
NTAPI NTAPI
ScsiPortFlushDma( ScsiPortFlushDma(
_In_ PVOID DeviceExtension); _In_ PVOID DeviceExtension);
SCSIPORTAPI SCSIPORT_API
VOID VOID
NTAPI NTAPI
ScsiPortFreeDeviceBase( ScsiPortFreeDeviceBase(
@ -582,7 +815,7 @@ ScsiPortFreeDeviceBase(
_In_ PVOID MappedAddress); _In_ PVOID MappedAddress);
_Must_inspect_result_ _Must_inspect_result_
SCSIPORTAPI SCSIPORT_API
ULONG ULONG
NTAPI NTAPI
ScsiPortGetBusData( ScsiPortGetBusData(
@ -594,7 +827,7 @@ ScsiPortGetBusData(
_In_ ULONG Length); _In_ ULONG Length);
_Must_inspect_result_ _Must_inspect_result_
SCSIPORTAPI SCSIPORT_API
PVOID PVOID
NTAPI NTAPI
ScsiPortGetDeviceBase( ScsiPortGetDeviceBase(
@ -606,7 +839,7 @@ ScsiPortGetDeviceBase(
_In_ BOOLEAN InIoSpace); _In_ BOOLEAN InIoSpace);
_Must_inspect_result_ _Must_inspect_result_
SCSIPORTAPI SCSIPORT_API
PVOID PVOID
NTAPI NTAPI
ScsiPortGetLogicalUnit( ScsiPortGetLogicalUnit(
@ -616,7 +849,7 @@ ScsiPortGetLogicalUnit(
_In_ UCHAR Lun); _In_ UCHAR Lun);
_Must_inspect_result_ _Must_inspect_result_
SCSIPORTAPI SCSIPORT_API
SCSI_PHYSICAL_ADDRESS SCSI_PHYSICAL_ADDRESS
NTAPI NTAPI
ScsiPortGetPhysicalAddress( ScsiPortGetPhysicalAddress(
@ -626,7 +859,7 @@ ScsiPortGetPhysicalAddress(
_Out_ ULONG *Length); _Out_ ULONG *Length);
_Must_inspect_result_ _Must_inspect_result_
SCSIPORTAPI SCSIPORT_API
PSCSI_REQUEST_BLOCK PSCSI_REQUEST_BLOCK
NTAPI NTAPI
ScsiPortGetSrb( ScsiPortGetSrb(
@ -637,7 +870,7 @@ ScsiPortGetSrb(
_In_ LONG QueueTag); _In_ LONG QueueTag);
_Must_inspect_result_ _Must_inspect_result_
SCSIPORTAPI SCSIPORT_API
PVOID PVOID
NTAPI NTAPI
ScsiPortGetUncachedExtension( ScsiPortGetUncachedExtension(
@ -646,7 +879,7 @@ ScsiPortGetUncachedExtension(
_In_ ULONG NumberOfBytes); _In_ ULONG NumberOfBytes);
_Must_inspect_result_ _Must_inspect_result_
SCSIPORTAPI SCSIPORT_API
PVOID PVOID
NTAPI NTAPI
ScsiPortGetVirtualAddress( ScsiPortGetVirtualAddress(
@ -655,7 +888,7 @@ ScsiPortGetVirtualAddress(
_Must_inspect_result_ _Must_inspect_result_
_IRQL_requires_max_(PASSIVE_LEVEL) _IRQL_requires_max_(PASSIVE_LEVEL)
SCSIPORTAPI SCSIPORT_API
ULONG ULONG
NTAPI NTAPI
ScsiPortInitialize( ScsiPortInitialize(
@ -664,7 +897,7 @@ ScsiPortInitialize(
_In_ struct _HW_INITIALIZATION_DATA *HwInitializationData, _In_ struct _HW_INITIALIZATION_DATA *HwInitializationData,
_In_ PVOID HwContext); _In_ PVOID HwContext);
SCSIPORTAPI SCSIPORT_API
VOID VOID
NTAPI NTAPI
ScsiPortIoMapTransfer( ScsiPortIoMapTransfer(
@ -673,7 +906,7 @@ ScsiPortIoMapTransfer(
_In_ PVOID LogicalAddress, _In_ PVOID LogicalAddress,
_In_ ULONG Length); _In_ ULONG Length);
SCSIPORTAPI SCSIPORT_API
VOID VOID
NTAPI NTAPI
ScsiPortLogError( ScsiPortLogError(
@ -685,7 +918,7 @@ ScsiPortLogError(
_In_ ULONG ErrorCode, _In_ ULONG ErrorCode,
_In_ ULONG UniqueId); _In_ ULONG UniqueId);
SCSIPORTAPI SCSIPORT_API
VOID VOID
__cdecl __cdecl
ScsiPortNotification( ScsiPortNotification(
@ -693,14 +926,14 @@ ScsiPortNotification(
_In_ PVOID HwDeviceExtension, _In_ PVOID HwDeviceExtension,
...); ...);
SCSIPORTAPI SCSIPORT_API
VOID VOID
NTAPI NTAPI
ScsiPortQuerySystemTime( ScsiPortQuerySystemTime(
_Out_ PLARGE_INTEGER CurrentTime); _Out_ PLARGE_INTEGER CurrentTime);
_Must_inspect_result_ _Must_inspect_result_
SCSIPORTAPI SCSIPORT_API
ULONG ULONG
NTAPI NTAPI
ScsiPortSetBusDataByOffset( ScsiPortSetBusDataByOffset(
@ -712,14 +945,14 @@ ScsiPortSetBusDataByOffset(
_In_ ULONG Offset, _In_ ULONG Offset,
_In_ ULONG Length); _In_ ULONG Length);
SCSIPORTAPI SCSIPORT_API
VOID VOID
NTAPI NTAPI
ScsiPortStallExecution( ScsiPortStallExecution(
_In_ ULONG Delay); _In_ ULONG Delay);
_Must_inspect_result_ _Must_inspect_result_
SCSIPORTAPI SCSIPORT_API
BOOLEAN BOOLEAN
NTAPI NTAPI
ScsiPortValidateRange( ScsiPortValidateRange(
@ -730,7 +963,7 @@ ScsiPortValidateRange(
_In_ ULONG NumberOfBytes, _In_ ULONG NumberOfBytes,
_In_ BOOLEAN InIoSpace); _In_ BOOLEAN InIoSpace);
SCSIPORTAPI SCSIPORT_API
VOID VOID
__cdecl __cdecl
ScsiDebugPrint( ScsiDebugPrint(
@ -777,27 +1010,27 @@ ScsiDebugPrint(
#else #else
_Must_inspect_result_ _Must_inspect_result_
SCSIPORTAPI SCSIPORT_API
UCHAR UCHAR
NTAPI NTAPI
ScsiPortReadPortUchar( ScsiPortReadPortUchar(
_In_ PUCHAR Port); _In_ PUCHAR Port);
_Must_inspect_result_ _Must_inspect_result_
SCSIPORTAPI SCSIPORT_API
ULONG ULONG
NTAPI NTAPI
ScsiPortReadPortUlong( ScsiPortReadPortUlong(
_In_ PULONG Port); _In_ PULONG Port);
_Must_inspect_result_ _Must_inspect_result_
SCSIPORTAPI SCSIPORT_API
USHORT USHORT
NTAPI NTAPI
ScsiPortReadPortUshort( ScsiPortReadPortUshort(
_In_ PUSHORT Port); _In_ PUSHORT Port);
SCSIPORTAPI SCSIPORT_API
VOID VOID
NTAPI NTAPI
ScsiPortReadPortBufferUchar( ScsiPortReadPortBufferUchar(
@ -805,7 +1038,7 @@ ScsiPortReadPortBufferUchar(
_In_ PUCHAR Buffer, _In_ PUCHAR Buffer,
_In_ ULONG Count); _In_ ULONG Count);
SCSIPORTAPI SCSIPORT_API
VOID VOID
NTAPI NTAPI
ScsiPortReadPortBufferUlong( ScsiPortReadPortBufferUlong(
@ -813,7 +1046,7 @@ ScsiPortReadPortBufferUlong(
_In_ PULONG Buffer, _In_ PULONG Buffer,
_In_ ULONG Count); _In_ ULONG Count);
SCSIPORTAPI SCSIPORT_API
VOID VOID
NTAPI NTAPI
ScsiPortReadPortBufferUshort( ScsiPortReadPortBufferUshort(
@ -822,27 +1055,27 @@ ScsiPortReadPortBufferUshort(
_In_ ULONG Count); _In_ ULONG Count);
_Must_inspect_result_ _Must_inspect_result_
SCSIPORTAPI SCSIPORT_API
UCHAR UCHAR
NTAPI NTAPI
ScsiPortReadRegisterUchar( ScsiPortReadRegisterUchar(
_In_ PUCHAR Register); _In_ PUCHAR Register);
_Must_inspect_result_ _Must_inspect_result_
SCSIPORTAPI SCSIPORT_API
ULONG ULONG
NTAPI NTAPI
ScsiPortReadRegisterUlong( ScsiPortReadRegisterUlong(
_In_ PULONG Register); _In_ PULONG Register);
_Must_inspect_result_ _Must_inspect_result_
SCSIPORTAPI SCSIPORT_API
USHORT USHORT
NTAPI NTAPI
ScsiPortReadRegisterUshort( ScsiPortReadRegisterUshort(
_In_ PUSHORT Register); _In_ PUSHORT Register);
SCSIPORTAPI SCSIPORT_API
VOID VOID
NTAPI NTAPI
ScsiPortReadRegisterBufferUchar( ScsiPortReadRegisterBufferUchar(
@ -850,7 +1083,7 @@ ScsiPortReadRegisterBufferUchar(
_In_ PUCHAR Buffer, _In_ PUCHAR Buffer,
_In_ ULONG Count); _In_ ULONG Count);
SCSIPORTAPI SCSIPORT_API
VOID VOID
NTAPI NTAPI
ScsiPortReadRegisterBufferUlong( ScsiPortReadRegisterBufferUlong(
@ -858,7 +1091,7 @@ ScsiPortReadRegisterBufferUlong(
_In_ PULONG Buffer, _In_ PULONG Buffer,
_In_ ULONG Count); _In_ ULONG Count);
SCSIPORTAPI SCSIPORT_API
VOID VOID
NTAPI NTAPI
ScsiPortReadRegisterBufferUshort( ScsiPortReadRegisterBufferUshort(
@ -866,28 +1099,28 @@ ScsiPortReadRegisterBufferUshort(
_In_ PUSHORT Buffer, _In_ PUSHORT Buffer,
_In_ ULONG Count); _In_ ULONG Count);
SCSIPORTAPI SCSIPORT_API
VOID VOID
NTAPI NTAPI
ScsiPortWritePortUchar( ScsiPortWritePortUchar(
_In_ PUCHAR Port, _In_ PUCHAR Port,
_In_ UCHAR Value); _In_ UCHAR Value);
SCSIPORTAPI SCSIPORT_API
VOID VOID
NTAPI NTAPI
ScsiPortWritePortUlong( ScsiPortWritePortUlong(
_In_ PULONG Port, _In_ PULONG Port,
_In_ ULONG Value); _In_ ULONG Value);
SCSIPORTAPI SCSIPORT_API
VOID VOID
NTAPI NTAPI
ScsiPortWritePortUshort( ScsiPortWritePortUshort(
_In_ PUSHORT Port, _In_ PUSHORT Port,
_In_ USHORT Value); _In_ USHORT Value);
SCSIPORTAPI SCSIPORT_API
VOID VOID
NTAPI NTAPI
ScsiPortWritePortBufferUchar( ScsiPortWritePortBufferUchar(
@ -895,7 +1128,7 @@ ScsiPortWritePortBufferUchar(
_In_ PUCHAR Buffer, _In_ PUCHAR Buffer,
_In_ ULONG Count); _In_ ULONG Count);
SCSIPORTAPI SCSIPORT_API
VOID VOID
NTAPI NTAPI
ScsiPortWritePortBufferUlong( ScsiPortWritePortBufferUlong(
@ -903,7 +1136,7 @@ ScsiPortWritePortBufferUlong(
_In_ PULONG Buffer, _In_ PULONG Buffer,
_In_ ULONG Count); _In_ ULONG Count);
SCSIPORTAPI SCSIPORT_API
VOID VOID
NTAPI NTAPI
ScsiPortWritePortBufferUshort( ScsiPortWritePortBufferUshort(
@ -911,28 +1144,28 @@ ScsiPortWritePortBufferUshort(
_In_ PUSHORT Buffer, _In_ PUSHORT Buffer,
_In_ ULONG Count); _In_ ULONG Count);
SCSIPORTAPI SCSIPORT_API
VOID VOID
NTAPI NTAPI
ScsiPortWriteRegisterUchar( ScsiPortWriteRegisterUchar(
_In_ PUCHAR Register, _In_ PUCHAR Register,
_In_ UCHAR Value); _In_ UCHAR Value);
SCSIPORTAPI SCSIPORT_API
VOID VOID
NTAPI NTAPI
ScsiPortWriteRegisterUlong( ScsiPortWriteRegisterUlong(
_In_ PULONG Register, _In_ PULONG Register,
_In_ ULONG Value); _In_ ULONG Value);
SCSIPORTAPI SCSIPORT_API
VOID VOID
NTAPI NTAPI
ScsiPortWriteRegisterUshort( ScsiPortWriteRegisterUshort(
_In_ PUSHORT Register, _In_ PUSHORT Register,
_In_ USHORT Value); _In_ USHORT Value);
SCSIPORTAPI SCSIPORT_API
VOID VOID
NTAPI NTAPI
ScsiPortWriteRegisterBufferUchar( ScsiPortWriteRegisterBufferUchar(
@ -940,7 +1173,7 @@ ScsiPortWriteRegisterBufferUchar(
_In_ PUCHAR Buffer, _In_ PUCHAR Buffer,
_In_ ULONG Count); _In_ ULONG Count);
SCSIPORTAPI SCSIPORT_API
VOID VOID
NTAPI NTAPI
ScsiPortWriteRegisterBufferUlong( ScsiPortWriteRegisterBufferUlong(
@ -948,7 +1181,7 @@ ScsiPortWriteRegisterBufferUlong(
_In_ PULONG Buffer, _In_ PULONG Buffer,
_In_ ULONG Count); _In_ ULONG Count);
SCSIPORTAPI SCSIPORT_API
VOID VOID
NTAPI NTAPI
ScsiPortWriteRegisterBufferUshort( ScsiPortWriteRegisterBufferUshort(
@ -956,7 +1189,7 @@ ScsiPortWriteRegisterBufferUshort(
_In_ PUSHORT Buffer, _In_ PUSHORT Buffer,
_In_ ULONG Count); _In_ ULONG Count);
SCSIPORTAPI SCSIPORT_API
VOID VOID
NTAPI NTAPI
ScsiPortMoveMemory( ScsiPortMoveMemory(