* Update classpnp.h annotations.

svn path=/trunk/; revision=55146
This commit is contained in:
Amine Khaldi 2012-01-24 14:10:25 +00:00
parent b167579013
commit 90350df69a

View file

@ -129,8 +129,6 @@
#define MEDIA_CHANGE_DEFAULT_TIME 1 #define MEDIA_CHANGE_DEFAULT_TIME 1
#define MEDIA_CHANGE_TIMEOUT_TIME 300 #define MEDIA_CHANGE_TIMEOUT_TIME 300
#define MAXIMUM_RETRY_FOR_SINGLE_IO_IN_100NS_UNITS 0x3b9aca00
#ifdef ALLOCATE_SRB_FROM_POOL #ifdef ALLOCATE_SRB_FROM_POOL
#define ClasspAllocateSrb(ext) \ #define ClasspAllocateSrb(ext) \
@ -187,6 +185,8 @@
#define DEFAULT_FAILURE_PREDICTION_PERIOD 60 * 60 * 1 #define DEFAULT_FAILURE_PREDICTION_PERIOD 60 * 60 * 1
#define MAXIMUM_RETRY_FOR_SINGLE_IO_IN_100NS_UNITS (0x3b9aca00)
static inline ULONG CountOfSetBitsUChar(UCHAR _X) static inline ULONG CountOfSetBitsUChar(UCHAR _X)
{ ULONG i = 0; while (_X) { _X &= _X - 1; i++; } return i; } { ULONG i = 0; while (_X) { _X &= _X - 1; i++; } return i; }
static inline ULONG CountOfSetBitsULong(ULONG _X) static inline ULONG CountOfSetBitsULong(ULONG _X)
@ -286,139 +286,161 @@ typedef struct _CLASSPNP_SCAN_FOR_SPECIAL_INFO {
ULONG_PTR Data; ULONG_PTR Data;
} CLASSPNP_SCAN_FOR_SPECIAL_INFO, *PCLASSPNP_SCAN_FOR_SPECIAL_INFO; } CLASSPNP_SCAN_FOR_SPECIAL_INFO, *PCLASSPNP_SCAN_FOR_SPECIAL_INFO;
_IRQL_requires_max_(DISPATCH_LEVEL)
typedef VOID typedef VOID
(NTAPI *PCLASS_ERROR)( (NTAPI *PCLASS_ERROR)(
PDEVICE_OBJECT DeviceObject, _In_ PDEVICE_OBJECT DeviceObject,
PSCSI_REQUEST_BLOCK Srb, _In_ PSCSI_REQUEST_BLOCK Srb,
NTSTATUS *Status, _Out_ NTSTATUS *Status,
BOOLEAN *Retry); _Inout_ BOOLEAN *Retry);
_IRQL_requires_max_(PASSIVE_LEVEL)
typedef NTSTATUS typedef NTSTATUS
(NTAPI *PCLASS_ADD_DEVICE)( (NTAPI *PCLASS_ADD_DEVICE)(
PDRIVER_OBJECT DriverObject, _In_ PDRIVER_OBJECT DriverObject,
PDEVICE_OBJECT Pdo); _In_ PDEVICE_OBJECT Pdo);
typedef NTSTATUS typedef NTSTATUS
(NTAPI *PCLASS_POWER_DEVICE)( (NTAPI *PCLASS_POWER_DEVICE)(
PDEVICE_OBJECT DeviceObject, _In_ PDEVICE_OBJECT DeviceObject,
PIRP Irp); _In_ PIRP Irp);
_IRQL_requires_max_(PASSIVE_LEVEL)
typedef NTSTATUS typedef NTSTATUS
(NTAPI *PCLASS_START_DEVICE)( (NTAPI *PCLASS_START_DEVICE)(
PDEVICE_OBJECT DeviceObject); _In_ PDEVICE_OBJECT DeviceObject);
_IRQL_requires_max_(PASSIVE_LEVEL)
typedef NTSTATUS typedef NTSTATUS
(NTAPI *PCLASS_STOP_DEVICE)( (NTAPI *PCLASS_STOP_DEVICE)(
PDEVICE_OBJECT DeviceObject, _In_ PDEVICE_OBJECT DeviceObject,
UCHAR Type); _In_ UCHAR Type);
_IRQL_requires_max_(PASSIVE_LEVEL)
typedef NTSTATUS typedef NTSTATUS
(NTAPI *PCLASS_INIT_DEVICE)( (NTAPI *PCLASS_INIT_DEVICE)(
PDEVICE_OBJECT DeviceObject); _In_ PDEVICE_OBJECT DeviceObject);
_IRQL_requires_max_(PASSIVE_LEVEL)
typedef NTSTATUS typedef NTSTATUS
(NTAPI *PCLASS_ENUM_DEVICE)( (NTAPI *PCLASS_ENUM_DEVICE)(
PDEVICE_OBJECT DeviceObject); _In_ PDEVICE_OBJECT DeviceObject);
_IRQL_requires_max_(DISPATCH_LEVEL)
typedef NTSTATUS typedef NTSTATUS
(NTAPI *PCLASS_READ_WRITE)( (NTAPI *PCLASS_READ_WRITE)(
PDEVICE_OBJECT DeviceObject, _In_ PDEVICE_OBJECT DeviceObject,
PIRP Irp); _In_ PIRP Irp);
_IRQL_requires_max_(DISPATCH_LEVEL)
typedef NTSTATUS typedef NTSTATUS
(NTAPI *PCLASS_DEVICE_CONTROL)( (NTAPI *PCLASS_DEVICE_CONTROL)(
PDEVICE_OBJECT DeviceObject, _In_ PDEVICE_OBJECT DeviceObject,
PIRP Irp); _In_ PIRP Irp);
_IRQL_requires_max_(DISPATCH_LEVEL)
typedef NTSTATUS typedef NTSTATUS
(NTAPI *PCLASS_SHUTDOWN_FLUSH)( (NTAPI *PCLASS_SHUTDOWN_FLUSH)(
PDEVICE_OBJECT DeviceObject, _In_ PDEVICE_OBJECT DeviceObject,
PIRP Irp); _In_ PIRP Irp);
_IRQL_requires_max_(PASSIVE_LEVEL)
typedef NTSTATUS typedef NTSTATUS
(NTAPI *PCLASS_CREATE_CLOSE)( (NTAPI *PCLASS_CREATE_CLOSE)(
PDEVICE_OBJECT DeviceObject, _In_ PDEVICE_OBJECT DeviceObject,
PIRP Irp); _In_ PIRP Irp);
_IRQL_requires_max_(PASSIVE_LEVEL)
typedef NTSTATUS typedef NTSTATUS
(NTAPI *PCLASS_QUERY_ID)( (NTAPI *PCLASS_QUERY_ID)(
PDEVICE_OBJECT DeviceObject, _In_ PDEVICE_OBJECT DeviceObject,
BUS_QUERY_ID_TYPE IdType, _In_ BUS_QUERY_ID_TYPE IdType,
PUNICODE_STRING IdString); _In_ PUNICODE_STRING IdString);
_IRQL_requires_max_(PASSIVE_LEVEL)
typedef NTSTATUS typedef NTSTATUS
(NTAPI *PCLASS_REMOVE_DEVICE)( (NTAPI *PCLASS_REMOVE_DEVICE)(
PDEVICE_OBJECT DeviceObject, _In_ PDEVICE_OBJECT DeviceObject,
UCHAR Type); _In_ UCHAR Type);
_IRQL_requires_max_(PASSIVE_LEVEL)
typedef VOID typedef VOID
(NTAPI *PCLASS_UNLOAD)( (NTAPI *PCLASS_UNLOAD)(
PDRIVER_OBJECT DriverObject); _In_ PDRIVER_OBJECT DriverObject);
_IRQL_requires_max_(PASSIVE_LEVEL)
typedef NTSTATUS typedef NTSTATUS
(NTAPI *PCLASS_QUERY_PNP_CAPABILITIES)( (NTAPI *PCLASS_QUERY_PNP_CAPABILITIES)(
PDEVICE_OBJECT PhysicalDeviceObject, _In_ PDEVICE_OBJECT PhysicalDeviceObject,
PDEVICE_CAPABILITIES Capabilities); _In_ PDEVICE_CAPABILITIES Capabilities);
_IRQL_requires_(DISPATCH_LEVEL)
typedef VOID typedef VOID
(NTAPI *PCLASS_TICK)( (NTAPI *PCLASS_TICK)(
PDEVICE_OBJECT DeviceObject); _In_ PDEVICE_OBJECT DeviceObject);
_IRQL_requires_max_(PASSIVE_LEVEL)
typedef NTSTATUS typedef NTSTATUS
(NTAPI *PCLASS_QUERY_WMI_REGINFO_EX)( (NTAPI *PCLASS_QUERY_WMI_REGINFO_EX)(
PDEVICE_OBJECT DeviceObject, _In_ PDEVICE_OBJECT DeviceObject,
ULONG *RegFlags, _Out_ ULONG *RegFlags,
PUNICODE_STRING Name, _Out_ PUNICODE_STRING Name,
PUNICODE_STRING MofResourceName); _Out_ PUNICODE_STRING MofResourceName);
_IRQL_requires_max_(PASSIVE_LEVEL)
typedef NTSTATUS typedef NTSTATUS
(NTAPI *PCLASS_QUERY_WMI_REGINFO)( (NTAPI *PCLASS_QUERY_WMI_REGINFO)(
PDEVICE_OBJECT DeviceObject, _In_ PDEVICE_OBJECT DeviceObject,
ULONG *RegFlags, _Out_ ULONG *RegFlags,
PUNICODE_STRING Name); _Out_ PUNICODE_STRING Name);
_IRQL_requires_max_(PASSIVE_LEVEL)
typedef NTSTATUS typedef NTSTATUS
(NTAPI *PCLASS_QUERY_WMI_DATABLOCK)( (NTAPI *PCLASS_QUERY_WMI_DATABLOCK)(
PDEVICE_OBJECT DeviceObject, _In_ PDEVICE_OBJECT DeviceObject,
PIRP Irp, _In_ PIRP Irp,
ULONG GuidIndex, _In_ ULONG GuidIndex,
ULONG BufferAvail, _In_ ULONG BufferAvail,
PUCHAR Buffer); _Out_writes_bytes_(BufferAvail) PUCHAR Buffer);
_IRQL_requires_max_(PASSIVE_LEVEL)
typedef NTSTATUS typedef NTSTATUS
(NTAPI *PCLASS_SET_WMI_DATABLOCK)( (NTAPI *PCLASS_SET_WMI_DATABLOCK)(
PDEVICE_OBJECT DeviceObject, _In_ PDEVICE_OBJECT DeviceObject,
PIRP Irp, _In_ PIRP Irp,
ULONG GuidIndex, _In_ ULONG GuidIndex,
ULONG BufferSize, _In_ ULONG BufferSize,
PUCHAR Buffer); _In_reads_bytes_(BufferSize) PUCHAR Buffer);
_IRQL_requires_max_(PASSIVE_LEVEL)
typedef NTSTATUS typedef NTSTATUS
(NTAPI *PCLASS_SET_WMI_DATAITEM)( (NTAPI *PCLASS_SET_WMI_DATAITEM)(
PDEVICE_OBJECT DeviceObject, _In_ PDEVICE_OBJECT DeviceObject,
PIRP Irp, _In_ PIRP Irp,
ULONG GuidIndex, _In_ ULONG GuidIndex,
ULONG DataItemId, _In_ ULONG DataItemId,
ULONG BufferSize, _In_ ULONG BufferSize,
PUCHAR Buffer); _In_reads_bytes_(BufferSize) PUCHAR Buffer);
_IRQL_requires_max_(PASSIVE_LEVEL)
typedef NTSTATUS typedef NTSTATUS
(NTAPI *PCLASS_EXECUTE_WMI_METHOD)( (NTAPI *PCLASS_EXECUTE_WMI_METHOD)(
PDEVICE_OBJECT DeviceObject, _In_ PDEVICE_OBJECT DeviceObject,
PIRP Irp, _In_ PIRP Irp,
ULONG GuidIndex, _In_ ULONG GuidIndex,
ULONG MethodId, _In_ ULONG MethodId,
ULONG InBufferSize, _In_ ULONG InBufferSize,
ULONG OutBufferSize, _In_ ULONG OutBufferSize,
PUCHAR Buffer); _In_reads_(_Inexpressible_(max(InBufferSize, OutBufferSize))) PUCHAR Buffer);
_IRQL_requires_max_(PASSIVE_LEVEL)
typedef NTSTATUS typedef NTSTATUS
(NTAPI *PCLASS_WMI_FUNCTION_CONTROL)( (NTAPI *PCLASS_WMI_FUNCTION_CONTROL)(
PDEVICE_OBJECT DeviceObject, _In_ PDEVICE_OBJECT DeviceObject,
PIRP Irp, _In_ PIRP Irp,
ULONG GuidIndex, _In_ ULONG GuidIndex,
CLASSENABLEDISABLEFUNCTION Function, _In_ CLASSENABLEDISABLEFUNCTION Function,
BOOLEAN Enable); _In_ BOOLEAN Enable);
typedef struct _SRB_HISTORY_ITEM { typedef struct _SRB_HISTORY_ITEM {
LARGE_INTEGER TickCountSent; LARGE_INTEGER TickCountSent;
@ -431,27 +453,32 @@ typedef struct _SRB_HISTORY_ITEM {
typedef struct _SRB_HISTORY { typedef struct _SRB_HISTORY {
ULONG_PTR ClassDriverUse[4]; ULONG_PTR ClassDriverUse[4];
ULONG TotalHistoryCount; _Field_range_(1,30000) ULONG TotalHistoryCount;
ULONG UsedHistoryCount; _Field_range_(0,TotalHistoryCount) ULONG UsedHistoryCount;
SRB_HISTORY_ITEM History[1]; _Field_size_part_(TotalHistoryCount, UsedHistoryCount) SRB_HISTORY_ITEM History[1];
} SRB_HISTORY, *PSRB_HISTORY; } SRB_HISTORY, *PSRB_HISTORY;
_IRQL_requires_max_(DISPATCH_LEVEL)
typedef BOOLEAN typedef BOOLEAN
(NTAPI *PCLASS_INTERPRET_SENSE_INFO)( (NTAPI *PCLASS_INTERPRET_SENSE_INFO)(
PDEVICE_OBJECT Fdo, _In_ PDEVICE_OBJECT Fdo,
PIRP OriginalRequest, _In_opt_ PIRP OriginalRequest,
PSCSI_REQUEST_BLOCK Srb, _In_ PSCSI_REQUEST_BLOCK Srb,
UCHAR MajorFunctionCode, _In_ UCHAR MajorFunctionCode,
ULONG IoDeviceCode, _In_ ULONG IoDeviceCode,
ULONG PreviousRetryCount, _In_ ULONG PreviousRetryCount,
SRB_HISTORY *RequestHistory, _In_opt_ SRB_HISTORY *RequestHistory,
NTSTATUS *Status, _Out_ NTSTATUS *Status,
LONGLONG *RetryIn100nsUnits); _Out_ _Deref_out_range_(0,MAXIMUM_RETRY_FOR_SINGLE_IO_IN_100NS_UNITS)
LONGLONG *RetryIn100nsUnits);
_IRQL_requires_max_(DISPATCH_LEVEL)
_At_(RequestHistory->UsedHistoryCount, _Pre_equal_to_(RequestHistory->TotalHistoryCount)
_Out_range_(0, RequestHistory->TotalHistoryCount - 1))
typedef VOID typedef VOID
(NTAPI *PCLASS_COMPRESS_RETRY_HISTORY_DATA)( (NTAPI *PCLASS_COMPRESS_RETRY_HISTORY_DATA)(
PDEVICE_OBJECT DeviceObject, _In_ PDEVICE_OBJECT DeviceObject,
PSRB_HISTORY RequestHistory); _Inout_ PSRB_HISTORY RequestHistory);
typedef struct { typedef struct {
GUID Guid; GUID Guid;
@ -509,16 +536,17 @@ typedef struct _FILE_OBJECT_EXTENSION {
} FILE_OBJECT_EXTENSION, *PFILE_OBJECT_EXTENSION; } FILE_OBJECT_EXTENSION, *PFILE_OBJECT_EXTENSION;
typedef struct _CLASS_WORKING_SET { typedef struct _CLASS_WORKING_SET {
ULONG Size; _Field_range_(sizeof(CLASS_WORKING_SET),sizeof(CLASS_WORKING_SET)) ULONG Size;
ULONG XferPacketsWorkingSetMaximum; _Field_range_(0,2048) ULONG XferPacketsWorkingSetMaximum;
ULONG XferPacketsWorkingSetMinimum; _Field_range_(0,2048) ULONG XferPacketsWorkingSetMinimum;
} CLASS_WORKING_SET, *PCLASS_WORKING_SET; } CLASS_WORKING_SET, *PCLASS_WORKING_SET;
typedef struct _CLASS_INTERPRET_SENSE_INFO2 { typedef struct _CLASS_INTERPRET_SENSE_INFO2 {
ULONG Size; _Field_range_(sizeof(CLASS_INTERPRET_SENSE_INFO),sizeof(CLASS_INTERPRET_SENSE_INFO))
ULONG HistoryCount; ULONG Size;
PCLASS_COMPRESS_RETRY_HISTORY_DATA Compress; _Field_range_(1,30000) ULONG HistoryCount;
PCLASS_INTERPRET_SENSE_INFO Interpret; __callback PCLASS_COMPRESS_RETRY_HISTORY_DATA Compress;
__callback PCLASS_INTERPRET_SENSE_INFO Interpret;
} CLASS_INTERPRET_SENSE_INFO2, *PCLASS_INTERPRET_SENSE_INFO2; } CLASS_INTERPRET_SENSE_INFO2, *PCLASS_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));
@ -642,18 +670,20 @@ typedef struct _COMPLETION_CONTEXT {
SCSI_REQUEST_BLOCK Srb; SCSI_REQUEST_BLOCK Srb;
} COMPLETION_CONTEXT, *PCOMPLETION_CONTEXT; } COMPLETION_CONTEXT, *PCOMPLETION_CONTEXT;
_IRQL_requires_max_(PASSIVE_LEVEL)
_Must_inspect_result_
SCSIPORTAPI SCSIPORTAPI
ULONG ULONG
NTAPI NTAPI
ClassInitialize( ClassInitialize(
PVOID Argument1, _In_ PVOID Argument1,
PVOID Argument2, _In_ PVOID Argument2,
PCLASS_INIT_DATA InitializationData); _In_ PCLASS_INIT_DATA InitializationData);
typedef struct _CLASS_QUERY_WMI_REGINFO_EX_LIST { typedef struct _CLASS_QUERY_WMI_REGINFO_EX_LIST {
ULONG Size; ULONG Size;
PCLASS_QUERY_WMI_REGINFO_EX ClassFdoQueryWmiRegInfoEx; __callback PCLASS_QUERY_WMI_REGINFO_EX ClassFdoQueryWmiRegInfoEx;
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 struct _FUNCTIONAL_DEVICE_EXTENSION { typedef struct _FUNCTIONAL_DEVICE_EXTENSION {
@ -738,50 +768,57 @@ typedef struct _FUNCTIONAL_DEVICE_EXTENSION {
} FUNCTIONAL_DEVICE_EXTENSION, *PFUNCTIONAL_DEVICE_EXTENSION; } FUNCTIONAL_DEVICE_EXTENSION, *PFUNCTIONAL_DEVICE_EXTENSION;
_IRQL_requires_max_(PASSIVE_LEVEL)
_Must_inspect_result_
SCSIPORTAPI SCSIPORTAPI
ULONG ULONG
NTAPI NTAPI
ClassInitializeEx( ClassInitializeEx(
PDRIVER_OBJECT DriverObject, _In_ PDRIVER_OBJECT DriverObject,
LPGUID Guid, _In_ LPGUID Guid,
PVOID Data); _In_ PVOID Data);
_IRQL_requires_max_(PASSIVE_LEVEL)
_Must_inspect_result_
_Post_satisfies_(return <= 0)
SCSIPORTAPI SCSIPORTAPI
NTSTATUS NTSTATUS
NTAPI NTAPI
ClassCreateDeviceObject( ClassCreateDeviceObject(
PDRIVER_OBJECT DriverObject, _In_ PDRIVER_OBJECT DriverObject,
PCCHAR ObjectNameBuffer, _In_z_ PCCHAR ObjectNameBuffer,
PDEVICE_OBJECT LowerDeviceObject, _In_ PDEVICE_OBJECT LowerDeviceObject,
BOOLEAN IsFdo, _In_ BOOLEAN IsFdo,
PDEVICE_OBJECT *DeviceObject); _Outptr_result_nullonfailure_ _At_(*DeviceObject, __drv_allocatesMem(Mem) __drv_aliasesMem)
PDEVICE_OBJECT *DeviceObject);
_Must_inspect_result_
SCSIPORTAPI SCSIPORTAPI
NTSTATUS NTSTATUS
NTAPI NTAPI
ClassReadDriveCapacity( ClassReadDriveCapacity(
PDEVICE_OBJECT DeviceObject); _In_ PDEVICE_OBJECT DeviceObject);
SCSIPORTAPI SCSIPORTAPI
VOID VOID
NTAPI NTAPI
ClassReleaseQueue( ClassReleaseQueue(
PDEVICE_OBJECT DeviceObject); _In_ PDEVICE_OBJECT DeviceObject);
SCSIPORTAPI SCSIPORTAPI
VOID VOID
NTAPI NTAPI
ClassSplitRequest( ClassSplitRequest(
PDEVICE_OBJECT DeviceObject, _In_ PDEVICE_OBJECT DeviceObject,
PIRP Irp, _In_ PIRP Irp,
ULONG MaximumBytes); _In_ ULONG MaximumBytes);
SCSIPORTAPI SCSIPORTAPI
NTSTATUS NTSTATUS
NTAPI NTAPI
ClassDeviceControl( ClassDeviceControl(
PDEVICE_OBJECT DeviceObject, _In_ PDEVICE_OBJECT DeviceObject,
PIRP Irp); _Inout_ PIRP Irp);
SCSIPORTAPI SCSIPORTAPI
NTSTATUS NTSTATUS
@ -803,281 +840,299 @@ SCSIPORTAPI
BOOLEAN BOOLEAN
NTAPI NTAPI
ClassInterpretSenseInfo( ClassInterpretSenseInfo(
PDEVICE_OBJECT DeviceObject, _In_ PDEVICE_OBJECT DeviceObject,
PSCSI_REQUEST_BLOCK Srb, _In_ PSCSI_REQUEST_BLOCK Srb,
UCHAR MajorFunctionCode, _In_ UCHAR MajorFunctionCode,
ULONG IoDeviceCode, _In_ ULONG IoDeviceCode,
ULONG RetryCount, _In_ ULONG RetryCount,
NTSTATUS *Status, _Out_ NTSTATUS *Status,
ULONG *RetryInterval); _Out_opt_ _Deref_out_range_(0,100) ULONG *RetryInterval);
VOID VOID
NTAPI NTAPI
ClassSendDeviceIoControlSynchronous( ClassSendDeviceIoControlSynchronous(
ULONG IoControlCode, _In_ ULONG IoControlCode,
PDEVICE_OBJECT TargetDeviceObject, _In_ PDEVICE_OBJECT TargetDeviceObject,
PVOID Buffer, _Inout_updates_opt_(_Inexpressible_(max(InputBufferLength, OutputBufferLength)))
ULONG InputBufferLength, PVOID Buffer,
ULONG OutputBufferLength, _In_ ULONG InputBufferLength,
BOOLEAN InternalDeviceIoControl, _In_ ULONG OutputBufferLength,
PIO_STATUS_BLOCK IoStatus); _In_ BOOLEAN InternalDeviceIoControl,
_Out_ PIO_STATUS_BLOCK IoStatus);
SCSIPORTAPI SCSIPORTAPI
NTSTATUS NTSTATUS
NTAPI NTAPI
ClassSendIrpSynchronous( ClassSendIrpSynchronous(
PDEVICE_OBJECT TargetDeviceObject, _In_ PDEVICE_OBJECT TargetDeviceObject,
PIRP Irp); _In_ PIRP Irp);
SCSIPORTAPI SCSIPORTAPI
NTSTATUS NTSTATUS
NTAPI NTAPI
ClassForwardIrpSynchronous( ClassForwardIrpSynchronous(
PCOMMON_DEVICE_EXTENSION CommonExtension, _In_ PCOMMON_DEVICE_EXTENSION CommonExtension,
PIRP Irp); _In_ PIRP Irp);
SCSIPORTAPI SCSIPORTAPI
NTSTATUS NTSTATUS
NTAPI NTAPI
ClassSendSrbSynchronous( ClassSendSrbSynchronous(
PDEVICE_OBJECT DeviceObject, _In_ PDEVICE_OBJECT DeviceObject,
PSCSI_REQUEST_BLOCK Srb, _Inout_ PSCSI_REQUEST_BLOCK Srb,
PVOID BufferAddress, _In_reads_bytes_opt_(BufferLength) PVOID BufferAddress,
ULONG BufferLength, _In_ ULONG BufferLength,
BOOLEAN WriteToDevice); _In_ BOOLEAN WriteToDevice);
SCSIPORTAPI SCSIPORTAPI
NTSTATUS NTSTATUS
NTAPI NTAPI
ClassSendSrbAsynchronous( ClassSendSrbAsynchronous(
PDEVICE_OBJECT DeviceObject, _In_ PDEVICE_OBJECT DeviceObject,
PSCSI_REQUEST_BLOCK Srb, _Inout_ PSCSI_REQUEST_BLOCK Srb,
PIRP Irp, _In_ PIRP Irp,
PVOID BufferAddress, _In_reads_bytes_opt_(BufferLength) __drv_aliasesMem PVOID BufferAddress,
ULONG BufferLength, _In_ ULONG BufferLength,
BOOLEAN WriteToDevice); _In_ BOOLEAN WriteToDevice);
SCSIPORTAPI SCSIPORTAPI
NTSTATUS NTSTATUS
NTAPI NTAPI
ClassBuildRequest( ClassBuildRequest(
PDEVICE_OBJECT DeviceObject, _In_ PDEVICE_OBJECT DeviceObject,
PIRP Irp); _In_ PIRP Irp);
SCSIPORTAPI SCSIPORTAPI
ULONG ULONG
NTAPI NTAPI
ClassModeSense( ClassModeSense(
PDEVICE_OBJECT DeviceObject, _In_ PDEVICE_OBJECT DeviceObject,
PCHAR ModeSenseBuffer, _In_reads_bytes_(Length) PCHAR ModeSenseBuffer,
ULONG Length, _In_ ULONG Length,
UCHAR PageMode); _In_ UCHAR PageMode);
SCSIPORTAPI SCSIPORTAPI
PVOID PVOID
NTAPI NTAPI
ClassFindModePage( ClassFindModePage(
PCHAR ModeSenseBuffer, _In_reads_bytes_(Length) PCHAR ModeSenseBuffer,
ULONG Length, _In_ ULONG Length,
UCHAR PageMode, _In_ UCHAR PageMode,
BOOLEAN Use6Byte); _In_ BOOLEAN Use6Byte);
_IRQL_requires_max_(PASSIVE_LEVEL)
SCSIPORTAPI SCSIPORTAPI
NTSTATUS NTSTATUS
NTAPI NTAPI
ClassClaimDevice( ClassClaimDevice(
PDEVICE_OBJECT LowerDeviceObject, _In_ PDEVICE_OBJECT LowerDeviceObject,
BOOLEAN Release); _In_ BOOLEAN Release);
SCSIPORTAPI SCSIPORTAPI
NTSTATUS NTSTATUS
NTAPI NTAPI
ClassInternalIoControl ( ClassInternalIoControl(
PDEVICE_OBJECT DeviceObject, PDEVICE_OBJECT DeviceObject,
PIRP Irp); PIRP Irp);
_IRQL_requires_max_(PASSIVE_LEVEL)
SCSIPORTAPI SCSIPORTAPI
VOID VOID
NTAPI NTAPI
ClassInitializeSrbLookasideList( ClassInitializeSrbLookasideList(
PCOMMON_DEVICE_EXTENSION CommonExtension, _Inout_ PCOMMON_DEVICE_EXTENSION CommonExtension,
ULONG NumberElements); _In_ ULONG NumberElements);
_IRQL_requires_max_(PASSIVE_LEVEL)
SCSIPORTAPI SCSIPORTAPI
VOID VOID
NTAPI NTAPI
ClassDeleteSrbLookasideList( ClassDeleteSrbLookasideList(
PCOMMON_DEVICE_EXTENSION CommonExtension); _Inout_ PCOMMON_DEVICE_EXTENSION CommonExtension);
_IRQL_requires_max_(PASSIVE_LEVEL)
SCSIPORTAPI SCSIPORTAPI
ULONG ULONG
NTAPI NTAPI
ClassQueryTimeOutRegistryValue( ClassQueryTimeOutRegistryValue(
PDEVICE_OBJECT DeviceObject); _In_ PDEVICE_OBJECT DeviceObject);
_IRQL_requires_max_(PASSIVE_LEVEL)
SCSIPORTAPI SCSIPORTAPI
NTSTATUS NTSTATUS
NTAPI NTAPI
ClassGetDescriptor( ClassGetDescriptor(
PDEVICE_OBJECT DeviceObject, _In_ PDEVICE_OBJECT DeviceObject,
PSTORAGE_PROPERTY_ID PropertyId, _In_ PSTORAGE_PROPERTY_ID PropertyId,
PSTORAGE_DESCRIPTOR_HEADER *Descriptor); _Outptr_ PSTORAGE_DESCRIPTOR_HEADER *Descriptor);
_IRQL_requires_max_(PASSIVE_LEVEL)
SCSIPORTAPI SCSIPORTAPI
VOID VOID
NTAPI NTAPI
ClassInvalidateBusRelations( ClassInvalidateBusRelations(
PDEVICE_OBJECT Fdo); _In_ PDEVICE_OBJECT Fdo);
_IRQL_requires_max_(PASSIVE_LEVEL)
SCSIPORTAPI SCSIPORTAPI
VOID VOID
NTAPI NTAPI
ClassMarkChildrenMissing( ClassMarkChildrenMissing(
PFUNCTIONAL_DEVICE_EXTENSION Fdo); _In_ PFUNCTIONAL_DEVICE_EXTENSION Fdo);
_IRQL_requires_max_(PASSIVE_LEVEL)
SCSIPORTAPI SCSIPORTAPI
BOOLEAN BOOLEAN
NTAPI NTAPI
ClassMarkChildMissing( ClassMarkChildMissing(
PPHYSICAL_DEVICE_EXTENSION PdoExtension, _In_ PPHYSICAL_DEVICE_EXTENSION PdoExtension,
BOOLEAN AcquireChildLock); _In_ BOOLEAN AcquireChildLock);
SCSIPORTAPI SCSIPORTAPI
VOID VOID
ClassDebugPrint( ClassDebugPrint(
CLASS_DEBUG_LEVEL DebugPrintLevel, _In_ CLASS_DEBUG_LEVEL DebugPrintLevel,
PCCHAR DebugMessage, _In_z_ PCCHAR DebugMessage,
...); ...);
__drv_aliasesMem
_IRQL_requires_max_(DISPATCH_LEVEL)
SCSIPORTAPI SCSIPORTAPI
PCLASS_DRIVER_EXTENSION PCLASS_DRIVER_EXTENSION
NTAPI NTAPI
ClassGetDriverExtension( ClassGetDriverExtension(
PDRIVER_OBJECT DriverObject); _In_ PDRIVER_OBJECT DriverObject);
SCSIPORTAPI SCSIPORTAPI
VOID VOID
NTAPI NTAPI
ClassCompleteRequest( ClassCompleteRequest(
PDEVICE_OBJECT DeviceObject, _In_ PDEVICE_OBJECT DeviceObject,
PIRP Irp, _In_ PIRP Irp,
CCHAR PriorityBoost); _In_ CCHAR PriorityBoost);
SCSIPORTAPI SCSIPORTAPI
VOID VOID
NTAPI NTAPI
ClassReleaseRemoveLock( ClassReleaseRemoveLock(
PDEVICE_OBJECT DeviceObject, _In_ PDEVICE_OBJECT DeviceObject,
PIRP Tag); PIRP Tag);
SCSIPORTAPI SCSIPORTAPI
ULONG ULONG
NTAPI NTAPI
ClassAcquireRemoveLockEx( ClassAcquireRemoveLockEx(
PDEVICE_OBJECT DeviceObject, _In_ PDEVICE_OBJECT DeviceObject,
PVOID Tag, PVOID Tag,
PCSTR File, _In_ PCSTR File,
ULONG Line); _In_ ULONG Line);
_IRQL_requires_max_(PASSIVE_LEVEL)
SCSIPORTAPI SCSIPORTAPI
VOID VOID
NTAPI NTAPI
ClassUpdateInformationInRegistry( ClassUpdateInformationInRegistry(
PDEVICE_OBJECT Fdo, _In_ PDEVICE_OBJECT Fdo,
PCHAR DeviceName, _In_ PCHAR DeviceName,
ULONG DeviceNumber, _In_ ULONG DeviceNumber,
PINQUIRYDATA InquiryData, _In_reads_bytes_opt_(InquiryDataLength) PINQUIRYDATA InquiryData,
ULONG InquiryDataLength); _In_ ULONG InquiryDataLength);
SCSIPORTAPI SCSIPORTAPI
NTSTATUS NTSTATUS
NTAPI NTAPI
ClassWmiCompleteRequest( ClassWmiCompleteRequest(
PDEVICE_OBJECT DeviceObject, _In_ PDEVICE_OBJECT DeviceObject,
PIRP Irp, _Inout_ PIRP Irp,
NTSTATUS Status, _In_ NTSTATUS Status,
ULONG BufferUsed, _In_ ULONG BufferUsed,
CCHAR PriorityBoost); _In_ CCHAR PriorityBoost);
_IRQL_requires_max_(DISPATCH_LEVEL)
SCSIPORTAPI SCSIPORTAPI
NTSTATUS NTSTATUS
NTAPI NTAPI
ClassWmiFireEvent( ClassWmiFireEvent(
PDEVICE_OBJECT DeviceObject, _In_ PDEVICE_OBJECT DeviceObject,
LPGUID Guid, _In_ LPGUID Guid,
ULONG InstanceIndex, _In_ ULONG InstanceIndex,
ULONG EventDataSize, _In_ ULONG EventDataSize,
PVOID EventData); _In_reads_bytes_(EventDataSize) PVOID EventData);
SCSIPORTAPI SCSIPORTAPI
VOID VOID
NTAPI NTAPI
ClassResetMediaChangeTimer( ClassResetMediaChangeTimer(
PFUNCTIONAL_DEVICE_EXTENSION FdoExtension); _In_ PFUNCTIONAL_DEVICE_EXTENSION FdoExtension);
_IRQL_requires_max_(PASSIVE_LEVEL)
SCSIPORTAPI SCSIPORTAPI
VOID VOID
NTAPI NTAPI
ClassInitializeMediaChangeDetection( ClassInitializeMediaChangeDetection(
PFUNCTIONAL_DEVICE_EXTENSION FdoExtension, _In_ PFUNCTIONAL_DEVICE_EXTENSION FdoExtension,
PUCHAR EventPrefix); _In_ PUCHAR EventPrefix);
_IRQL_requires_max_(PASSIVE_LEVEL)
SCSIPORTAPI SCSIPORTAPI
NTSTATUS NTSTATUS
NTAPI NTAPI
ClassInitializeTestUnitPolling( ClassInitializeTestUnitPolling(
PFUNCTIONAL_DEVICE_EXTENSION FdoExtension, _In_ PFUNCTIONAL_DEVICE_EXTENSION FdoExtension,
BOOLEAN AllowDriveToSleep); _In_ BOOLEAN AllowDriveToSleep);
SCSIPORTAPI SCSIPORTAPI
PVPB PVPB
NTAPI NTAPI
ClassGetVpb( ClassGetVpb(
PDEVICE_OBJECT DeviceObject); _In_ PDEVICE_OBJECT DeviceObject);
SCSIPORTAPI SCSIPORTAPI
NTSTATUS NTSTATUS
NTAPI NTAPI
ClassSpinDownPowerHandler( ClassSpinDownPowerHandler(
PDEVICE_OBJECT DeviceObject, _In_ PDEVICE_OBJECT DeviceObject,
PIRP Irp); _In_ PIRP Irp);
NTSTATUS NTSTATUS
NTAPI NTAPI
ClassStopUnitPowerHandler( ClassStopUnitPowerHandler(
PDEVICE_OBJECT DeviceObject, _In_ PDEVICE_OBJECT DeviceObject,
PIRP Irp); _In_ PIRP Irp);
_IRQL_requires_max_(PASSIVE_LEVEL)
NTSTATUS NTSTATUS
NTAPI NTAPI
ClassSetFailurePredictionPoll( ClassSetFailurePredictionPoll(
PFUNCTIONAL_DEVICE_EXTENSION FdoExtension, _Inout_ PFUNCTIONAL_DEVICE_EXTENSION FdoExtension,
FAILURE_PREDICTION_METHOD FailurePredictionMethod, _In_ FAILURE_PREDICTION_METHOD FailurePredictionMethod,
ULONG PollingPeriod); _In_ ULONG PollingPeriod);
_IRQL_requires_max_(DISPATCH_LEVEL)
VOID VOID
NTAPI NTAPI
ClassNotifyFailurePredicted( ClassNotifyFailurePredicted(
PFUNCTIONAL_DEVICE_EXTENSION FdoExtension, _In_ PFUNCTIONAL_DEVICE_EXTENSION FdoExtension,
PUCHAR Buffer, _In_reads_bytes_(BufferSize) PUCHAR Buffer,
ULONG BufferSize, _In_ ULONG BufferSize,
BOOLEAN LogError, _In_ BOOLEAN LogError,
ULONG UniqueErrorValue, _In_ ULONG UniqueErrorValue,
UCHAR PathId, _In_ UCHAR PathId,
UCHAR TargetId, _In_ UCHAR TargetId,
UCHAR Lun); _In_ UCHAR Lun);
_IRQL_requires_max_(PASSIVE_LEVEL)
SCSIPORTAPI SCSIPORTAPI
VOID VOID
NTAPI NTAPI
ClassAcquireChildLock( ClassAcquireChildLock(
PFUNCTIONAL_DEVICE_EXTENSION FdoExtension); _In_ PFUNCTIONAL_DEVICE_EXTENSION FdoExtension);
SCSIPORTAPI SCSIPORTAPI
VOID VOID
NTAPI NTAPI
ClassReleaseChildLock( ClassReleaseChildLock(
PFUNCTIONAL_DEVICE_EXTENSION FdoExtension); _In_ PFUNCTIONAL_DEVICE_EXTENSION FdoExtension);
NTSTATUS NTSTATUS
NTAPI NTAPI
@ -1089,14 +1144,15 @@ ClassSignalCompletion(
VOID VOID
NTAPI NTAPI
ClassSendStartUnit( ClassSendStartUnit(
PDEVICE_OBJECT DeviceObject); _In_ PDEVICE_OBJECT DeviceObject);
_IRQL_requires_max_(PASSIVE_LEVEL)
SCSIPORTAPI SCSIPORTAPI
NTSTATUS NTSTATUS
NTAPI NTAPI
ClassRemoveDevice( ClassRemoveDevice(
PDEVICE_OBJECT DeviceObject, _In_ PDEVICE_OBJECT DeviceObject,
UCHAR RemoveType); _In_ UCHAR RemoveType);
SCSIPORTAPI SCSIPORTAPI
NTSTATUS NTSTATUS
@ -1110,7 +1166,7 @@ SCSIPORTAPI
VOID VOID
NTAPI NTAPI
ClassCheckMediaState( ClassCheckMediaState(
PFUNCTIONAL_DEVICE_EXTENSION FdoExtension); _In_ PFUNCTIONAL_DEVICE_EXTENSION FdoExtension);
SCSIPORTAPI SCSIPORTAPI
NTSTATUS NTSTATUS
@ -1120,71 +1176,79 @@ ClassCheckVerifyComplete(
PIRP Irp, PIRP Irp,
PVOID Context); PVOID Context);
_IRQL_requires_max_(PASSIVE_LEVEL)
SCSIPORTAPI SCSIPORTAPI
VOID VOID
NTAPI NTAPI
ClassSetMediaChangeState( ClassSetMediaChangeState(
PFUNCTIONAL_DEVICE_EXTENSION FdoExtension, _In_ PFUNCTIONAL_DEVICE_EXTENSION FdoExtension,
MEDIA_CHANGE_DETECTION_STATE State, _In_ MEDIA_CHANGE_DETECTION_STATE State,
BOOLEAN Wait); _In_ BOOLEAN Wait);
_IRQL_requires_max_(PASSIVE_LEVEL)
SCSIPORTAPI SCSIPORTAPI
VOID VOID
NTAPI NTAPI
ClassEnableMediaChangeDetection( ClassEnableMediaChangeDetection(
PFUNCTIONAL_DEVICE_EXTENSION FdoExtension); _In_ PFUNCTIONAL_DEVICE_EXTENSION FdoExtension);
_IRQL_requires_max_(PASSIVE_LEVEL)
SCSIPORTAPI SCSIPORTAPI
VOID VOID
NTAPI NTAPI
ClassDisableMediaChangeDetection( ClassDisableMediaChangeDetection(
PFUNCTIONAL_DEVICE_EXTENSION FdoExtension); _In_ PFUNCTIONAL_DEVICE_EXTENSION FdoExtension);
_IRQL_requires_max_(PASSIVE_LEVEL)
SCSIPORTAPI SCSIPORTAPI
VOID VOID
NTAPI NTAPI
ClassCleanupMediaChangeDetection( ClassCleanupMediaChangeDetection(
PFUNCTIONAL_DEVICE_EXTENSION FdoExtension); _In_ PFUNCTIONAL_DEVICE_EXTENSION FdoExtension);
_IRQL_requires_max_(PASSIVE_LEVEL)
VOID VOID
NTAPI NTAPI
ClassGetDeviceParameter( ClassGetDeviceParameter(
PFUNCTIONAL_DEVICE_EXTENSION FdoExtension, _In_ PFUNCTIONAL_DEVICE_EXTENSION FdoExtension,
PWSTR SubkeyName, _In_opt_ PWSTR SubkeyName,
PWSTR ParameterName, _In_ PWSTR ParameterName,
PULONG ParameterValue); _Inout_ PULONG ParameterValue);
_IRQL_requires_max_(PASSIVE_LEVEL)
NTSTATUS NTSTATUS
NTAPI NTAPI
ClassSetDeviceParameter( ClassSetDeviceParameter(
PFUNCTIONAL_DEVICE_EXTENSION FdoExtension, _In_ PFUNCTIONAL_DEVICE_EXTENSION FdoExtension,
PWSTR SubkeyName, _In_opt_ PWSTR SubkeyName,
PWSTR ParameterName, _In_ PWSTR ParameterName,
ULONG ParameterValue); _In_ ULONG ParameterValue);
#if (NTDDI_VERSION >= NTDDI_VISTA) #if (NTDDI_VERSION >= NTDDI_VISTA)
_IRQL_requires_max_(PASSIVE_LEVEL)
PFILE_OBJECT_EXTENSION PFILE_OBJECT_EXTENSION
NTAPI NTAPI
ClassGetFsContext( ClassGetFsContext(
PCOMMON_DEVICE_EXTENSION CommonExtension, _In_ PCOMMON_DEVICE_EXTENSION CommonExtension,
PFILE_OBJECT FileObject); _In_ PFILE_OBJECT FileObject);
_IRQL_requires_max_(DISPATCH_LEVEL)
VOID VOID
NTAPI NTAPI
ClassSendNotification( ClassSendNotification(
PFUNCTIONAL_DEVICE_EXTENSION FdoExtension, _In_ PFUNCTIONAL_DEVICE_EXTENSION FdoExtension,
const GUID *Guid, _In_ const GUID *Guid,
ULONG ExtraDataSize, _In_ ULONG ExtraDataSize,
PVOID ExtraData); _In_reads_bytes_opt_(ExtraDataSize) PVOID ExtraData);
#endif /* (NTDDI_VERSION >= NTDDI_VISTA) */ #endif /* (NTDDI_VERSION >= NTDDI_VISTA) */
static __inline static __inline
BOOLEAN BOOLEAN
PORT_ALLOCATED_SENSE( PORT_ALLOCATED_SENSE(
PFUNCTIONAL_DEVICE_EXTENSION FdoExtension, _In_ PFUNCTIONAL_DEVICE_EXTENSION FdoExtension,
PSCSI_REQUEST_BLOCK Srb) _In_ PSCSI_REQUEST_BLOCK Srb)
{ {
return ((BOOLEAN)((TEST_FLAG(Srb->SrbFlags, SRB_FLAGS_PORT_DRIVER_ALLOCSENSE) && return ((BOOLEAN)((TEST_FLAG(Srb->SrbFlags, SRB_FLAGS_PORT_DRIVER_ALLOCSENSE) &&
TEST_FLAG(Srb->SrbFlags, SRB_FLAGS_FREE_SENSE_BUFFER)) && TEST_FLAG(Srb->SrbFlags, SRB_FLAGS_FREE_SENSE_BUFFER)) &&
@ -1194,8 +1258,8 @@ PORT_ALLOCATED_SENSE(
static __inline static __inline
VOID VOID
FREE_PORT_ALLOCATED_SENSE_BUFFER( FREE_PORT_ALLOCATED_SENSE_BUFFER(
PFUNCTIONAL_DEVICE_EXTENSION FdoExtension, _In_ PFUNCTIONAL_DEVICE_EXTENSION FdoExtension,
PSCSI_REQUEST_BLOCK Srb) _In_ PSCSI_REQUEST_BLOCK Srb)
{ {
ASSERT(TEST_FLAG(Srb->SrbFlags, SRB_FLAGS_PORT_DRIVER_ALLOCSENSE)); ASSERT(TEST_FLAG(Srb->SrbFlags, SRB_FLAGS_PORT_DRIVER_ALLOCSENSE));
ASSERT(TEST_FLAG(Srb->SrbFlags, SRB_FLAGS_FREE_SENSE_BUFFER)); ASSERT(TEST_FLAG(Srb->SrbFlags, SRB_FLAGS_FREE_SENSE_BUFFER));
@ -1208,14 +1272,16 @@ FREE_PORT_ALLOCATED_SENSE_BUFFER(
return; return;
} }
_IRQL_requires_max_(PASSIVE_LEVEL)
typedef VOID typedef VOID
(NTAPI *PCLASS_SCAN_FOR_SPECIAL_HANDLER)( (NTAPI *PCLASS_SCAN_FOR_SPECIAL_HANDLER)(
PFUNCTIONAL_DEVICE_EXTENSION FdoExtension, _In_ PFUNCTIONAL_DEVICE_EXTENSION FdoExtension,
ULONG_PTR Data); _In_ ULONG_PTR Data);
_IRQL_requires_max_(PASSIVE_LEVEL)
VOID VOID
NTAPI NTAPI
ClassScanForSpecial( ClassScanForSpecial(
PFUNCTIONAL_DEVICE_EXTENSION FdoExtension, _In_ PFUNCTIONAL_DEVICE_EXTENSION FdoExtension,
CLASSPNP_SCAN_FOR_SPECIAL_INFO DeviceList[], _In_ CLASSPNP_SCAN_FOR_SPECIAL_INFO DeviceList[],
PCLASS_SCAN_FOR_SPECIAL_HANDLER Function); _In_ PCLASS_SCAN_FOR_SPECIAL_HANDLER Function);