30 #include "obsolete.tmh" 37 #pragma alloc_text(PAGE, ClassDeleteSrbLookasideList) 38 #pragma alloc_text(PAGE, ClassInitializeSrbLookasideList) 39 #pragma alloc_text(PAGE, ClasspInitializeCScanList) 67 TracePrint((
TRACE_LEVEL_ERROR, TRACE_FLAG_RW,
"ClassSplitRequest - driver requesting split to size that " 68 "hardware is unable to handle!\n"));
71 if (MaximumBytes < fdoData->HwMaxXferLen){
72 TracePrint((
TRACE_LEVEL_WARNING, TRACE_FLAG_RW,
"ClassSplitRequest - driver requesting smaller HwMaxXferLen " 122 PIRP originalIrp =
Irp->AssociatedIrp.MasterIrp;
128 TracePrint((
TRACE_LEVEL_WARNING, TRACE_FLAG_GENERAL,
"ClassIoCompleteAssociated is OBSOLETE !"));
153 irpStack->
Parameters.DeviceIoControl.IoControlCode :
173 #pragma warning(suppress:4213) // okay to cast Arg4 as a ulong for this use case 249 (originalIrp->Tail.Overlay.Thread !=
NULL)) {
284 "ClassIoCompleteAssociated: All partial IRPs complete %p\n",
287 if (fdoExtension->
CommonExtension.DriverExtension->InitData.ClassStartIo) {
296 UCHAR uniqueAddress = 0;
369 ULONG transferByteCount;
370 ULONG dataTransferLength;
388 transferByteCount = currentIrpStack->
Parameters.Read.Length;
390 }
else if (
Irp->MdlAddress !=
NULL) {
401 transferByteCount =
Irp->MdlAddress->ByteCount;
405 transferByteCount = 0;
425 srbHeader->SrbStatus = 0;
535 #pragma prefast(suppress:28194) // Srb may not be aliased if it is NULL 582 ULONG logicalBlockAddress;
599 logicalBlockAddress =
700 cdb->
CDB10.LogicalBlockByte0 = ((
PFOUR_BYTE)&logicalBlockAddress)->Byte3;
701 cdb->
CDB10.LogicalBlockByte1 = ((
PFOUR_BYTE)&logicalBlockAddress)->Byte2;
702 cdb->
CDB10.LogicalBlockByte2 = ((
PFOUR_BYTE)&logicalBlockAddress)->Byte1;
703 cdb->
CDB10.LogicalBlockByte3 = ((
PFOUR_BYTE)&logicalBlockAddress)->Byte0;
787 TracePrint((
TRACE_LEVEL_WARNING, TRACE_FLAG_GENERAL,
"ClasspInsertCScanList is OBSOLETE !"));
799 if(
Entry->BlockNumber <
t->BlockNumber) {
860 TracePrint((
TRACE_LEVEL_WARNING, TRACE_FLAG_GENERAL,
"ClassInsertCScanList is OBSOLETE !"));
865 entry->BlockNumber = BlockNumber;
872 if((LowPriority !=
TRUE) && (BlockNumber >
List->BlockNumber)) {
929 TracePrint((
TRACE_LEVEL_ERROR, TRACE_FLAG_GENERAL,
"ClassFreeOrReuseSrb: someone is trying to use an uninitialized SrbLookasideList !!!"));
966 if (CommonExtension->IsSrbLookasideListInitialized){
967 CommonExtension->IsSrbLookasideListInitialized =
FALSE;
971 TracePrint((
TRACE_LEVEL_WARNING, TRACE_FLAG_GENERAL,
"ClassDeleteSrbLookasideList: attempt to delete uninitialized or freed srblookasidelist"));
1016 NT_ASSERT(!CommonExtension->IsSrbLookasideListInitialized);
1017 if (!CommonExtension->IsSrbLookasideListInitialized){
1019 if (CommonExtension->IsFdo ==
TRUE) {
1054 CommonExtension->IsSrbLookasideListInitialized =
TRUE;
1088 List->CurrentSweep =
List->NextSweep;
1101 List->CurrentSweep.Flink->Blink = &(
List->CurrentSweep);
1102 List->CurrentSweep.Blink->Flink = &(
List->CurrentSweep);
#define SRB_TYPE_STORAGE_REQUEST_BLOCK
VOID RetryRequest(PDEVICE_OBJECT DeviceObject, PIRP Irp, PSCSI_REQUEST_BLOCK Srb, BOOLEAN Associated, LONGLONG TimeDelta100ns)
#define STATUS_INSUFFICIENT_RESOURCES
#define ClassAcquireRemoveLock(devobj, tag)
FORCEINLINE VOID SrbSetOriginalRequest(_In_ PVOID Srb, _In_opt_ PVOID OriginalRequest)
FORCEINLINE ULONG SrbGetSrbFlags(_In_ PVOID Srb)
_In_ PSCSI_REQUEST_BLOCK Srb
FORCEINLINE VOID SrbSetDataTransferLength(_In_ PVOID Srb, _In_ ULONG DataTransferLength)
struct _CSCAN_LIST_ENTRY * PCSCAN_LIST_ENTRY
#define STATUS_MORE_PROCESSING_REQUIRED
#define MmGetMdlVirtualAddress(_Mdl)
BOOLEAN InterpretSenseInfoWithoutHistory(_In_ PDEVICE_OBJECT Fdo, _In_opt_ PIRP OriginalRequest, _In_ PSCSI_REQUEST_BLOCK Srb, UCHAR MajorFunctionCode, ULONG IoDeviceCode, ULONG PreviousRetryCount, _Out_ NTSTATUS *Status, _Out_opt_ _Deref_out_range_(0, MAXIMUM_RETRY_FOR_SINGLE_IO_IN_100NS_UNITS) LONGLONG *RetryIn100nsUnits)
#define SRB_FLAGS_FREE_SENSE_BUFFER
FORCEINLINE VOID SrbSetQueueTag(_In_ PVOID Srb, _In_ ULONG QueueTag)
NTSTATUS InitializeStorageRequestBlock(_Inout_bytecount_(ByteSize) PSTORAGE_REQUEST_BLOCK Srb, _In_ USHORT AddressType, _In_ ULONG ByteSize, _In_ ULONG NumSrbExData,...)
#define IoIsErrorUserInduced(Status)
COMMON_DEVICE_EXTENSION CommonExtension
VOID NTAPI ClassReleaseQueue(_In_ PDEVICE_OBJECT Fdo)
#define POOL_NX_ALLOCATION
FORCEINLINE PCDB SrbGetCdb(_In_ PVOID Srb)
struct _CDB::_CDB10 CDB10
#define InsertTailList(ListHead, Entry)
FORCEINLINE VOID SrbSetSenseInfoBufferLength(_In_ PVOID Srb, _In_ UCHAR SenseInfoBufferLength)
#define SRB_FLAGS_DATA_IN
FORCEINLINE PVOID SrbGetDataBuffer(_In_ PVOID Srb)
#define TRACE_LEVEL_INFORMATION
#define STATUS_VERIFY_REQUIRED
FORCEINLINE VOID SrbClearSrbFlags(_In_ PVOID Srb, _In_ ULONG Flags)
VOID ClassRetryRequest(IN PDEVICE_OBJECT SelfDeviceObject, IN PIRP Irp, _In_ _In_range_(0, MAXIMUM_RETRY_FOR_SINGLE_IO_IN_100NS_UNITS) IN LONGLONG TimeDelta100ns)
#define SRB_STATUS(Status)
_Must_inspect_result_ FORCEINLINE BOOLEAN IsListEmpty(_In_ const LIST_ENTRY *ListHead)
#define IoSetCompletionRoutine(_Irp, _CompletionRoutine, _Context, _InvokeOnSuccess, _InvokeOnError, _InvokeOnCancel)
#define STATUS_IO_DEVICE_ERROR
struct SRB_ALIGN _STORAGE_REQUEST_BLOCK_HEADER * PSTORAGE_REQUEST_BLOCK_HEADER
_In_ PDEVICE_OBJECT DeviceObject
#define _Analysis_assume_(expr)
#define IO_DISK_INCREMENT
NTSTATUS(* NTAPI)(IN PFILE_FULL_EA_INFORMATION EaBuffer, IN ULONG EaLength, OUT PULONG ErrorOffset)
FORCEINLINE VOID SrbSetScsiStatus(_In_ PVOID Srb, _In_ UCHAR ScsiStatus)
VOID ClasspInitializeCScanList(IN PCSCAN_LIST List)
#define FREE_POOL(_PoolPtr)
struct _FUNCTIONAL_DEVICE_EXTENSION * PFUNCTIONAL_DEVICE_EXTENSION
#define CLASS_SRBEX_SCSI_CDB16_BUFFER_SIZE
VOID NTAPI ClassReleaseRemoveLock(_In_ PDEVICE_OBJECT DeviceObject, _In_opt_ PIRP Tag)
FORCEINLINE PLIST_ENTRY RemoveHeadList(_Inout_ PLIST_ENTRY ListHead)
#define SL_OVERRIDE_VERIFY_VOLUME
NTSTATUS NTAPI ClassIoComplete(IN PDEVICE_OBJECT Fdo, IN PIRP Irp, IN PVOID Context)
PFLT_MESSAGE_WAITER_QUEUE CONTAINING_RECORD(Csq, DEVICE_EXTENSION, IrpQueue)) -> WaiterQ.mLock) _IRQL_raises_(DISPATCH_LEVEL) VOID NTAPI FltpAcquireMessageWaiterLock(_In_ PIO_CSQ Csq, _Out_ PKIRQL Irql)
FORCEINLINE ULONG SrbGetDataTransferLength(_In_ PVOID Srb)
#define TEST_FLAG(Flags, Bit)
FORCEINLINE VOID SrbSetCdbLength(_In_ PVOID Srb, _In_ UCHAR CdbLength)
#define SRB_CLASS_FLAGS_PAGING
VOID NTAPI ExInitializeNPagedLookasideList(IN PNPAGED_LOOKASIDE_LIST Lookaside, IN PALLOCATE_FUNCTION Allocate OPTIONAL, IN PFREE_FUNCTION Free OPTIONAL, IN ULONG Flags, IN SIZE_T Size, IN ULONG Tag, IN USHORT Depth)
#define ClasspAllocateSrb(ext)
#define NT_SUCCESS(StatCode)
VOID ClasspBuildRequestEx(_In_ PFUNCTIONAL_DEVICE_EXTENSION FdoExtension, _In_ PIRP Irp, _In_ __drv_aliasesMem PSCSI_REQUEST_BLOCK Srb)
FORCEINLINE VOID SrbSetTimeOutValue(_In_ PVOID Srb, _In_ ULONG TimeOutValue)
PSTORAGE_ADAPTER_DESCRIPTOR AdapterDescriptor
#define SRB_FLAGS_DISABLE_SYNCH_TRANSFER
VOID ClasspStartNextSweep(PCSCAN_LIST List)
#define STORAGE_ADDRESS_TYPE_BTL8
struct _SCSI_REQUEST_BLOCK SCSI_REQUEST_BLOCK
VOID ClassInsertCScanList(IN PCSCAN_LIST List, IN PIRP Irp, IN ULONGLONG BlockNumber, IN BOOLEAN LowPriority)
_Must_inspect_result_ _In_ WDFDEVICE Fdo
#define SRB_FLAGS_DISABLE_DISCONNECT
#define SRB_STATUS_QUEUE_FROZEN
PIRP ClassRemoveCScanList(IN PCSCAN_LIST List)
FORCEINLINE VOID FREE_PORT_ALLOCATED_SENSE_BUFFER(_In_ PCDROM_DEVICE_EXTENSION DeviceExtension, _In_ PSCSI_REQUEST_BLOCK Srb)
#define InterlockedDecrement
FORCEINLINE VOID SrbSetRequestAttribute(_In_ PVOID Srb, _In_ UCHAR RequestAttribute)
_Must_inspect_result_ _In_ WDFCMRESLIST List
FORCEINLINE BOOLEAN PORT_ALLOCATED_SENSE(_In_ PCDROM_DEVICE_EXTENSION DeviceExtension, _In_ PSCSI_REQUEST_BLOCK Srb)
NTSTATUS ServiceTransferRequest(PDEVICE_OBJECT Fdo, PIRP Irp, BOOLEAN PostToDpc)
__drv_aliasesMem FORCEINLINE PIO_STACK_LOCATION IoGetNextIrpStackLocation(_In_ PIRP Irp)
#define TRACE_LEVEL_ERROR
#define TRACE_LEVEL_WARNING
#define Int64ShrlMod32(a, b)
struct _CSCAN_LIST_ENTRY CSCAN_LIST_ENTRY
__drv_aliasesMem FORCEINLINE PIO_STACK_LOCATION IoGetCurrentIrpStackLocation(_In_ PIRP Irp)
BOOLEAN IsSrbLookasideListInitialized
#define InitializeListHead(ListHead)
#define SRB_SIMPLE_TAG_REQUEST
#define SRB_FLAGS_DATA_OUT
#define __drv_freesMem(kind)
VOID NTAPI KeRaiseIrql(KIRQL NewIrql, PKIRQL OldIrql)
#define SRB_FLAGS_ADAPTER_CACHE_ENABLE
VOID NTAPI ClassSplitRequest(_In_ PDEVICE_OBJECT Fdo, _In_ PIRP Irp, _In_ ULONG MaximumBytes)
_In_ ULONG NumberElements
FORCEINLINE VOID SrbSetDataBuffer(_In_ PVOID Srb, _In_opt_ __drv_aliasesMem PVOID DataBuffer)
struct tagContext Context
VOID NTAPI IoFreeIrp(IN PIRP Irp)
#define SRB_FUNCTION_EXECUTE_SCSI
NTSTATUS NTAPI ClassIoCompleteAssociated(IN PDEVICE_OBJECT Fdo, IN PIRP Irp, IN PVOID Context)
FORCEINLINE VOID SrbSetSenseInfoBuffer(_In_ PVOID Srb, _In_opt_ PVOID SenseInfoBuffer)
FORCEINLINE VOID SrbSetSrbFlags(_In_ PVOID Srb, _In_ ULONG Flags)
#define RtlZeroMemory(Destination, Length)
#define SRB_STATUS_SUCCESS
VOID NTAPI IoSetHardErrorOrVerifyDevice(IN PIRP Irp, IN PDEVICE_OBJECT DeviceObject)
#define ClasspFreeSrb(ext, srb)
FORCEINLINE UCHAR GET_FDO_EXTENSON_SENSE_DATA_LENGTH(_In_ PFUNCTIONAL_DEVICE_EXTENSION FdoExtension)
VOID NTAPI KeLowerIrql(KIRQL NewIrql)
struct _NAMED_PIPE_CREATE_PARAMETERS * Parameters
NTSTATUS NTAPI ClassBuildRequest(_In_ PDEVICE_OBJECT Fdo, _In_ PIRP Irp)
VOID NTAPI ExDeleteNPagedLookasideList(IN PNPAGED_LOOKASIDE_LIST Lookaside)
VOID NTAPI ClassCompleteRequest(_In_ PDEVICE_OBJECT DeviceObject, _In_ PIRP Irp, _In_ CCHAR PriorityBoost)
FORCEINLINE VOID SrbSetQueueSortKey(_In_ PVOID Srb, _In_ ULONG QueueSortKey)
static SERVICE_STATUS status
VOID ClasspInsertCScanList(IN PLIST_ENTRY ListHead, IN PCSCAN_LIST_ENTRY Entry)
base of all file and directory entries
_IRQL_requires_max_(PASSIVE_LEVEL)
VOID ClassFreeOrReuseSrb(IN PFUNCTIONAL_DEVICE_EXTENSION FdoExtension, IN __drv_freesMem(mem) PSCSI_REQUEST_BLOCK Srb)
#define IRP_SYNCHRONOUS_PAGING_IO
#define SRB_FLAGS_QUEUE_ACTION_ENABLE
#define IRP_MJ_DEVICE_CONTROL
VOID NTAPI IoStartNextPacket(IN PDEVICE_OBJECT DeviceObject, IN BOOLEAN Cancelable)