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
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)
281struct _CLASS_PRIVATE_PDO_DATA;
308(
NTAPI *PCLASS_ERROR)(
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)(
348(
NTAPI *PCLASS_READ_WRITE)(
354(
NTAPI *PCLASS_DEVICE_CONTROL)(
360(
NTAPI *PCLASS_SHUTDOWN_FLUSH)(
366(
NTAPI *PCLASS_CREATE_CLOSE)(
372(
NTAPI *PCLASS_QUERY_ID)(
379(
NTAPI *PCLASS_REMOVE_DEVICE)(
385(
NTAPI *PCLASS_UNLOAD)(
390(
NTAPI *PCLASS_QUERY_PNP_CAPABILITIES)(
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)(
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)
763#pragma warning(disable:4214)
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;
980ClassCreateDeviceObject(
1135ClassInitializeSrbLookasideList(
1143ClassDeleteSrbLookasideList(
1150ClassQueryTimeOutRegistryValue(
1166ClassInvalidateBusRelations(
1173ClassMarkChildrenMissing(
1180ClassMarkChildMissing(
1188 _In_z_ PCCHAR DebugMessage,
1196ClassGetDriverExtension(
1227ClassUpdateInformationInRegistry(
1265ClassInitializeMediaChangeDetection(
1273ClassInitializeTestUnitPolling(
1299ClassSetFailurePredictionPoll(
1307ClassNotifyFailurePredicted(
1321ClassAcquireChildLock(
1371ClassSetMediaChangeState(
1380ClassEnableMediaChangeDetection(
1387ClassDisableMediaChangeDetection(
1394ClassCleanupMediaChangeDetection(
1400ClassGetDeviceParameter(
1409ClassSetDeviceParameter(
1415#if (NTDDI_VERSION >= NTDDI_VISTA)
1427ClassSendNotification(
1440 UCHAR SenseDataLength = 0;
1444#if (NTDDI_VERSION >= NTDDI_WIN8)
1459 return SenseDataLength;
1492(
NTAPI *PCLASS_SCAN_FOR_SPECIAL_HANDLER)(
VOID History(INT dir, LPTSTR commandline)
PDEVICE_OBJECT PhysicalDeviceObject
_In_ PSCSI_REQUEST_BLOCK Srb
_In_opt_ PWSTR _In_ PWSTR ParameterName
_In_ size_t _In_ UCHAR _In_ BOOLEAN Use6Byte
FORCEINLINE BOOLEAN PORT_ALLOCATED_SENSE(_In_ PCDROM_DEVICE_EXTENSION DeviceExtension, _In_ PSCSI_REQUEST_BLOCK Srb)
_In_ size_t _In_ UCHAR PageMode
FORCEINLINE VOID FREE_PORT_ALLOCATED_SENSE_BUFFER(_In_ PCDROM_DEVICE_EXTENSION DeviceExtension, _In_ PSCSI_REQUEST_BLOCK Srb)
struct _COMPLETION_CONTEXT COMPLETION_CONTEXT
_In_ PSCSI_REQUEST_BLOCK _In_opt_ PVOID BufferAddress
_In_ PSTORAGE_PROPERTY_ID PropertyId
_In_opt_ PWSTR _In_ PWSTR _Inout_ PULONG ParameterValue
_In_ PSCSI_REQUEST_BLOCK _In_opt_ PVOID _In_ ULONG _In_ BOOLEAN WriteToDevice
struct _COMPLETION_CONTEXT * PCOMPLETION_CONTEXT
_In_ CDROM_SCAN_FOR_SPECIAL_INFO _In_ PCDROM_SCAN_FOR_SPECIAL_HANDLER Function
_In_opt_ PWSTR SubkeyName
#define TEST_FLAG(Flags, Bit)
#define CLEAR_FLAG(Flags, Bit)
_MEDIA_CHANGE_DETECTION_STATE
enum _MEDIA_CHANGE_DETECTION_STATE MEDIA_CHANGE_DETECTION_STATE
#define SENSE_BUFFER_SIZE
VOID NTAPI ClassResetMediaChangeTimer(_In_ PFUNCTIONAL_DEVICE_EXTENSION FdoExtension)
VOID NTAPI ClassCheckMediaState(_In_ PFUNCTIONAL_DEVICE_EXTENSION FdoExtension)
static ULONG CountOfSetBitsUChar(UCHAR _X)
_In_ ULONG _In_ BOOLEAN _In_ ULONG _In_ UCHAR _In_ UCHAR _In_ UCHAR Lun
struct _CLASS_VPD_B1_DATA CLASS_VPD_B1_DATA
_In_ PSCSI_REQUEST_BLOCK Srb
_In_ PIRP _In_ ULONG _In_ CLASSENABLEDISABLEFUNCTION _In_ BOOLEAN Enable
static ULONG CountOfSetBitsULong(ULONG _X)
IO_COMPLETION_ROUTINE ClassSignalCompletion
_In_ PIRP _In_ ULONG _In_ ULONG DataItemId
struct _CLASS_PRIVATE_COMMON_DATA * PCLASS_PRIVATE_COMMON_DATA
_In_ PDEVICE_CAPABILITIES Capabilities
_In_ BUS_QUERY_ID_TYPE IdType
_In_ PSCSI_REQUEST_BLOCK _Out_ NTSTATUS _Inout_ BOOLEAN * Retry
_In_ PVOID _In_ PCLASS_INIT_DATA InitializationData
_In_ ULONG _In_ BOOLEAN _In_ ULONG _In_ UCHAR PathId
enum _CLASS_DEBUG_LEVEL CLASS_DEBUG_LEVEL
struct _PHYSICAL_DEVICE_EXTENSION PHYSICAL_DEVICE_EXTENSION
struct _SRB_HISTORY_ITEM * PSRB_HISTORY_ITEM
struct _CLASSPNP_SCAN_FOR_SPECIAL_INFO * PCLASSPNP_SCAN_FOR_SPECIAL_INFO
FORCEINLINE UCHAR GET_FDO_EXTENSON_SENSE_DATA_LENGTH(_In_ PFUNCTIONAL_DEVICE_EXTENSION FdoExtension)
#define MAXIMUM_RETRY_FOR_SINGLE_IO_IN_100NS_UNITS
NTSTATUS(NTAPI * PCLASS_POWER_DEVICE)(_In_ PDEVICE_OBJECT DeviceObject, _In_ PIRP Irp)
_In_ LPGUID _In_ ULONG InstanceIndex
struct _CLASS_VPD_ECOP_BLOCK_DEVICE_ROD_LIMITS * PCLASS_VPD_ECOP_BLOCK_DEVICE_ROD_LIMITS
_In_ PIRP _In_ ULONG _In_ ULONG MethodId
_In_ PIRP _In_ ULONG _In_ ULONG BufferSize
enum _CLASS_DEBUG_LEVEL * PCLASS_DEBUG_LEVEL
struct _FILE_OBJECT_EXTENSION FILE_OBJECT_EXTENSION
_In_z_ PCCHAR _In_ PDEVICE_OBJECT LowerDeviceObject
@ PowerDownDeviceStopped2
@ PowerDownDeviceFlushed2
@ PowerDownDeviceInitial2
@ PowerDownDeviceUnlocked2
struct _CLASSPNP_SCAN_FOR_SPECIAL_INFO CLASSPNP_SCAN_FOR_SPECIAL_INFO
_In_ PIRP _In_ ULONG _In_ ULONG _In_ ULONG InBufferSize
struct _CLASS_VPD_B1_DATA * PCLASS_VPD_B1_DATA
@ PowerDownDeviceUnlocked
struct _CLASS_POWER_CONTEXT * PCLASS_POWER_CONTEXT
static ULONG CountOfSetBitsULong32(ULONG32 _X)
_In_z_ PCCHAR _In_ PDEVICE_OBJECT _In_ BOOLEAN IsFdo
_In_ FAILURE_PREDICTION_METHOD FailurePredictionMethod
SCSIPORT_API NTSTATUS NTAPI ClassSpinDownPowerHandler(_In_ PDEVICE_OBJECT DeviceObject, _In_ PIRP Irp)
_In_ PCHAR _In_ ULONG _In_ ULONG InquiryDataLength
struct _CLASS_PRIVATE_FDO_DATA * PCLASS_PRIVATE_FDO_DATA
struct GUIDREGINFO * PGUIDREGINFO
struct _CLASS_DEV_INFO * PCLASS_DEV_INFO
struct _CLASS_READ_CAPACITY16_DATA * PCLASS_READ_CAPACITY16_DATA
_In_opt_ PIRP _In_ PSCSI_REQUEST_BLOCK _In_ UCHAR MajorFunctionCode
enum _MEDIA_CHANGE_DETECTION_STATE * PMEDIA_CHANGE_DETECTION_STATE
struct _FUNCTIONAL_DEVICE_EXTENSION * PFUNCTIONAL_DEVICE_EXTENSION
_In_ PIRP _In_ ULONG _In_ CLASSENABLEDISABLEFUNCTION Function
struct _CLASS_POWER_CONTEXT CLASS_POWER_CONTEXT
struct _DICTIONARY * PDICTIONARY
struct _DICTIONARY DICTIONARY
struct _CLASS_VPD_B0_DATA CLASS_VPD_B0_DATA
@ PowerDownDeviceUnlocked3
@ PowerDownDeviceFlushed3
@ PowerDownDeviceInitial3
@ PowerDownDeviceStopped3
@ PowerDownDeviceQuiesced3
struct _CLASS_FUNCTION_SUPPORT_INFO CLASS_FUNCTION_SUPPORT_INFO
struct _CLASS_FUNCTION_SUPPORT_INFO * PCLASS_FUNCTION_SUPPORT_INFO
_In_ BOOLEAN AcquireChildLock
#define CLASS_SRBEX_SCSI_CDB16_BUFFER_SIZE
struct _CLASS_DEV_INFO CLASS_DEV_INFO
_In_ ULONG _In_ BOOLEAN _In_ ULONG _In_ UCHAR _In_ UCHAR TargetId
struct _CLASS_VPD_B2_DATA CLASS_VPD_B2_DATA
_In_ PIRP _In_ ULONG GuidIndex
_In_ ULONG _In_ BOOLEAN LogError
_Out_ ULONG _Out_ PUNICODE_STRING Name
enum FAILURE_PREDICTION_METHOD * PFAILURE_PREDICTION_METHOD
struct _CLASS_PRIVATE_PDO_DATA CLASS_PRIVATE_PDO_DATA
struct _CLASS_VPD_B2_DATA * PCLASS_VPD_B2_DATA
_In_ PIRP _In_ ULONG _In_ ULONG _In_ ULONG _In_ ULONG OutBufferSize
struct _SRB_HISTORY_ITEM SRB_HISTORY_ITEM
_In_ BUS_QUERY_ID_TYPE _In_ PUNICODE_STRING IdString
static ULONG CountOfSetBitsULong64(ULONG64 _X)
_In_ ULONG _In_ BOOLEAN _In_ ULONG UniqueErrorValue
struct _CLASS_WMI_INFO CLASS_WMI_INFO
_In_ PSCSI_REQUEST_BLOCK _Out_ NTSTATUS * Status
CLASSENABLEDISABLEFUNCTION
_In_ PCHAR _In_ ULONG DeviceNumber
enum _MEDIA_CHANGE_DETECTION_STATE MEDIA_CHANGE_DETECTION_STATE
struct _CLASS_POWER_OPTIONS CLASS_POWER_OPTIONS
struct _DICTIONARY_HEADER * PDICTIONARY_HEADER
struct _CLASS_QUERY_WMI_REGINFO_EX_LIST * PCLASS_QUERY_WMI_REGINFO_EX_LIST
struct _PHYSICAL_DEVICE_EXTENSION * PPHYSICAL_DEVICE_EXTENSION
struct _CLASS_PRIVATE_PDO_DATA * PCLASS_PRIVATE_PDO_DATA
struct _CLASS_INIT_DATA * PCLASS_INIT_DATA
_In_opt_ PIRP _In_ PSCSI_REQUEST_BLOCK _In_ UCHAR _In_ ULONG IoDeviceCode
struct _CLASS_QUERY_WMI_REGINFO_EX_LIST CLASS_QUERY_WMI_REGINFO_EX_LIST
struct _FILE_OBJECT_EXTENSION * PFILE_OBJECT_EXTENSION
_In_ PIRP _In_ ULONG _In_ ULONG BufferAvail
struct _MEDIA_CHANGE_DETECTION_INFO * PMEDIA_CHANGE_DETECTION_INFO
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)
_In_opt_ PIRP _In_ PSCSI_REQUEST_BLOCK _In_ UCHAR _In_ ULONG _In_ ULONG _In_opt_ SRB_HISTORY * RequestHistory
struct _FUNCTIONAL_DEVICE_EXTENSION FUNCTIONAL_DEVICE_EXTENSION
_In_z_ PCCHAR ObjectNameBuffer
_In_ FAILURE_PREDICTION_METHOD _In_ ULONG PollingPeriod
_In_ BOOLEAN AllowDriveToSleep
_In_opt_ PIRP OriginalRequest
_Out_ ULONG _Out_ PUNICODE_STRING _Out_ PUNICODE_STRING MofResourceName
struct _CLASS_POWER_OPTIONS * PCLASS_POWER_OPTIONS
struct _CLASS_VPD_B0_DATA * PCLASS_VPD_B0_DATA
struct _CLASS_VPD_ECOP_BLOCK_DEVICE_ROD_LIMITS CLASS_VPD_ECOP_BLOCK_DEVICE_ROD_LIMITS
_In_ const GUID _In_ ULONG ExtraDataSize
FAILURE_PREDICTION_METHOD
_In_ ULONG NumberElements
struct _CLASS_READ_CAPACITY16_DATA CLASS_READ_CAPACITY16_DATA
struct _CLASS_WMI_INFO * PCLASS_WMI_INFO
static ULONG CountOfSetBitsUlongPtr(ULONG_PTR _X)
_In_opt_ PIRP _In_ PSCSI_REQUEST_BLOCK _In_ UCHAR _In_ ULONG _In_ ULONG PreviousRetryCount
SCSIPORT_API NTSTATUS NTAPI ClassWmiCompleteRequest(_In_ PDEVICE_OBJECT DeviceObject, _Inout_ PIRP Irp, _In_ NTSTATUS Status, _In_ ULONG BufferUsed, _In_ CCHAR PriorityBoost)
struct _COMMON_DEVICE_EXTENSION * PCOMMON_DEVICE_EXTENSION
PVOID NTAPI ClassFindModePage(_In_reads_bytes_(Length) PCHAR ModeSenseBuffer, _In_ ULONG Length, _In_ UCHAR PageMode, _In_ BOOLEAN Use6Byte)
NTSTATUS NTAPI ClassIoComplete(IN PDEVICE_OBJECT Fdo, IN PIRP Irp, IN PVOID Context)
ULONG NTAPI ClassModeSense(_In_ PDEVICE_OBJECT Fdo, _In_reads_bytes_(Length) PCHAR ModeSenseBuffer, _In_ ULONG Length, _In_ UCHAR PageMode)
NTSTATUS NTAPI ClassInternalIoControl(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp)
NTSTATUS NTAPI ClassSendSrbSynchronous(_In_ PDEVICE_OBJECT Fdo, _Inout_ PSCSI_REQUEST_BLOCK _Srb, _In_reads_bytes_opt_(BufferLength) PVOID BufferAddress, _In_ ULONG BufferLength, _In_ BOOLEAN WriteToDevice)
PVPB NTAPI ClassGetVpb(_In_ PDEVICE_OBJECT DeviceObject)
IO_COMPLETION_ROUTINE ClassCheckVerifyComplete
VOID NTAPI ClassReleaseChildLock(_In_ PFUNCTIONAL_DEVICE_EXTENSION FdoExtension)
VOID NTAPI ClassSendStartUnit(_In_ PDEVICE_OBJECT Fdo)
NTSTATUS NTAPI ClassAsynchronousCompletion(PDEVICE_OBJECT DeviceObject, PIRP Irp, PVOID Context)
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)
_Must_inspect_result_ NTSTATUS NTAPI ClassReadDriveCapacity(_In_ PDEVICE_OBJECT Fdo)
VOID NTAPI ClassReleaseQueue(_In_ PDEVICE_OBJECT Fdo)
BOOLEAN NTAPI ClassInterpretSenseInfo(_In_ PDEVICE_OBJECT Fdo, _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)
NTSTATUS NTAPI ClassSendIrpSynchronous(_In_ PDEVICE_OBJECT TargetDeviceObject, _In_ PIRP Irp)
NTSTATUS NTAPI ClassForwardIrpSynchronous(_In_ PCOMMON_DEVICE_EXTENSION CommonExtension, _In_ PIRP Irp)
VOID ClassDebugPrint(_In_ CLASS_DEBUG_LEVEL DebugPrintLevel, _In_z_ PCCHAR DebugMessage,...)
VOID NTAPI ClassCompleteRequest(_In_ PDEVICE_OBJECT DeviceObject, _In_ PIRP Irp, _In_ CCHAR PriorityBoost)
VOID NTAPI ClassReleaseRemoveLock(_In_ PDEVICE_OBJECT DeviceObject, _In_opt_ PIRP Tag)
ULONG NTAPI ClassAcquireRemoveLockEx(_In_ PDEVICE_OBJECT DeviceObject, _In_ PVOID Tag, _In_ PCSTR File, _In_ ULONG Line)
NTSTATUS NTAPI ClassIoCompleteAssociated(IN PDEVICE_OBJECT Fdo, IN PIRP Irp, IN PVOID Context)
VOID NTAPI ClassSplitRequest(_In_ PDEVICE_OBJECT Fdo, _In_ PIRP Irp, _In_ ULONG MaximumBytes)
NTSTATUS NTAPI ClassBuildRequest(_In_ PDEVICE_OBJECT Fdo, _In_ PIRP Irp)
NTSTATUS NTAPI ClassStopUnitPowerHandler(_In_ PDEVICE_OBJECT DeviceObject, _In_ PIRP Irp)
#define SRB_FLAGS_FREE_SENSE_BUFFER
#define SRB_FLAGS_PORT_DRIVER_ALLOCSENSE
#define _IRQL_requires_max_(irql)
#define __drv_allocatesMem(kind)
#define _IRQL_requires_(irql)
IN OUT PVCB IN PDEVICE_OBJECT TargetDeviceObject
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
static DRIVER_DISPATCH ClassDeviceControl
struct _CLASS_DRIVER_EXTENSION * PCLASS_DRIVER_EXTENSION
struct _CLASS_DRIVER_EXTENSION CLASS_DRIVER_EXTENSION
static LRESULT Compress(CodecInfo *pi, ICCOMPRESS *lpic, DWORD dwSize)
__in UCHAR __in POWER_STATE __in_opt PVOID __in PIO_STATUS_BLOCK IoStatus
#define _In_reads_bytes_(s)
#define _Field_size_part_(s, c)
#define _Deref_out_range_(l, h)
#define _Pre_equal_to_(e)
#define _Out_range_(l, h)
#define _Must_inspect_result_
#define _Post_satisfies_(e)
#define _Field_range_(l, h)
#define _Out_writes_bytes_(s)
#define _Outptr_result_nullonfailure_
#define _Inout_updates_opt_(s)
#define _In_reads_bytes_opt_(s)
#define _ANONYMOUS_STRUCT
_In_ ULONG _In_ ULONG _In_ ULONG Length
* PSTORAGE_DEVICE_DESCRIPTOR
enum _STORAGE_PROPERTY_ID * PSTORAGE_PROPERTY_ID
* PSTORAGE_ADAPTER_DESCRIPTOR
enum _DEVICE_POWER_STATE DEVICE_POWER_STATE
ULONG DeviceCharacteristics
PCLASS_INIT_DEVICE ClassInitDevice
PCLASS_QUERY_PNP_CAPABILITIES ClassQueryPnpCapabilities
PCLASS_SHUTDOWN_FLUSH ClassShutdownFlush
PCLASS_READ_WRITE ClassReadWriteVerification
PCLASS_POWER_DEVICE ClassPowerDevice
ULONG DeviceExtensionSize
PCLASS_REMOVE_DEVICE ClassRemoveDevice
PCLASS_START_DEVICE ClassStartDevice
PCLASS_DEVICE_CONTROL ClassDeviceControl
PCLASS_CREATE_CLOSE ClassCreateClose
PCLASS_STOP_DEVICE ClassStopDevice
CLASS_WMI_INFO ClassWmiInfo
PCLASS_WORKING_SET WorkingSet
PCLASS_QUERY_WMI_REGINFO_EX ClassFdoQueryWmiRegInfoEx
PCLASS_QUERY_WMI_REGINFO_EX ClassPdoQueryWmiRegInfoEx
PCLASS_INTERPRET_SENSE_INFO2 InterpretSenseInfo
ULONG BlockDeviceRODLimits
volatile ULONG ChangeRequestCount
ULONG D3IdleTimeoutOverridden
CLASS_FUNCTION_SUPPORT SeekPenaltyProperty
CLASS_VPD_ECOP_BLOCK_DEVICE_ROD_LIMITS BlockDeviceRODLimitsData
CLASS_FUNCTION_SUPPORT AccessAlignmentProperty
ULONG ZonedBlockDeviceCharacteristics
BOOLEAN RegAccessAlignmentQueryNotSupported
CLASS_VPD_B0_DATA BlockLimitsData
ULONG NoVerifyDuringIdlePower
CLASS_FUNCTION_SUPPORT HwFirmwareGetInfoSupport
CLASS_FUNCTION_SUPPORT TrimProcess
CLASS_VPD_B1_DATA DeviceCharacteristicsData
CLASS_READ_CAPACITY16_DATA ReadCapacity16Data
PSTORAGE_HW_FIRMWARE_INFO HwFirmwareInfo
ULONG BlockDeviceCharacteristics
CLASS_FUNCTION_SUPPORT TrimProperty
BOOLEAN AsynchronousNotificationSupported
CLASS_VPD_B2_DATA LBProvisioningData
ULONG InitializationDataSize
PDRIVER_STARTIO ClassStartIo
PCLASS_QUERY_ID ClassQueryId
PCLASS_UNLOAD ClassUnload
PCLASS_ENUM_DEVICE ClassEnumerateDevice
PCLASS_ADD_DEVICE ClassAddDevice
_Field_range_(1, 30000) ULONG HistoryCount
_Field_range_(sizeof(CLASS_INTERPRET_SENSE_INFO), sizeof(CLASS_INTERPRET_SENSE_INFO)) ULONG Size
PIO_COMPLETION_ROUTINE CompletionRoutine
CLASS_POWER_DOWN_STATE2 PowerDown2
CLASS_POWER_DOWN_STATE3 PowerDown3
PDEVICE_OBJECT DeviceObject
CLASS_POWER_UP_STATE PowerUp
CLASS_POWER_DOWN_STATE PowerDown
CLASS_POWER_OPTIONS Options
__callback PCLASS_QUERY_WMI_REGINFO_EX ClassPdoQueryWmiRegInfoEx
__callback PCLASS_QUERY_WMI_REGINFO_EX ClassFdoQueryWmiRegInfoEx
ULONG BytesOffsetForSectorAlignment
ULONG BytesPerPhysicalSector
BOOLEAN LBProvisioningReadZeros
BOOLEAN LBProvisioningEnabled
ULONG BytesPerLogicalSector
ULONG UnmapGranularityAlignment
ULONG MaxUnmapBlockDescrCount
USHORT OptimalTransferLengthGranularity
ULONG OptimalTransferLength
ULONG MaximumTransferLength
ULONG OptimalUnmapGranularity
USHORT MediumRotationRate
ULONG SoftThresholdEventPending
ULONGLONG OptimalTransferCount
ULONG DefaultInactivityTimer
USHORT MaximumRangeDescriptors
ULONGLONG MaximumTokenTransferSize
ULONG MaximumInactivityTimer
PCLASS_WMI_FUNCTION_CONTROL ClassWmiFunctionControl
PCLASS_SET_WMI_DATAITEM ClassSetWmiDataItem
PCLASS_SET_WMI_DATABLOCK ClassSetWmiDataBlock
PCLASS_EXECUTE_WMI_METHOD ClassExecuteWmiMethod
PCLASS_QUERY_WMI_DATABLOCK ClassQueryWmiDataBlock
PCLASS_QUERY_WMI_REGINFO ClassQueryWmiRegInfo
_Field_range_(sizeof(CLASS_WORKING_SET), sizeof(CLASS_WORKING_SET)) ULONG Size
_Field_range_(0, 2048) ULONG XferPacketsWorkingSetMaximum
LARGE_INTEGER StartingOffset
NPAGED_LOOKASIDE_LIST SrbLookasideList
KSPIN_LOCK RemoveTrackingSpinlock
DICTIONARY FileObjectDictionary
PCLASS_DRIVER_EXTENSION DriverExtension
PDEVICE_OBJECT LowerDeviceObject
ULONG HibernationPathCount
struct _PHYSICAL_DEVICE_EXTENSION * ChildList
UNICODE_STRING DeviceName
struct _FUNCTIONAL_DEVICE_EXTENSION * PartitionZeroExtension
BOOLEAN IsSrbLookasideListInitialized
UNICODE_STRING MountedDeviceInterfaceName
LARGE_INTEGER PartitionLength
LONG RemoveTrackingUntrackedCount
PCLASS_PRIVATE_COMMON_DATA PrivateCommonData
PDRIVER_DISPATCH * DispatchTable
STORAGE_REQUEST_BLOCK SrbEx
PDEVICE_OBJECT DeviceObject
struct _DICTIONARY_HEADER * List
PDEVICE_OBJECT DeviceObject
BOOLEAN ReleaseQueueInProgress
PDEVICE_OBJECT DeviceObject
BOOLEAN ReleaseQueueNeeded
KSPIN_LOCK ReleaseQueueSpinLock
ULONG ScanForSpecialFlags
DISK_GEOMETRY DiskGeometry
BOOLEAN PowerDownInProgress
struct _FAILURE_PREDICTION_INFO * FailurePredictionInfo
ULONG ChildLockAcquisitionCount
CLASS_POWER_CONTEXT PowerContext
COMMON_DEVICE_EXTENSION CommonExtension
ULONG EnumerationInterlock
SCSI_REQUEST_BLOCK ReleaseQueueSrb
KEVENT EjectSynchronizationEvent
FILE_OBJECT_EXTENSION KernelModeMcnContext
BOOLEAN ReleaseQueueIrpFromPool
PSTORAGE_ADAPTER_DESCRIPTOR AdapterDescriptor
DEVICE_POWER_STATE DevicePowerState
PMEDIA_CHANGE_DETECTION_INFO MediaChangeDetectionInfo
PSTORAGE_DEVICE_DESCRIPTOR DeviceDescriptor
COMMON_DEVICE_EXTENSION CommonExtension
PDEVICE_OBJECT DeviceObject
PCLASS_PRIVATE_PDO_DATA PrivatePdoData
UCHAR SenseInfoBufferLength
LARGE_INTEGER TickCountSent
LARGE_INTEGER TickCountCompleted
ULONG MillisecondsDelayOnRetry
SENSE_DATA NormalizedSenseData
ULONG_PTR ClassDriverUse[4]
_Field_range_(1, 30000) ULONG TotalHistoryCount
_In_ PDEVICE_OBJECT DeviceObject
_Must_inspect_result_ _In_ WDFDEVICE _In_ BOOLEAN _In_opt_ PVOID Tag
_In_ WDFREQUEST _In_ WDFFILEOBJECT FileObject
_Must_inspect_result_ _In_ WDFDEVICE _In_ PWDF_DEVICE_PROPERTY_DATA _In_ DEVPROPTYPE _In_ ULONG Size
_Must_inspect_result_ _In_ WDFDEVICE _In_ DEVICE_REGISTRY_PROPERTY _In_ ULONG BufferLength
_Must_inspect_result_ _In_ PWDFDEVICE_INIT _In_opt_ PCUNICODE_STRING DeviceName
_In_ WDFDPC _In_ BOOLEAN Wait
_Must_inspect_result_ _In_ PDRIVER_OBJECT _In_ PCUNICODE_STRING RegistryPath
_Must_inspect_result_ _In_ PDRIVER_OBJECT DriverObject
_Must_inspect_result_ _In_ WDFDEVICE Fdo
_In_ WDFREQUEST _In_ size_t _In_ size_t _In_ ULONG IoControlCode
_In_ WDFREQUEST _In_ size_t OutputBufferLength
_In_ WDFREQUEST _In_ size_t _In_ size_t InputBufferLength
_In_ WDFMEMORY _Out_opt_ size_t * BufferSize
_Must_inspect_result_ _In_ WDFOBJECT _In_ CONST GUID * Guid
_In_ WDFREQUEST _In_ NTSTATUS _In_ CCHAR PriorityBoost
_Must_inspect_result_ _In_ WDFIORESLIST _In_ PIO_RESOURCE_DESCRIPTOR Descriptor
_In_ ULONG _Out_ PULONG BufferUsed
_Must_inspect_result_ _In_ WDFWMIINSTANCE _In_opt_ ULONG EventDataSize
_Reserved_ PVOID Reserved
_IRQL_requires_same_ _In_opt_ PVOID Argument1
struct LOOKASIDE_ALIGN _NPAGED_LOOKASIDE_LIST NPAGED_LOOKASIDE_LIST
ActualNumberDriverObjects * sizeof(PDRIVER_OBJECT)) PDRIVER_OBJECT *DriverObjectList
_Must_inspect_result_ __drv_aliasesMem _In_ PDEVICE_OBJECT _In_opt_ PVOID _In_ ULONG _Out_opt_ PVOID _In_ ULONG _In_ BOOLEAN InternalDeviceIoControl
DRIVER_STARTIO * PDRIVER_STARTIO
enum _BUS_QUERY_ID_TYPE BUS_QUERY_ID_TYPE
IO_COMPLETION_ROUTINE * PIO_COMPLETION_ROUTINE
DRIVER_DISPATCH * PDRIVER_DISPATCH
#define IRP_MJ_MAXIMUM_FUNCTION