16 #define max(a,b) (((a) > (b)) ? (a) : (b)) 17 #define min(a,b) (((a) < (b)) ? (a) : (b)) 19 #define SRB_CLASS_FLAGS_LOW_PRIORITY 0x10000000 20 #define SRB_CLASS_FLAGS_PERSISTANT 0x20000000 21 #define SRB_CLASS_FLAGS_PAGING 0x40000000 22 #define SRB_CLASS_FLAGS_FREE_MDL 0x80000000 24 #define ASSERT_FDO(x) \ 25 ASSERT(((PCOMMON_DEVICE_EXTENSION) (x)->DeviceExtension)->IsFdo) 27 #define ASSERT_PDO(x) \ 28 ASSERT(!(((PCOMMON_DEVICE_EXTENSION) (x)->DeviceExtension)->IsFdo)) 30 #define IS_CLEANUP_REQUEST(majorFunction) \ 31 ((majorFunction == IRP_MJ_CLOSE) || \ 32 (majorFunction == IRP_MJ_CLEANUP) || \ 33 (majorFunction == IRP_MJ_SHUTDOWN)) 35 #define DO_MCD(fdoExtension) \ 36 (((fdoExtension)->MediaChangeDetectionInfo != NULL) && \ 37 ((fdoExtension)->MediaChangeDetectionInfo->MediaChangeDetectionDisableCount == 0)) 39 #define IS_SCSIOP_READ(opCode) \ 40 ((opCode == SCSIOP_READ6) || \ 41 (opCode == SCSIOP_READ) || \ 42 (opCode == SCSIOP_READ12) || \ 43 (opCode == SCSIOP_READ16)) 45 #define IS_SCSIOP_WRITE(opCode) \ 46 ((opCode == SCSIOP_WRITE6) || \ 47 (opCode == SCSIOP_WRITE) || \ 48 (opCode == SCSIOP_WRITE12) || \ 49 (opCode == SCSIOP_WRITE16)) 51 #define IS_SCSIOP_READWRITE(opCode) (IS_SCSIOP_READ(opCode) || IS_SCSIOP_WRITE(opCode)) 53 #define ADJUST_FUA_FLAG(fdoExt) { \ 54 if (TEST_FLAG(fdoExt->DeviceFlags, DEV_WRITE_CACHE) && \ 55 !TEST_FLAG(fdoExt->DeviceFlags, DEV_POWER_PROTECTED) && \ 56 !TEST_FLAG(fdoExt->ScanForSpecialFlags, CLASS_SPECIAL_FUA_NOT_SUPPORTED) ) { \ 57 fdoExt->CdbForceUnitAccess = TRUE; \ 59 fdoExt->CdbForceUnitAccess = FALSE; \ 63 #define FREE_POOL(_PoolPtr) \ 64 if (_PoolPtr != NULL) { \ 65 ExFreePool(_PoolPtr); \ 71 #undef ExAllocatePoolWithQuota 72 #define ExAllocatePool(a,b) ExAllocatePoolWithTag(a,b,'nUcS') 74 #define ExAllocatePoolWithQuota(a,b) ExAllocatePoolWithQuotaTag(a,b,'nUcS') 77 #define CLASS_TAG_AUTORUN_DISABLE 'ALcS' 78 #define CLASS_TAG_FILE_OBJECT_EXTENSION 'FLcS' 79 #define CLASS_TAG_MEDIA_CHANGE_DETECTION 'MLcS' 80 #define CLASS_TAG_MOUNT 'mLcS' 81 #define CLASS_TAG_RELEASE_QUEUE 'qLcS' 82 #define CLASS_TAG_POWER 'WLcS' 83 #define CLASS_TAG_WMI 'wLcS' 84 #define CLASS_TAG_FAILURE_PREDICT 'fLcS' 85 #define CLASS_TAG_DEVICE_CONTROL 'OIcS' 86 #define CLASS_TAG_MODE_DATA 'oLcS' 87 #define CLASS_TAG_MULTIPATH 'mPcS' 88 #define CLASS_TAG_LOCK_TRACKING 'TLcS' 89 #define CLASS_TAG_LB_PROVISIONING 'PLcS' 90 #define CLASS_TAG_MANAGE_DATASET 'MDcS' 92 #define MAXIMUM_RETRIES 4 94 #define CLASS_DRIVER_EXTENSION_KEY ((PVOID) ClassInitialize) 97 #define REMOVE_PENDING 1 98 #define REMOVE_COMPLETE 2 100 #define ClassAcquireRemoveLock(devobj, tag) \ 101 ClassAcquireRemoveLockEx(devobj, tag, __FILE__, __LINE__) 115 #define LEAVE goto __tryLabel; 116 #define FINALLY __tryLabel: 118 #if defined DebugPrint 123 #define DebugPrint(x) ClassDebugPrint x 125 #define DebugPrint(x) 128 #define DEBUG_BUFFER_LENGTH 256 130 #define START_UNIT_TIMEOUT (60 * 4) 132 #define MEDIA_CHANGE_DEFAULT_TIME 1 133 #define MEDIA_CHANGE_TIMEOUT_TIME 300 135 #ifdef ALLOCATE_SRB_FROM_POOL 137 #define ClasspAllocateSrb(ext) \ 138 ExAllocatePoolWithTag(NonPagedPool, \ 139 sizeof(SCSI_REQUEST_BLOCK), \ 142 #define ClasspFreeSrb(ext, srb) ExFreePool((srb)); 146 #define ClasspAllocateSrb(ext) \ 147 ExAllocateFromNPagedLookasideList( \ 148 &((ext)->CommonExtension.SrbLookasideList)) 150 #define ClasspFreeSrb(ext, srb) \ 151 ExFreeToNPagedLookasideList( \ 152 &((ext)->CommonExtension.SrbLookasideList), \ 157 #define SET_FLAG(Flags, Bit) ((Flags) |= (Bit)) 158 #define CLEAR_FLAG(Flags, Bit) ((Flags) &= ~(Bit)) 159 #define TEST_FLAG(Flags, Bit) (((Flags) & (Bit)) != 0) 161 #define CLASS_WORKING_SET_MAXIMUM 2048 163 #define CLASS_INTERPRET_SENSE_INFO2_MAXIMUM_HISTORY_COUNT 30000 165 #define CLASS_SPECIAL_DISABLE_SPIN_DOWN 0x00000001 166 #define CLASS_SPECIAL_DISABLE_SPIN_UP 0x00000002 167 #define CLASS_SPECIAL_NO_QUEUE_LOCK 0x00000008 168 #define CLASS_SPECIAL_DISABLE_WRITE_CACHE 0x00000010 169 #define CLASS_SPECIAL_CAUSE_NOT_REPORTABLE_HACK 0x00000020 170 #if ((NTDDI_VERSION == NTDDI_WIN2KSP3) || (OSVER(NTDDI_VERSION) == NTDDI_WINXP)) 171 #define CLASS_SPECIAL_DISABLE_WRITE_CACHE_NOT_SUPPORTED 0x00000040 173 #define CLASS_SPECIAL_MODIFY_CACHE_UNSUCCESSFUL 0x00000040 174 #define CLASS_SPECIAL_FUA_NOT_SUPPORTED 0x00000080 175 #define CLASS_SPECIAL_VALID_MASK 0x000000FB 176 #define CLASS_SPECIAL_RESERVED (~CLASS_SPECIAL_VALID_MASK) 178 #define DEV_WRITE_CACHE 0x00000001 179 #define DEV_USE_SCSI1 0x00000002 180 #define DEV_SAFE_START_UNIT 0x00000004 181 #define DEV_NO_12BYTE_CDB 0x00000008 182 #define DEV_POWER_PROTECTED 0x00000010 183 #define DEV_USE_16BYTE_CDB 0x00000020 185 #define GUID_CLASSPNP_QUERY_REGINFOEX {0x00e34b11, 0x2444, 0x4745, {0xa5, 0x3d, 0x62, 0x01, 0x00, 0xcd, 0x82, 0xf7}} 186 #define GUID_CLASSPNP_SENSEINFO2 {0x509a8c5f, 0x71d7, 0x48f6, {0x82, 0x1e, 0x17, 0x3c, 0x49, 0xbf, 0x2f, 0x18}} 187 #define GUID_CLASSPNP_WORKING_SET {0x105701b0, 0x9e9b, 0x47cb, {0x97, 0x80, 0x81, 0x19, 0x8a, 0xf7, 0xb5, 0x24}} 188 #define GUID_CLASSPNP_SRB_SUPPORT {0x0a483941, 0xbdfd, 0x4f7b, {0xbe, 0x95, 0xce, 0xe2, 0xa2, 0x16, 0x09, 0x0c}} 190 #define DEFAULT_FAILURE_PREDICTION_PERIOD 60 * 60 * 1 192 #define MAXIMUM_RETRY_FOR_SINGLE_IO_IN_100NS_UNITS (0x3b9aca00) 281 struct _CLASS_PRIVATE_PDO_DATA;
316 (
NTAPI *PCLASS_ADD_DEVICE)(
327 (
NTAPI *PCLASS_START_DEVICE)(
332 (
NTAPI *PCLASS_STOP_DEVICE)(
338 (
NTAPI *PCLASS_INIT_DEVICE)(
343 (
NTAPI *PCLASS_ENUM_DEVICE)(
372 (
NTAPI *PCLASS_QUERY_ID)(
379 (
NTAPI *PCLASS_REMOVE_DEVICE)(
385 (
NTAPI *PCLASS_UNLOAD)(
390 (
NTAPI *PCLASS_QUERY_PNP_CAPABILITIES)(
396 (
NTAPI *PCLASS_TICK)(
401 (
NTAPI *PCLASS_QUERY_WMI_REGINFO_EX)(
409 (
NTAPI *PCLASS_QUERY_WMI_REGINFO)(
416 (
NTAPI *PCLASS_QUERY_WMI_DATABLOCK)(
425 (
NTAPI *PCLASS_SET_WMI_DATABLOCK)(
434 (
NTAPI *PCLASS_SET_WMI_DATAITEM)(
444 (
NTAPI *PCLASS_EXECUTE_WMI_METHOD)(
455 (
NTAPI *PCLASS_WMI_FUNCTION_CONTROL)(
480 (
NTAPI *PCLASS_INTERPRET_SENSE_INFO)(
496 (
NTAPI *PCLASS_COMPRESS_RETRY_HISTORY_DATA)(
537 ULONG InitializationDataSize;
562 _Field_range_(
sizeof(CLASS_INTERPRET_SENSE_INFO),
sizeof(CLASS_INTERPRET_SENSE_INFO))
572 #define CLASS_SRB_SCSI_REQUEST_BLOCK 0x1 573 #define CLASS_SRB_STORAGE_REQUEST_BLOCK 0x2 579 #if (NTDDI_VERSION >= NTDDI_WINXP) 583 #if (NTDDI_VERSION >= NTDDI_VISTA) 590 #if (NTDDI_VERSION >= NTDDI_WIN8) 625 #ifndef ALLOCATE_SRB_FROM_POOL 632 #if (NTDDI_VERSION >= NTDDI_WINXP) 637 #if (NTDDI_VERSION >= NTDDI_VISTA) 656 #if (NTDDI_VERSION >= NTDDI_WINXP) 693 #if (NTDDI_VERSION >= NTDDI_WIN8) 695 #define CLASS_SRBEX_SCSI_CDB16_BUFFER_SIZE (sizeof(STORAGE_REQUEST_BLOCK) + sizeof(STOR_ADDR_BTL8) + sizeof(SRBEX_DATA_SCSI_CDB16)) 696 #define CLASS_SRBEX_NO_SRBEX_DATA_BUFFER_SIZE (sizeof(STORAGE_REQUEST_BLOCK) + sizeof(STOR_ADDR_BTL8)) 702 #if (NTDDI_VERSION >= NTDDI_WIN8) 762 #pragma warning(push) 763 #pragma warning(disable:4214) 809 #pragma warning(push) 810 #pragma warning(disable:4214) 836 #if (NTDDI_VERSION >= NTDDI_WIN10_RS2) 858 #if (NTDDI_VERSION >= NTDDI_WINTHRESHOLD) 882 #if (NTDDI_VERSION >= NTDDI_WIN8) 900 #if (NTDDI_VERSION >= NTDDI_VISTA) 930 #if (NTDDI_VERSION <= NTDDI_WIN2K) 932 #if (SPVER(NTDDI_VERSION) < 2)) 938 ULONG CompletionSuccessCount;
940 ULONG SavedErrorCount;
947 #if (NTDDI_VERSION >= NTDDI_WIN8) 955 #if (NTDDI_VERSION >= NTDDI_WINTHRESHOLD) 956 PADDITIONAL_FDO_DATA AdditionalFdoData;
980 ClassCreateDeviceObject(
1135 ClassInitializeSrbLookasideList(
1143 ClassDeleteSrbLookasideList(
1150 ClassQueryTimeOutRegistryValue(
1166 ClassInvalidateBusRelations(
1173 ClassMarkChildrenMissing(
1180 ClassMarkChildMissing(
1188 _In_z_ PCCHAR DebugMessage,
1196 ClassGetDriverExtension(
1227 ClassUpdateInformationInRegistry(
1265 ClassInitializeMediaChangeDetection(
1273 ClassInitializeTestUnitPolling(
1299 ClassSetFailurePredictionPoll(
1307 ClassNotifyFailurePredicted(
1321 ClassAcquireChildLock(
1371 ClassSetMediaChangeState(
1380 ClassEnableMediaChangeDetection(
1387 ClassDisableMediaChangeDetection(
1394 ClassCleanupMediaChangeDetection(
1400 ClassGetDeviceParameter(
1409 ClassSetDeviceParameter(
1415 #if (NTDDI_VERSION >= NTDDI_VISTA) 1427 ClassSendNotification(
1440 UCHAR SenseDataLength = 0;
1444 #if (NTDDI_VERSION >= NTDDI_WIN8) 1459 return SenseDataLength;
1492 (
NTAPI *PCLASS_SCAN_FOR_SPECIAL_HANDLER)(
1499 ClassScanForSpecial(
__callback PCLASS_COMPRESS_RETRY_HISTORY_DATA Compress
_In_ ULONG _Out_ PULONG BufferUsed
ULONG UnmapGranularityAlignment
COMMON_DEVICE_EXTENSION CommonExtension
_In_ ULONG _In_ BOOLEAN _In_ ULONG UniqueErrorValue
SCSIPORT_API NTSTATUS NTAPI ClassIoCompleteAssociated(PDEVICE_OBJECT DeviceObject, PIRP Irp, PVOID Context)
CLASS_VPD_B2_DATA LBProvisioningData
struct _CLASS_READ_CAPACITY16_DATA CLASS_READ_CAPACITY16_DATA
LARGE_INTEGER PartitionLength
_Must_inspect_result_ _In_ WDFDEVICE _In_ DEVICE_REGISTRY_PROPERTY _In_ ULONG BufferLength
struct _CLASS_FUNCTION_SUPPORT_INFO * PCLASS_FUNCTION_SUPPORT_INFO
_Must_inspect_result_ _In_ WDFWMIINSTANCE _In_opt_ ULONG EventDataSize
enum _MEDIA_CHANGE_DETECTION_STATE MEDIA_CHANGE_DETECTION_STATE
#define _Must_inspect_result_
USHORT OptimalTransferLengthGranularity
SCSIPORT_API BOOLEAN NTAPI ClassInterpretSenseInfo(_In_ PDEVICE_OBJECT DeviceObject, _In_ PSCSI_REQUEST_BLOCK Srb, _In_ UCHAR MajorFunctionCode, _In_ ULONG IoDeviceCode, _In_ ULONG RetryCount, _Out_ NTSTATUS *Status, _Out_opt_ _Deref_out_range_(0, 100) ULONG *RetryInterval)
struct _CLASS_PRIVATE_FDO_DATA * PCLASS_PRIVATE_FDO_DATA
ULONG ScanForSpecialFlags
* PSTORAGE_ADAPTER_DESCRIPTOR
NTSTATUS(NTAPI * PCLASS_READ_WRITE)(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp)
struct _MEDIA_CHANGE_DETECTION_INFO * PMEDIA_CHANGE_DETECTION_INFO
enum _BUS_QUERY_ID_TYPE BUS_QUERY_ID_TYPE
SCSIPORT_API NTSTATUS NTAPI ClassSendSrbSynchronous(_In_ PDEVICE_OBJECT DeviceObject, _Inout_ PSCSI_REQUEST_BLOCK Srb, _In_reads_bytes_opt_(BufferLength) PVOID BufferAddress, _In_ ULONG BufferLength, _In_ BOOLEAN WriteToDevice)
ULONG MaxUnmapBlockDescrCount
static ULONG CountOfSetBitsUlongPtr(ULONG_PTR _X)
struct LOOKASIDE_ALIGN _NPAGED_LOOKASIDE_LIST NPAGED_LOOKASIDE_LIST
_In_ ULONG _In_ ULONG _In_ ULONG Length
_In_ PIRP _In_ ULONG _In_ CLASSENABLEDISABLEFUNCTION Function
_In_ size_t _In_ UCHAR PageMode
_Must_inspect_result_ _In_ WDFIORESLIST _In_ PIO_RESOURCE_DESCRIPTOR Descriptor
_In_ ULONG _In_ BOOLEAN _In_ ULONG _In_ UCHAR _In_ UCHAR _In_ UCHAR Lun
_In_ PSCSI_REQUEST_BLOCK _Out_ NTSTATUS * Status
struct _SRB_HISTORY_ITEM * PSRB_HISTORY_ITEM
_IRQL_requires_same_ _In_opt_ PVOID Argument1
struct GUIDREGINFO * PGUIDREGINFO
SCSIPORT_API VOID NTAPI ClassCheckMediaState(_In_ PFUNCTIONAL_DEVICE_EXTENSION FdoExtension)
BOOLEAN AsynchronousNotificationSupported
PMEDIA_CHANGE_DETECTION_INFO MediaChangeDetectionInfo
_In_ ULONG _In_ BOOLEAN LogError
_In_ PSTORAGE_PROPERTY_ID PropertyId
_Field_range_(1, 30000) ULONG TotalHistoryCount
_Out_ ULONG _Out_ PUNICODE_STRING Name
PCLASS_QUERY_ID ClassQueryId
IN BOOLEAN OUT PSTR Buffer
#define TEST_FLAG(Flags, Bit)
_In_ const GUID _In_ ULONG ExtraDataSize
DISK_GEOMETRY DiskGeometry
#define SRB_FLAGS_FREE_SENSE_BUFFER
SCSIPORT_API ULONG NTAPI ClassModeSense(_In_ PDEVICE_OBJECT DeviceObject, _In_reads_bytes_(Length) PCHAR ModeSenseBuffer, _In_ ULONG Length, _In_ UCHAR PageMode)
_In_ ULONG _In_ BOOLEAN _In_ ULONG _In_ UCHAR PathId
_In_ PIRP _In_ ULONG _In_ ULONG DataItemId
volatile ULONG ChangeRequestCount
struct _CLASS_PRIVATE_PDO_DATA CLASS_PRIVATE_PDO_DATA
_In_ BUS_QUERY_ID_TYPE _In_ PUNICODE_STRING IdString
struct _CLASSPNP_SCAN_FOR_SPECIAL_INFO CLASSPNP_SCAN_FOR_SPECIAL_INFO
_In_ WDFDPC _In_ BOOLEAN Wait
_In_ ULONG _In_ BOOLEAN _In_ ULONG _In_ UCHAR _In_ UCHAR TargetId
_In_z_ PCCHAR _In_ PDEVICE_OBJECT _In_ BOOLEAN IsFdo
static ULONG CountOfSetBitsULong(ULONG _X)
SCSIPORT_API VOID NTAPI ClassReleaseChildLock(_In_ PFUNCTIONAL_DEVICE_EXTENSION FdoExtension)
_Must_inspect_result_ __drv_aliasesMem _In_ PDEVICE_OBJECT _In_opt_ PVOID _In_ ULONG _Out_opt_ PVOID _In_ ULONG _In_ BOOLEAN InternalDeviceIoControl
struct _FUNCTIONAL_DEVICE_EXTENSION * PartitionZeroExtension
IO_COMPLETION_ROUTINE ClassSignalCompletion
#define IRP_MJ_MAXIMUM_FUNCTION
_In_ PIRP _In_ ULONG _In_ ULONG _Out_writes_bytes_(BufferAvail) PUCHAR Buffer)
COMMON_DEVICE_EXTENSION CommonExtension
_Must_inspect_result_ _In_ PDRIVER_OBJECT _In_ PCUNICODE_STRING RegistryPath
_In_ LPGUID _In_ ULONG InstanceIndex
SCSIPORT_API VOID NTAPI ClassReleaseQueue(_In_ PDEVICE_OBJECT DeviceObject)
__callback PCLASS_QUERY_WMI_REGINFO_EX ClassFdoQueryWmiRegInfoEx
ULONG BytesPerLogicalSector
ULONGLONG OptimalTransferCount
CLASS_POWER_OPTIONS Options
PCLASS_INTERPRET_SENSE_INFO2 InterpretSenseInfo
struct _COMPLETION_CONTEXT COMPLETION_CONTEXT
static ULONG CountOfSetBitsULong32(ULONG32 _X)
CLASS_POWER_DOWN_STATE PowerDown
_In_ PIRP _In_ ULONG _In_ ULONG _In_ ULONG _In_ ULONG OutBufferSize
struct _CLASS_VPD_B1_DATA CLASS_VPD_B1_DATA
NTSTATUS(NTAPI * PCLASS_SHUTDOWN_FLUSH)(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp)
SCSIPORT_API VOID NTAPI ClassCompleteRequest(_In_ PDEVICE_OBJECT DeviceObject, _In_ PIRP Irp, _In_ CCHAR PriorityBoost)
IN PVOID IN PVOID IN USHORT IN USHORT Size
C_ASSERT((MAXULONG - sizeof(SRB_HISTORY))/30000 >=sizeof(SRB_HISTORY_ITEM))
BOOLEAN LBProvisioningEnabled
SCSIPORT_API NTSTATUS NTAPI ClassIoComplete(PDEVICE_OBJECT DeviceObject, PIRP Irp, PVOID Context)
CLASS_POWER_UP_STATE PowerUp
_In_z_ PCCHAR _In_ PDEVICE_OBJECT _In_ BOOLEAN _Outptr_result_nullonfailure_ _At_ * DeviceObject(Mem) __drv_aliasesMem) PDEVICE_OBJECT *DeviceObject
ULONG OptimalTransferLength
_In_ PSCSI_REQUEST_BLOCK Srb
_In_ WDFREQUEST _In_ size_t _In_ size_t InputBufferLength
SCSIPORT_API NTSTATUS NTAPI ClassWmiCompleteRequest(_In_ PDEVICE_OBJECT DeviceObject, _Inout_ PIRP Irp, _In_ NTSTATUS Status, _In_ ULONG BufferUsed, _In_ CCHAR PriorityBoost)
PCLASS_CREATE_CLOSE ClassCreateClose
enum _CLASS_DEBUG_LEVEL * PCLASS_DEBUG_LEVEL
struct _CLASS_POWER_CONTEXT * PCLASS_POWER_CONTEXT
PDEVICE_OBJECT PhysicalDeviceObject
BOOLEAN PowerDownInProgress
struct _CLASS_WORKING_SET CLASS_WORKING_SET
PCLASS_DEVICE_CONTROL ClassDeviceControl
PDEVICE_OBJECT DeviceObject
struct _CLASS_VPD_B0_DATA * PCLASS_VPD_B0_DATA
PDEVICE_OBJECT DeviceObject
ULONG DeviceCharacteristics
#define SENSE_BUFFER_SIZE
_In_ size_t _In_ UCHAR _In_ BOOLEAN Use6Byte
static ULONG CountOfSetBitsUChar(UCHAR _X)
_In_opt_ PIRP OriginalRequest
SCSIPORT_API VOID NTAPI ClassSplitRequest(_In_ PDEVICE_OBJECT DeviceObject, _In_ PIRP Irp, _In_ ULONG MaximumBytes)
PCLASS_QUERY_WMI_DATABLOCK ClassQueryWmiDataBlock
static ULONG CountOfSetBitsULong64(ULONG64 _X)
SCSIPORT_API NTSTATUS NTAPI ClassSendIrpSynchronous(_In_ PDEVICE_OBJECT TargetDeviceObject, _In_ PIRP Irp)
SCSIPORT_API VOID NTAPI ClassResetMediaChangeTimer(_In_ PFUNCTIONAL_DEVICE_EXTENSION FdoExtension)
_In_ WDFREQUEST _In_ size_t OutputBufferLength
struct _DICTIONARY DICTIONARY
_In_ PDEVICE_OBJECT DeviceObject
struct _CLASS_READ_CAPACITY16_DATA * PCLASS_READ_CAPACITY16_DATA
struct _DICTIONARY_HEADER * List
_Must_inspect_result_ _In_ PWDFDEVICE_INIT _In_opt_ PCUNICODE_STRING DeviceName
struct _CLASS_POWER_CONTEXT CLASS_POWER_CONTEXT
_In_opt_ PIRP _In_ PSCSI_REQUEST_BLOCK _In_ UCHAR _In_ ULONG _In_ ULONG _In_opt_ SRB_HISTORY * RequestHistory
* PSTORAGE_DEVICE_DESCRIPTOR
NTSTATUS(* NTAPI)(IN PFILE_FULL_EA_INFORMATION EaBuffer, IN ULONG EaLength, OUT PULONG ErrorOffset)
CLASS_FUNCTION_SUPPORT SeekPenaltyProperty
_In_ WDFREQUEST _In_ NTSTATUS _In_ CCHAR PriorityBoost
_Field_size_part_(TotalHistoryCount, UsedHistoryCount) SRB_HISTORY_ITEM History[1]
struct _FUNCTIONAL_DEVICE_EXTENSION * PFUNCTIONAL_DEVICE_EXTENSION
#define CLASS_SRBEX_SCSI_CDB16_BUFFER_SIZE
struct _FUNCTIONAL_DEVICE_EXTENSION FUNCTIONAL_DEVICE_EXTENSION
SCSIPORT_API NTSTATUS NTAPI ClassBuildRequest(_In_ PDEVICE_OBJECT DeviceObject, _In_ PIRP Irp)
#define CLEAR_FLAG(Flags, Bit)
_In_opt_ PIRP _In_ PSCSI_REQUEST_BLOCK _In_ UCHAR _In_ ULONG _In_ ULONG _In_opt_ SRB_HISTORY _Out_ NTSTATUS _Out_ _Deref_out_range_(0, MAXIMUM_RETRY_FOR_SINGLE_IO_IN_100NS_UNITS) LONGLONG *RetryIn100nsUnits)
_In_ BOOLEAN AcquireChildLock
struct _FILE_OBJECT_EXTENSION * PFILE_OBJECT_EXTENSION
DRIVER_STARTIO * PDRIVER_STARTIO
VOID(* PCLASS_ERROR)(IN PDEVICE_OBJECT DeviceObject, IN PSCSI_REQUEST_BLOCK Srb, IN OUT NTSTATUS *Status, IN OUT BOOLEAN *Retry)
PCLASS_INIT_DEVICE ClassInitDevice
ULONG BlockDeviceCharacteristics
KSPIN_LOCK ReleaseQueueSpinLock
PCLASS_SET_WMI_DATABLOCK ClassSetWmiDataBlock
PCLASS_ADD_DEVICE ClassAddDevice
_In_ PIRP _In_ ULONG _In_ ULONG _In_ ULONG _In_ ULONG _In_reads_(_Inexpressible_(max(InBufferSize, OutBufferSize))) PUCHAR Buffer)
_In_z_ PCCHAR ObjectNameBuffer
_Out_ ULONG _Out_ PUNICODE_STRING _Out_ PUNICODE_STRING MofResourceName
static __inline BOOLEAN PORT_ALLOCATED_SENSE(_In_ PFUNCTIONAL_DEVICE_EXTENSION FdoExtension, _In_ PSCSI_REQUEST_BLOCK Srb)
ULONG SoftThresholdEventPending
LARGE_INTEGER TickCountSent
VOID NTAPI ClassSendStartUnit(_In_ PDEVICE_OBJECT DeviceObject)
CLASS_FUNCTION_SUPPORT TrimProperty
_In_ PIRP _In_ ULONG GuidIndex
PCLASS_READ_WRITE ClassReadWriteVerification
struct _CLASS_DRIVER_EXTENSION * PCLASS_DRIVER_EXTENSION
NTSTATUS(NTAPI * PCLASS_POWER_DEVICE)(_In_ PDEVICE_OBJECT DeviceObject, _In_ PIRP Irp)
_Reserved_ PVOID Reserved
ULONG D3IdleTimeoutOverridden
NPAGED_LOOKASIDE_LIST SrbLookasideList
#define _Out_range_(l, h)
PCLASS_QUERY_WMI_REGINFO_EX ClassFdoQueryWmiRegInfoEx
struct _CLASS_WMI_INFO * PCLASS_WMI_INFO
_In_ BUS_QUERY_ID_TYPE IdType
struct _COMMON_DEVICE_EXTENSION * PCOMMON_DEVICE_EXTENSION
enum _MEDIA_CHANGE_DETECTION_STATE MEDIA_CHANGE_DETECTION_STATE
struct _CLASS_VPD_B2_DATA * PCLASS_VPD_B2_DATA
_In_ WDFREQUEST _In_ WDFFILEOBJECT FileObject
CLASS_POWER_DOWN_STATE2 PowerDown2
struct _DICTIONARY_HEADER * PDICTIONARY_HEADER
UNICODE_STRING DeviceName
_Must_inspect_result_ _In_ PDRIVER_OBJECT DriverObject
struct _CLASS_INTERPRET_SENSE_INFO2 CLASS_INTERPRET_SENSE_INFO2
SCSIPORT_API VOID NTAPI ClassReleaseRemoveLock(_In_ PDEVICE_OBJECT DeviceObject, PIRP Tag)
LARGE_INTEGER StartingOffset
PDEVICE_OBJECT DeviceObject
enum _DEVICE_POWER_STATE DEVICE_POWER_STATE
SCSIPORT_API NTSTATUS NTAPI ClassCheckVerifyComplete(PDEVICE_OBJECT DeviceObject, PIRP Irp, PVOID Context)
struct _PHYSICAL_DEVICE_EXTENSION * PPHYSICAL_DEVICE_EXTENSION
_In_ PIRP _In_ ULONG _In_ ULONG MethodId
LARGE_INTEGER TickCountCompleted
SCSIPORT_API NTSTATUS NTAPI ClassInternalIoControl(PDEVICE_OBJECT DeviceObject, PIRP Irp)
ULONG BytesOffsetForSectorAlignment
#define __drv_allocatesMem(kind)
#define _Pre_equal_to_(e)
_In_ PIRP _In_ ULONG _In_ ULONG _In_ ULONG InBufferSize
PCLASS_POWER_DEVICE ClassPowerDevice
CLASS_WMI_INFO ClassWmiInfo
PCLASS_START_DEVICE ClassStartDevice
CLASS_READ_CAPACITY16_DATA ReadCapacity16Data
_Must_inspect_result_ _In_ WDFOBJECT _In_ CONST GUID * Guid
struct _CLASS_VPD_B2_DATA CLASS_VPD_B2_DATA
SCSIPORT_API ULONG NTAPI ClassAcquireRemoveLockEx(_In_ PDEVICE_OBJECT DeviceObject, PVOID Tag, _In_ PCSTR File, _In_ ULONG Line)
struct _CLASS_VPD_ECOP_BLOCK_DEVICE_ROD_LIMITS * PCLASS_VPD_ECOP_BLOCK_DEVICE_ROD_LIMITS
PCLASS_QUERY_WMI_REGINFO_EX ClassPdoQueryWmiRegInfoEx
struct _CLASS_QUERY_WMI_REGINFO_EX_LIST CLASS_QUERY_WMI_REGINFO_EX_LIST
BOOLEAN ReleaseQueueNeeded
static __inline VOID FREE_PORT_ALLOCATED_SENSE_BUFFER(_In_ PFUNCTIONAL_DEVICE_EXTENSION FdoExtension, _In_ PSCSI_REQUEST_BLOCK Srb)
PSTORAGE_ADAPTER_DESCRIPTOR AdapterDescriptor
static DRIVER_STARTIO ClassStartIo
PSTORAGE_DEVICE_DESCRIPTOR DeviceDescriptor
UNICODE_STRING MountedDeviceInterfaceName
enum FAILURE_PREDICTION_METHOD * PFAILURE_PREDICTION_METHOD
struct _FILE_OBJECT_EXTENSION FILE_OBJECT_EXTENSION
struct _PHYSICAL_DEVICE_EXTENSION * ChildList
PCLASS_UNLOAD ClassUnload
enum _STORAGE_PROPERTY_ID * PSTORAGE_PROPERTY_ID
_In_opt_ PIRP _In_ PSCSI_REQUEST_BLOCK _In_ UCHAR MajorFunctionCode
SCSIPORT_API PVOID NTAPI ClassFindModePage(_In_reads_bytes_(Length) PCHAR ModeSenseBuffer, _In_ ULONG Length, _In_ UCHAR PageMode, _In_ BOOLEAN Use6Byte)
struct _CLASS_PRIVATE_COMMON_DATA * PCLASS_PRIVATE_COMMON_DATA
KEVENT EjectSynchronizationEvent
CLASS_FUNCTION_SUPPORT HwFirmwareGetInfoSupport
struct _COMMON_DEVICE_EXTENSION COMMON_DEVICE_EXTENSION
struct _CLASS_QUERY_WMI_REGINFO_EX_LIST * PCLASS_QUERY_WMI_REGINFO_EX_LIST
PCLASS_SHUTDOWN_FLUSH ClassShutdownFlush
PDEVICE_OBJECT DeviceObject
CLASS_POWER_CONTEXT PowerContext
struct _COMPLETION_CONTEXT * PCOMPLETION_CONTEXT
_Must_inspect_result_ _In_ WDFDEVICE Fdo
_In_ PCHAR _In_ ULONG _In_reads_bytes_opt_(InquiryDataLength) PINQUIRYDATA InquiryData
_In_ PIRP _In_ ULONG _In_ CLASSENABLEDISABLEFUNCTION _In_ BOOLEAN Enable
struct _CLASS_VPD_B1_DATA * PCLASS_VPD_B1_DATA
BOOLEAN RegAccessAlignmentQueryNotSupported
#define _Post_satisfies_(e)
PIO_COMPLETION_ROUTINE CompletionRoutine
ULONG NoVerifyDuringIdlePower
_In_opt_ PIRP _In_ PSCSI_REQUEST_BLOCK _In_ UCHAR _In_ ULONG _In_ ULONG PreviousRetryCount
__callback PCLASS_QUERY_WMI_REGINFO_EX ClassPdoQueryWmiRegInfoEx
struct _CLASS_DEV_INFO * PCLASS_DEV_INFO
ULONG BytesPerPhysicalSector
_In_ PSCSI_REQUEST_BLOCK _Out_ NTSTATUS _Inout_ BOOLEAN * Retry
CLASSENABLEDISABLEFUNCTION
PSTORAGE_HW_FIRMWARE_INFO HwFirmwareInfo
PCLASS_ENUM_DEVICE ClassEnumerateDevice
_In_ PVOID _In_ PCLASS_INIT_DATA InitializationData
PCLASS_DRIVER_EXTENSION DriverExtension
struct _SRB_HISTORY_ITEM SRB_HISTORY_ITEM
PCLASS_WORKING_SET WorkingSet
_In_z_ PCCHAR _In_ PDEVICE_OBJECT LowerDeviceObject
CLASS_VPD_B1_DATA DeviceCharacteristicsData
#define _Outptr_result_nullonfailure_
_In_ WDFREQUEST _In_ size_t _In_ size_t _In_ ULONG IoControlCode
_In_ PIRP _In_ ULONG _In_ ULONG BufferAvail
VOID NTAPI ClassSendDeviceIoControlSynchronous(_In_ ULONG IoControlCode, _In_ PDEVICE_OBJECT TargetDeviceObject, _Inout_updates_opt_(_Inexpressible_(max(InputBufferLength, OutputBufferLength))) PVOID Buffer, _In_ ULONG InputBufferLength, _In_ ULONG OutputBufferLength, _In_ BOOLEAN InternalDeviceIoControl, _Out_ PIO_STATUS_BLOCK IoStatus)
CLASS_FUNCTION_SUPPORT TrimProcess
_In_opt_ PWSTR SubkeyName
CLASS_VPD_B0_DATA BlockLimitsData
SCSIPORT_API PVPB NTAPI ClassGetVpb(_In_ PDEVICE_OBJECT DeviceObject)
USHORT MediumRotationRate
_Must_inspect_result_ _In_ WDFDEVICE _In_ BOOLEAN _In_opt_ PVOID Tag
struct _CLASS_VPD_ECOP_BLOCK_DEVICE_ROD_LIMITS CLASS_VPD_ECOP_BLOCK_DEVICE_ROD_LIMITS
PCLASS_STOP_DEVICE ClassStopDevice
_IRQL_requires_max_(DISPATCH_LEVEL) typedef VOID(NTAPI *PCLASS_ERROR)(_In_ PDEVICE_OBJECT DeviceObject
#define _ANONYMOUS_STRUCT
SCSIPORT_API NTSTATUS NTAPI ClassSpinDownPowerHandler(_In_ PDEVICE_OBJECT DeviceObject, _In_ PIRP Irp)
ULONG BlockDeviceRODLimits
BOOLEAN ReleaseQueueInProgress
_In_ PSCSI_REQUEST_BLOCK _In_opt_ PVOID _In_ ULONG _In_ BOOLEAN WriteToDevice
_In_ FAILURE_PREDICTION_METHOD _In_ ULONG PollingPeriod
LONG RemoveTrackingUntrackedCount
struct _CLASS_PRIVATE_PDO_DATA * PCLASS_PRIVATE_PDO_DATA
DRIVER_DISPATCH * PDRIVER_DISPATCH
PCLASS_SET_WMI_DATAITEM ClassSetWmiDataItem
PCLASS_REMOVE_DEVICE ClassRemoveDevice
#define MAXIMUM_RETRY_FOR_SINGLE_IO_IN_100NS_UNITS
struct _CLASS_INIT_DATA * PCLASS_INIT_DATA
#define SRB_FLAGS_PORT_DRIVER_ALLOCSENSE
BOOLEAN IsSrbLookasideListInitialized
_In_ LPGUID _In_ PVOID Data
struct _FAILURE_PREDICTION_INFO * FailurePredictionInfo
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
struct _CLASS_VPD_B0_DATA CLASS_VPD_B0_DATA
BOOLEAN ReleaseQueueIrpFromPool
CLASS_FUNCTION_SUPPORT AccessAlignmentProperty
enum _MEDIA_CHANGE_DETECTION_STATE * PMEDIA_CHANGE_DETECTION_STATE
ULONG HibernationPathCount
PCLASS_PRIVATE_COMMON_DATA PrivateCommonData
ULONGLONG MaximumTokenTransferSize
_In_opt_ PWSTR _In_ PWSTR ParameterName
SCSIPORT_API NTSTATUS NTAPI ClassForwardIrpSynchronous(_In_ PCOMMON_DEVICE_EXTENSION CommonExtension, _In_ PIRP Irp)
CLASS_VPD_ECOP_BLOCK_DEVICE_ROD_LIMITS BlockDeviceRODLimitsData
PCLASS_PRIVATE_PDO_DATA PrivatePdoData
ULONG MaximumInactivityTimer
_In_ PIRP _In_ ULONG _In_ ULONG _In_reads_bytes_(BufferSize) PUCHAR Buffer)
struct _PHYSICAL_DEVICE_EXTENSION PHYSICAL_DEVICE_EXTENSION
ULONG MillisecondsDelayOnRetry
_IRQL_requires_(DISPATCH_LEVEL) typedef VOID(NTAPI *PCLASS_TICK)(_In_ PDEVICE_OBJECT DeviceObject)
SCSIPORT_API VOID ClassDebugPrint(_In_ CLASS_DEBUG_LEVEL DebugPrintLevel, _In_z_ PCCHAR DebugMessage,...)
ULONG OptimalUnmapGranularity
PDEVICE_OBJECT LowerDeviceObject
FAILURE_PREDICTION_METHOD
struct _CLASS_INTERPRET_SENSE_INFO2 * PCLASS_INTERPRET_SENSE_INFO2
ULONG ZonedBlockDeviceCharacteristics
SCSIPORT_API NTSTATUS NTAPI ClassAsynchronousCompletion(PDEVICE_OBJECT DeviceObject, PIRP Irp, PVOID Event)
_In_ BOOLEAN AllowDriveToSleep
IO_COMPLETION_ROUTINE * PIO_COMPLETION_ROUTINE
NTSTATUS(NTAPI * PCLASS_CREATE_CLOSE)(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp)
_In_ PCHAR _In_ ULONG _In_ ULONG InquiryDataLength
STORAGE_REQUEST_BLOCK SrbEx
_In_ ULONG NumberElements
_Must_inspect_result_ SCSIPORT_API NTSTATUS NTAPI ClassReadDriveCapacity(_In_ PDEVICE_OBJECT DeviceObject)
BOOLEAN LBProvisioningReadZeros
ULONG_PTR ClassDriverUse[4]
ULONG ChildLockAcquisitionCount
_MEDIA_CHANGE_DETECTION_STATE
SCSIPORT_API NTSTATUS NTAPI ClassDeviceControl(_In_ PDEVICE_OBJECT DeviceObject, _Inout_ PIRP Irp)
struct _DICTIONARY * PDICTIONARY
struct _CLASS_POWER_OPTIONS CLASS_POWER_OPTIONS
NTSTATUS NTAPI ClassStopUnitPowerHandler(_In_ PDEVICE_OBJECT DeviceObject, _In_ PIRP Irp)
struct _CLASS_DEV_INFO CLASS_DEV_INFO
__in UCHAR __in POWER_STATE __in_opt PVOID __in PIO_STATUS_BLOCK IoStatus
ULONG EnumerationInterlock
USHORT MaximumRangeDescriptors
PCLASS_EXECUTE_WMI_METHOD ClassExecuteWmiMethod
VOID History(INT, LPTSTR)
DICTIONARY FileObjectDictionary
PDRIVER_DISPATCH * DispatchTable
struct _CLASSPNP_SCAN_FOR_SPECIAL_INFO * PCLASSPNP_SCAN_FOR_SPECIAL_INFO
KSPIN_LOCK RemoveTrackingSpinlock
enum _CLASS_DEBUG_LEVEL CLASS_DEBUG_LEVEL
struct _CLASS_FUNCTION_SUPPORT_INFO CLASS_FUNCTION_SUPPORT_INFO
NTSTATUS(NTAPI * PCLASS_DEVICE_CONTROL)(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp)
FORCEINLINE UCHAR GET_FDO_EXTENSON_SENSE_DATA_LENGTH(_In_ PFUNCTIONAL_DEVICE_EXTENSION FdoExtension)
_In_ PCHAR _In_ ULONG DeviceNumber
IN PSCSI_REQUEST_BLOCK Srb
SCSIPORT_API NTSTATUS NTAPI ClassSendSrbAsynchronous(_In_ PDEVICE_OBJECT DeviceObject, _Inout_ PSCSI_REQUEST_BLOCK Srb, _In_ PIRP Irp, _In_reads_bytes_opt_(BufferLength) __drv_aliasesMem PVOID BufferAddress, _In_ ULONG BufferLength, _In_ BOOLEAN WriteToDevice)
ULONG DefaultInactivityTimer
_In_ FAILURE_PREDICTION_METHOD FailurePredictionMethod
#define _Inout_updates_opt_(s)
IN OUT PVCB IN PDEVICE_OBJECT TargetDeviceObject
_In_ PDEVICE_CAPABILITIES Capabilities
struct _CLASS_WORKING_SET * PCLASS_WORKING_SET
struct _CLASS_WMI_INFO CLASS_WMI_INFO
ULONG MaximumTransferLength
CLASS_POWER_DOWN_STATE3 PowerDown3
struct _CLASS_POWER_OPTIONS * PCLASS_POWER_OPTIONS
PCLASS_WMI_FUNCTION_CONTROL ClassWmiFunctionControl
SENSE_DATA NormalizedSenseData
_In_ CLASSPNP_SCAN_FOR_SPECIAL_INFO DeviceList[]
ULONG DeviceExtensionSize
__callback PCLASS_INTERPRET_SENSE_INFO Interpret
SCSI_REQUEST_BLOCK ReleaseQueueSrb
_In_ PIRP _In_ ULONG _In_ ULONG BufferSize
_In_opt_ PWSTR _In_ PWSTR _Inout_ PULONG ParameterValue
FILE_OBJECT_EXTENSION KernelModeMcnContext
PCLASS_QUERY_WMI_REGINFO ClassQueryWmiRegInfo
_In_opt_ PIRP _In_ PSCSI_REQUEST_BLOCK _In_ UCHAR _In_ ULONG IoDeviceCode
_In_ WDFMEMORY _Out_opt_ size_t * BufferSize
struct _CLASS_DRIVER_EXTENSION CLASS_DRIVER_EXTENSION
DEVICE_POWER_STATE DevicePowerState
_In_ PSCSI_REQUEST_BLOCK _In_opt_ PVOID BufferAddress
PCLASS_QUERY_PNP_CAPABILITIES ClassQueryPnpCapabilities