28 #include "xferpkt.tmh" 32 #pragma alloc_text(PAGE, InitializeTransferPackets) 33 #pragma alloc_text(PAGE, DestroyAllTransferPackets) 34 #pragma alloc_text(PAGE, SetupEjectionTransferPacket) 35 #pragma alloc_text(PAGE, SetupModeSenseTransferPacket) 36 #pragma alloc_text(PAGE, CleanupTransferPacketToWorkingSetSizeWorker) 37 #pragma alloc_text(PAGE, ClasspSetupPopulateTokenTransferPacket) 57 ULONG maxOutstandingIOPerLUN;
58 ULONG minWorkingSetTransferPackets;
59 ULONG maxWorkingSetTransferPackets;
68 NT_ASSERT(adapterDesc->MaximumTransferLength);
70 hwMaxPages = adapterDesc->MaximumPhysicalPages ? adapterDesc->MaximumPhysicalPages-1 : 0;
113 (
PVOID *)&devIoCapabilityDesc);
116 maxOutstandingIOPerLUN = devIoCapabilityDesc->LunMaxIoCount;
120 fdoData->MaxOutstandingIOPerLUN = maxOutstandingIOPerLUN;
127 fdoData->MaxOutstandingIOPerLUN = 0;
153 2 * maxOutstandingIOPerLUN);
164 minWorkingSetTransferPackets =
167 maxOutstandingIOPerLUN));
170 2 * maxOutstandingIOPerLUN);
184 if (workingSet->XferPacketsWorkingSetMinimum != 0)
194 if (workingSet->XferPacketsWorkingSetMaximum != 0)
231 #if (NTDDI_VERSION >= NTDDI_WINBLUE) 232 if ((fdoExt->MiniportDescriptor !=
NULL) &&
234 (fdoExt->MiniportDescriptor->ExtraIoInfoSupported ==
TRUE)) {
324 #pragma warning(suppress:28195) // This function may not allocate memory in some error cases. 338 TracePrint((
TRACE_LEVEL_ERROR, TRACE_FLAG_RW,
"Integer overflow in calculating transfer packet size."));
348 if (newPkt ==
NULL) {
355 #if (NTDDI_VERSION >= NTDDI_WINBLUE) 356 if ((fdoExt->MiniportDescriptor !=
NULL) &&
358 (fdoExt->MiniportDescriptor->ExtraIoInfoSupported ==
TRUE)) {
387 #pragma prefast(suppress:6014, "The allocated memory that Pkt->Srb points to will be freed in DestroyTransferPacket().") 410 TracePrint((
TRACE_LEVEL_WARNING, TRACE_FLAG_RW,
"Failed to allocate IRP for transfer packet."));
429 TracePrint((
TRACE_LEVEL_WARNING, TRACE_FLAG_RW,
"Failed to allocate MDL for transfer packet."));
445 ULONG historyByteCount = 0;
457 TracePrint((
TRACE_LEVEL_WARNING, TRACE_FLAG_RW,
"Failed to allocate MDL for transfer packet."));
483 if (newPkt !=
NULL) {
574 if (workItem && !isRemoved) {
578 "EnqueueFreeTransferPacket: Device (%p), queuing work item to clean up free transfer packets.\n",
599 "EnqueueFreeTransferPacket: Device (%p), Failed to allocate memory for the work item.\n",
622 TracePrint((
TRACE_LEVEL_INFORMATION, TRACE_FLAG_RW,
"Exiting stress, lazily freeing one of %d/%d packets from node %d.",
638 "Extremely unlikely condition (non-fatal): %d packets dequeued at once for Fdo %p. NumTotalTransferPackets=%d (2). Node=%d",
674 slistEntry->Next =
NULL;
689 pkt = NewTransferPacket(
Fdo);
696 TracePrint((
TRACE_LEVEL_WARNING, TRACE_FLAG_RW,
"DequeueFreeTransferPacket: packet allocation failed"));
730 ULONG numTransferBlocks;
760 if (logicalBlockAddr.
QuadPart > 0xFFFFFFFF) {
790 pCdb->
CDB10.TransferBlocksMsb = ((
PFOUR_BYTE)&numTransferBlocks)->Byte1;
791 pCdb->
CDB10.TransferBlocksLsb = ((
PFOUR_BYTE)&numTransferBlocks)->Byte0;
831 #if !defined(__REACTOS__) && NTDDI_VERSION >= NTDDI_WINBLUE 939 ULONG transferLength;
1014 (
LONG)transferLength);
1104 LONG numPacketsRemaining;
1107 UCHAR uniqueAddr = 0;
1124 TracePrint((
TRACE_LEVEL_INFORMATION, TRACE_FLAG_RW,
"Freeing port-allocated sense buffer for pkt %ph.", pkt));
1165 if (numPacketsRemaining > 0){
1200 if (pkt->
Irp->PendingReturned){
1255 TracePrint((
TRACE_LEVEL_INFORMATION, TRACE_FLAG_RW,
"SRB_FLAGS_DONT_START_NEXT_PACKET should never be set here (?)"));
1367 PVOID ModeSenseBuffer,
1368 UCHAR ModeSenseBufferLen,
1427 PVOID ModeSelectBuffer,
1428 UCHAR ModeSelectBufferLen,
1482 ULONG ReadCapacityBufferLen,
1515 if (Use16ByteCdb ==
TRUE) {
1532 #if !defined(__REACTOS__) && NTDDI_VERSION >= NTDDI_WINBLUE 1644 if (LimitNumPktToDelete) {
1648 TracePrint((
TRACE_LEVEL_INFORMATION, TRACE_FLAG_RW,
"CleanupTransferPacketToWorkingSetSize (%p): Exiting stress, block freeing %d packets.",
Fdo, requiredNumPktToDelete));
1663 (requiredNumPktToDelete--)){
1672 "Extremely unlikely condition (non-fatal): %d packets dequeued at once for Fdo %p. NumTotalTransferPackets=%d (1). Node=%d",
1683 while (slistEntry) {
1697 ClasspSetupPopulateTokenTransferPacket(
1738 "ClasspSetupPopulateTokenTransferPacket (%p): Entering function. Irp %p\n",
1743 fdoData = fdoExt->PrivateFdoData;
1785 "ClasspSetupPopulateTokenTransferPacket (%p): Exiting function with Irp %p\n",
1797 ClasspSetupReceivePopulateTokenInformationTransferPacket(
1835 "ClasspSetupReceivePopulateTokenInformationTransferPacket (%p): Entering function. Irp %p\n",
1840 fdoData = fdoExt->PrivateFdoData;
1882 "ClasspSetupReceivePopulateTokenInformationTransferPacket (%p): Exiting function with Irp %p\n",
1894 ClasspSetupWriteUsingTokenTransferPacket(
1936 "ClasspSetupWriteUsingTokenTransferPacket (%p): Entering function. Irp %p\n",
1941 fdoData = fdoExt->PrivateFdoData;
1983 "ClasspSetupWriteUsingTokenTransferPacket (%p): Exiting function with Irp %p\n",
1995 ClasspSetupReceiveWriteUsingTokenInformationTransferPacket(
2034 "ClasspSetupReceiveWriteUsingTokenInformationTransferPacket (%p): Entering function. Irp %p\n",
2039 fdoData = fdoExt->PrivateFdoData;
2081 "ClasspSetupReceiveWriteUsingTokenInformationTransferPacket (%p): Exiting function with Irp %p\n",
#define KeQuerySystemTime(t)
NTSTATUS SubmitTransferPacket(PTRANSFER_PACKET Pkt)
VOID ClasspWriteUsingTokenTransferPacketDone(_In_ PVOID Context)
#define SCSIOP_WRITE_USING_TOKEN
#define SRB_TYPE_STORAGE_REQUEST_BLOCK
#define SRB_FLAGS_DISABLE_AUTOSENSE
ULONG dwOSVersionInfoSize
return STATUS_NOT_SUPPORTED
VOID SetupModeSenseTransferPacket(TRANSFER_PACKET *Pkt, PKEVENT SyncEventPtr, PVOID ModeSenseBuffer, UCHAR ModeSenseBufferLen, UCHAR PageMode, UCHAR SubPage, PIRP OriginalIrp, UCHAR PageControl)
NTKRNLVISTAAPI VOID IoSetMasterIrpStatus(_Inout_ PIRP MasterIrp, _In_ NTSTATUS Status)
FORCEINLINE UCHAR SrbGetSenseInfoBufferLength(_In_ PVOID Srb)
enum _STORAGE_PROPERTY_ID STORAGE_PROPERTY_ID
VOID ClasspCompleteIdleRequest(PFUNCTIONAL_DEVICE_EXTENSION FdoExtension)
_In_ PTRANSFER_PACKET Pkt
* PSTORAGE_ADAPTER_DESCRIPTOR
#define STATUS_INSUFFICIENT_RESOURCES
_In_ ULONG _In_ ULONG _In_ ULONG Length
#define ClassAcquireRemoveLock(devobj, tag)
_In_ size_t _In_ UCHAR PageMode
struct _SRB_HISTORY_ITEM SRB_HISTORY_ITEM
FORCEINLINE VOID SrbAssignSrbFlags(_In_ PVOID Srb, _In_ ULONG Flags)
BOOLEAN DriverUsesStartIO
FORCEINLINE VOID SrbSetOriginalRequest(_In_ PVOID Srb, _In_opt_ PVOID OriginalRequest)
NTSTATUS NTAPI RtlGetVersion(IN OUT PRTL_OSVERSIONINFOW lpVersionInformation)
FORCEINLINE ULONG SrbGetSrbFlags(_In_ PVOID Srb)
VOID NTAPI IoReuseIrp(IN OUT PIRP Irp, IN NTSTATUS Status)
struct _CDB::_MEDIA_REMOVAL MEDIA_REMOVAL
PSTORAGE_REQUEST_BLOCK_HEADER SrbTemplate
FORCEINLINE VOID SrbSetDataTransferLength(_In_ PVOID Srb, _In_ ULONG DataTransferLength)
IO_PAGING_PRIORITY FASTCALL IoGetPagingIoPriority(IN PIRP Irp)
#define DBGLOGFLUSHINFO(_fdoData, _isIO, _isFUA, _isFlush)
#define STATUS_MORE_PROCESSING_REQUIRED
struct _SCSI_REQUEST_BLOCK * PSCSI_REQUEST_BLOCK
LARGE_INTEGER ThrottleStartTime
PDRIVER_STARTIO ClassStartIo
#define SRB_FLAGS_NO_QUEUE_FREEZE
#define SCSIOP_MODE_SENSE
#define UNREFERENCED_PARAMETER(P)
#define MIN_WORKINGSET_TRANSFER_PACKETS_Server_LowerBound
#define MAX_CLEANUP_TRANSFER_PACKETS_AT_ONCE
#define HISTORYINITIALIZERETRYLOGS(_packet)
ULONG ClassMaxInterleavePerCriticalIo
struct _FUNCTIONAL_DEVICE_EXTENSION * PartitionZeroExtension
#define IoIsErrorUserInduced(Status)
COMMON_DEVICE_EXTENSION CommonExtension
UCHAR NumThinProvisioningRetries
#define REVERSE_BYTES(Destination, Source)
#define NUM_WRITE_USING_TOKEN_RETRIES
VOID NTAPI ClassReleaseQueue(_In_ PDEVICE_OBJECT Fdo)
BOOLEAN LoggedTURFailureSinceLastIO
VOID NTAPI KeAcquireSpinLock(PKSPIN_LOCK SpinLock, PKIRQL OldIrql)
FORCEINLINE LARGE_INTEGER ClasspGetCurrentTime(VOID)
VOID ClasspReceiveWriteUsingTokenInformationTransferPacketDone(_In_ POFFLOAD_WRITE_CONTEXT OffloadWriteContext)
#define MIN_WORKINGSET_TRANSFER_PACKETS_Client
_In_opt_ PVOID _In_ PIO_WORKITEM IoWorkItem
ULONG LocalMinWorkingSetTransferPackets
PSTORAGE_REQUEST_BLOCK_HEADER Srb
PIRP DequeueDeferredClientIrp(PDEVICE_OBJECT Fdo)
UCHAR NumIoTimeoutRetries
VOID SetupModeSelectTransferPacket(TRANSFER_PACKET *Pkt, PKEVENT SyncEventPtr, PVOID ModeSelectBuffer, UCHAR ModeSelectBufferLen, BOOLEAN SavePages, PIRP OriginalIrp)
PCONTINUATION_ROUTINE ContinuationRoutine
FORCEINLINE PCDB SrbGetCdb(_In_ PVOID Srb)
NTKRNLVISTAAPI USHORT NTAPI KeGetCurrentNodeNumber(VOID)
LIST_ENTRY AllPktsListEntry
struct _CDB::_CDB10 CDB10
LIST_ENTRY AllTransferPacketsList
#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 DEV_USE_16BYTE_CDB
PIO_WORKITEM NTAPI IoAllocateWorkItem(IN PDEVICE_OBJECT DeviceObject)
LONG NTAPI KeSetEvent(IN PKEVENT Event, IN KPRIORITY Increment, IN BOOLEAN Wait)
* PSTORAGE_DEVICE_IO_CAPABILITY_DESCRIPTOR
VOID NTAPI IoFreeWorkItem(IN PIO_WORKITEM IoWorkItem)
#define SRB_STATUS(Status)
_Must_inspect_result_ FORCEINLINE BOOLEAN IsListEmpty(_In_ const LIST_ENTRY *ListHead)
LARGE_INTEGER TargetLocationCopy
#define SRB_FLAGS_DONT_START_NEXT_PACKET
LARGE_INTEGER LastIoCompletionTime
struct _CDB::_CDB16 CDB16
#define IoSetCompletionRoutine(_Irp, _CompletionRoutine, _Context, _InvokeOnSuccess, _InvokeOnError, _InvokeOnCancel)
FORCEINLINE VOID FREE_PORT_ALLOCATED_SENSE_BUFFER_EX(_In_ PFUNCTIONAL_DEVICE_EXTENSION FdoExtension, _In_ PSTORAGE_REQUEST_BLOCK_HEADER Srb)
FORCEINLINE BOOLEAN RemoveEntryList(_In_ PLIST_ENTRY Entry)
VOID SetupReadWriteTransferPacket(PTRANSFER_PACKET Pkt, PVOID Buf, ULONG Len, LARGE_INTEGER DiskLocation, PIRP OriginalIrp)
VOID NTAPI IoBuildPartialMdl(IN PMDL SourceMdl, IN PMDL TargetMdl, IN PVOID VirtualAddress, IN ULONG Length)
#define _Analysis_assume_(expr)
_In_ ULONG _In_ UCHAR _In_ UCHAR PageControl
LARGE_INTEGER ThrottleStopTime
#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)
_In_ PTRANSFER_PACKET _In_ ULONG _In_ PIRP _In_ ULONG ListIdentifier
#define TRACE_LEVEL_VERBOSE
#define STATUS_INTEGER_OVERFLOW
#define FREE_POOL(_PoolPtr)
#define InterlockedExchangeNoFence64
PVOID DefaultStorageRequestBlockAllocateRoutine(_In_ CLONG ByteSize)
NTKRNLVISTAAPI VOID NTAPI IoQueueWorkItemEx(_Inout_ PIO_WORKITEM IoWorkItem, _In_ PIO_WORKITEM_ROUTINE_EX WorkerRoutine, _In_ WORK_QUEUE_TYPE QueueType, _In_opt_ __drv_aliasesMem PVOID Context)
#define SERVICE_ACTION_POPULATE_TOKEN
#define _IRQL_requires_min_(irql)
#define VER_NT_DOMAIN_CONTROLLER
NTSTATUS NTAPI TransferPktComplete(IN PDEVICE_OBJECT NullFdo, IN PIRP Irp, IN PVOID Context)
FORCEINLINE BOOLEAN ClasspIsIdleRequest(PIRP Irp)
VOID NTAPI ClassReleaseRemoveLock(_In_ PDEVICE_OBJECT DeviceObject, _In_opt_ PIRP Tag)
WDF_INTERRUPT_PRIORITY priority
FORCEINLINE BOOLEAN PORT_ALLOCATED_SENSE_EX(_In_ PFUNCTIONAL_DEVICE_EXTENSION FdoExtension, _In_ PSTORAGE_REQUEST_BLOCK_HEADER Srb)
struct _CDB::_RECEIVE_TOKEN_INFORMATION RECEIVE_TOKEN_INFORMATION
#define NUM_DRIVECAPACITY_RETRIES
#define _IRQL_requires_same_
#define NUM_LOCKMEDIAREMOVAL_RETRIES
VOID(* PCONTINUATION_ROUTINE)(_In_ PVOID Context)
struct _CDB::_START_STOP START_STOP
#define InterlockedExchangeAdd
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)
FORCEINLINE VOID InitializeSListHead(_Out_ PSLIST_HEADER SListHead)
struct _CDB::_MODE_SELECT MODE_SELECT
#define TEST_FLAG(Flags, Bit)
struct _CDB::_MODE_SENSE MODE_SENSE
FORCEINLINE VOID SrbSetCdbLength(_In_ PVOID Srb, _In_ UCHAR CdbLength)
LIST_ENTRY DeferredClientIrpList
#define MIN_INITIAL_TRANSFER_PACKETS
#define NUM_POPULATE_TOKEN_RETRIES
struct _SRB_HISTORY * PSRB_HISTORY
#define SRB_CLASS_FLAGS_PAGING
enum _IO_PAGING_PRIORITY IO_PAGING_PRIORITY
VOID NTAPI CleanupTransferPacketToWorkingSetSizeWorker(_In_ PVOID Fdo, _In_opt_ PVOID Context, _In_ PIO_WORKITEM IoWorkItem)
PVOID ContinuationContext
FORCEINLINE VOID ClasspSrbSetOriginalIrp(_In_ PSTORAGE_REQUEST_BLOCK_HEADER Srb, _In_ PIRP Irp)
VOID ClasspPerfIncrementSuccessfulIo(IN PFUNCTIONAL_DEVICE_EXTENSION FdoExtension)
#define NUM_MODESELECT_RETRIES
#define NT_SUCCESS(StatCode)
#define SERVICE_ACTION_RECEIVE_TOKEN_INFORMATION
PSRB_HISTORY RetryHistory
FORCEINLINE VOID SrbSetTimeOutValue(_In_ PVOID Srb, _In_ ULONG TimeOutValue)
PSTORAGE_ADAPTER_DESCRIPTOR AdapterDescriptor
struct _CDB::_TOKEN_OPERATION TOKEN_OPERATION
#define SENSE_BUFFER_SIZE_EX
#define SRB_FLAGS_DISABLE_SYNCH_TRANSFER
struct _TRANSFER_PACKET * PTRANSFER_PACKET
#define HISTORYLOGSENDPACKET(_packet)
_In_ PREAD_CAPACITY_DATA ReadCapacityBuffer
#define RTL_SIZEOF_THROUGH_FIELD(type, field)
struct _SCSI_REQUEST_BLOCK SCSI_REQUEST_BLOCK
VOID NTAPI IoFreeMdl(PMDL Mdl)
#define STATUS_UNSUCCESSFUL
#define ExAllocatePoolWithTag(hernya, size, tag)
_Must_inspect_result_ _In_ WDFDEVICE Fdo
#define BYTES_TO_PAGES(Size)
PPNL_SLIST_HEADER FreeTransferPacketsLists
#define NUM_MODESENSE_RETRIES
#define DBGLOGSENDPACKET(_pkt)
#define SRB_FLAGS_NO_DATA_TRANSFER
VOID SetupDriveCapacityTransferPacket(TRANSFER_PACKET *Pkt, PVOID ReadCapacityBuffer, ULONG ReadCapacityBufferLen, PKEVENT SyncEventPtr, PIRP OriginalIrp, BOOLEAN Use16ByteCdb)
#define CLASS_TAG_PRIVATE_DATA
#define SRB_STATUS_QUEUE_FROZEN
BOOLEAN IdlePrioritySupported
#define InterlockedDecrement
FORCEINLINE VOID SrbSetRequestAttribute(_In_ PVOID Srb, _In_ UCHAR RequestAttribute)
#define SCSIOP_RECEIVE_ROD_TOKEN_INFORMATION
PCLASS_DRIVER_EXTENSION DriverExtension
#define SCSIOP_READ_CAPACITY16
#define SCSIOP_MEDIUM_REMOVAL
PCLASS_WORKING_SET WorkingSet
#define SERVICE_ACTION_WRITE_USING_TOKEN
#define SCSIOP_POPULATE_TOKEN
#define InterlockedPushEntrySList(SListHead, SListEntry)
#define HISTORYLOGRETURNEDPACKET(_packet)
ULONG NumHighPriorityPagingIo
NTSTATUS ServiceTransferRequest(PDEVICE_OBJECT Fdo, PIRP Irp, BOOLEAN PostToDpc)
_In_ PTRANSFER_PACKET _In_ ULONG _In_ PIRP OriginalIrp
NTSTATUS CreateStorageRequestBlock(_Inout_ PSTORAGE_REQUEST_BLOCK *Srb, _In_ USHORT AddressType, _In_opt_ PSRB_ALLOCATE_ROUTINE AllocateRoutine, _Inout_opt_ ULONG *ByteSize, _In_ ULONG NumSrbExData,...)
FORCEINLINE VOID SimplePushSlist(SINGLE_LIST_ENTRY *SListHdr, SINGLE_LIST_ENTRY *SListEntry)
__drv_aliasesMem FORCEINLINE PIO_STACK_LOCATION IoGetNextIrpStackLocation(_In_ PIRP Irp)
#define MmPrepareMdlForReuse(_Mdl)
struct _OSVERSIONINFOEXW OSVERSIONINFOEXW
#define TRACE_LEVEL_ERROR
#define TRACE_LEVEL_WARNING
PMDL NTAPI IoAllocateMdl(IN PVOID VirtualAddress, IN ULONG Length, IN BOOLEAN SecondaryBuffer, IN BOOLEAN ChargeQuota, IN PIRP Irp)
UCHAR MaxNumberOfIoRetries
LARGE_INTEGER LongestThrottlePeriod
#define Int64ShrlMod32(a, b)
__drv_aliasesMem FORCEINLINE PIO_STACK_LOCATION IoGetCurrentIrpStackLocation(_In_ PIRP Irp)
ULONG LowMemRetry_remainingBufLen
#define InterlockedIncrement
VOID DestroyTransferPacket(_In_ __drv_freesMem(mem) PTRANSFER_PACKET Pkt)
#define DBGCHECKRETURNEDPKT(_pkt)
FORCEINLINE PVOID SrbGetSenseInfoBuffer(_In_ PVOID Srb)
VOID CleanupTransferPacketToWorkingSetSize(_In_ PDEVICE_OBJECT Fdo, _In_ BOOLEAN LimitNumPktToDelete, _In_ ULONG Node)
#define InitializeListHead(ListHead)
#define MIN_WORKINGSET_TRANSFER_PACKETS_Server_UpperBound
#define SRB_SIMPLE_TAG_REQUEST
#define SRB_FLAGS_DATA_OUT
PTRANSFER_PACKET DequeueFreeTransferPacketEx(_In_ PDEVICE_OBJECT Fdo, _In_ BOOLEAN AllocIfNeeded, _In_ ULONG Node)
PDEVICE_OBJECT LowerDeviceObject
NTSTATUS NTAPI IoCallDriver(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp)
VOID ClasspPopulateTokenTransferPacketDone(_In_ PVOID Context)
#define KeReleaseSpinLock(sl, irql)
#define __drv_freesMem(kind)
VOID NTAPI KeRaiseIrql(KIRQL NewIrql, PKIRQL OldIrql)
BOOLEAN InterpretTransferPacketError(PTRANSFER_PACKET Pkt)
#define SRB_FLAGS_ADAPTER_CACHE_ENABLE
VOID DestroyAllTransferPackets(PDEVICE_OBJECT Fdo)
#define START_UNIT_TIMEOUT
#define SCSIOP_READ_CAPACITY
VOID HistoryInitializeRetryLogs(_Out_ PSRB_HISTORY History, ULONG HistoryCount)
BOOLEAN StepLowMemRetry(PTRANSFER_PACKET Pkt)
FORCEINLINE SINGLE_LIST_ENTRY * SimplePopSlist(SINGLE_LIST_ENTRY *SListHdr)
VOID SetupEjectionTransferPacket(TRANSFER_PACKET *Pkt, BOOLEAN PreventMediaRemoval, PKEVENT SyncEventPtr, PIRP OriginalIrp)
FORCEINLINE VOID SrbSetDataBuffer(_In_ PVOID Srb, _In_opt_ __drv_aliasesMem PVOID DataBuffer)
NTSTATUS InitializeTransferPackets(PDEVICE_OBJECT Fdo)
struct tagContext Context
VOID NTAPI IoFreeIrp(IN PIRP Irp)
#define SRB_FUNCTION_EXECUTE_SCSI
#define MAX_WORKINGSET_TRANSFER_PACKETS_Server
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
FORCEINLINE VOID SimpleInitSlistHdr(SINGLE_LIST_ENTRY *SListHdr)
SENSE_DATA_EX SrbErrorSenseData
#define RtlCopyMemory(Destination, Source, Length)
VOID NTAPI IoSetHardErrorOrVerifyDevice(IN PIRP Irp, IN PDEVICE_OBJECT DeviceObject)
#define MAX_WORKINGSET_TRANSFER_PACKETS_Client
PIRP NTAPI IoAllocateIrp(IN CCHAR StackSize, IN BOOLEAN ChargeQuota)
ULONG MaxInterleavedNormalIo
PCLASS_INTERPRET_SENSE_INFO2 InterpretSenseInfo
#define InterlockedPopEntrySList(SListHead)
NTKRNLVISTAAPI USHORT NTAPI KeQueryHighestNodeNumber(VOID)
PTRANSFER_PACKET DequeueFreeTransferPacket(PDEVICE_OBJECT Fdo, BOOLEAN AllocIfNeeded)
VOID NTAPI KeLowerIrql(KIRQL NewIrql)
struct _NAMED_PIPE_CREATE_PARAMETERS * Parameters
_IRQL_requires_same_ _In_ CLONG ByteSize
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
#define DBGLOGRETURNPACKET(_pkt)
#define MAX_OUTSTANDING_IO_PER_LUN_DEFAULT
VOID EnqueueFreeTransferPacket(PDEVICE_OBJECT Fdo, __drv_aliasesMem PTRANSFER_PACKET Pkt)
VOID ClasspReceivePopulateTokenInformationTransferPacketDone(_In_ PVOID Context)
_IRQL_requires_max_(APC_LEVEL)
#define SET_FLAG(Flags, Bit)
#define SCSIOP_START_STOP_UNIT
LARGE_INTEGER LastNonIdleIoTime
#define REVERSE_BYTES_QUAD(Destination, Source)
#define IRP_SYNCHRONOUS_PAGING_IO
BOOLEAN RetryTransferPacket(PTRANSFER_PACKET Pkt)
BOOLEAN CompleteOriginalIrpWhenLastPacketCompletes
#define SCSIOP_MODE_SELECT
#define _In_reads_bytes_(size)
VOID NTAPI IoStartNextPacket(IN PDEVICE_OBJECT DeviceObject, IN BOOLEAN Cancelable)
ULONG LocalMaxWorkingSetTransferPackets