28#define TAG_GLOBAL_DATA 'DGtS'
29#define TAG_INIT_DATA 'DItS'
30#define TAG_DEVICE_RELATION 'RDtS'
31#define TAG_DEVICE_ID 'DItS'
32#define TAG_DEVICE_TEXT 'XTtS'
33#define TAG_MINIPORT_DATA 'DMtS'
34#define TAG_ACCRESS_RANGE 'RAtS'
35#define TAG_RESOURCE_LIST 'LRtS'
36#define TAG_ADDRESS_MAPPING 'MAtS'
37#define TAG_INQUIRY_DATA 'QItS'
38#define TAG_LUN_EXTENSION 'ELtS'
39#define TAG_REPORT_LUN_DATA 'LRtS'
40#define TAG_SENSE_DATA 'NStS'
41#define TAG_QUEUED_REQUEST 'RQtS'
42#define TAG_SRB_EXTENSION 'XStS'
44#define SET_FLAG(Flags, Bit) ((Flags) |= (Bit))
45#define CLEAR_FLAG(Flags, Bit) ((Flags) &= ~(Bit))
46#define TEST_FLAG(Flags, Bit) (((Flags) & (Bit)) != 0)
72#define HW_INIT_DATA_SIZE_PHYSICAL FIELD_OFFSET(HW_INITIALIZATION_DATA, HwFreeAdapterResources)
75#define HW_INIT_DATA_SIZE_VIRTUAL_LEGACY FIELD_OFFSET(HW_INITIALIZATION_DATA, HwTracingEnabled)
603 ULONG SystemIoBusNumber,
_In_ PSCSI_REQUEST_BLOCK Srb
_In_ ULONG _In_ BOOLEAN _In_ ULONG _In_ UCHAR _In_ UCHAR _In_ UCHAR Lun
_In_ HANDLE _In_ CONST PDXGKMDT_OPM_GET_INFO_PARAMETERS Parameters
DRIVER_INITIALIZE DriverEntry
VOID(NTAPI * PHW_TIMER)(IN PVOID DeviceExtension)
enum _SCSI_ADAPTER_CONTROL_TYPE SCSI_ADAPTER_CONTROL_TYPE
enum _SCSI_ADAPTER_CONTROL_STATUS SCSI_ADAPTER_CONTROL_STATUS
struct _PDO_IO_FLOW_CONTROL * PPDO_IO_FLOW_CONTROL
struct _FDO_DEVICE_EXTENSION FDO_DEVICE_EXTENSION
struct _LUN_DESCRIPTOR LUN_DESCRIPTOR
NTSTATUS NTAPI PortPdoScsi(_In_ PDEVICE_OBJECT DeviceObject, _In_ PIRP Irp)
NTSTATUS NTAPI PortPdoDeviceControl(_In_ PDEVICE_OBJECT DeviceObject, _In_ PIRP Irp)
SCSI_ADAPTER_CONTROL_STATUS NTAPI MiniportAdapterControl(_In_ PMINIPORT Miniport, _In_ SCSI_ADAPTER_CONTROL_TYPE ControlType, _In_opt_ PVOID Parameters)
Sends one adapter control request, if the miniport claimed it.
NTSTATUS NTAPI PortFdoDeviceControl(_In_ PDEVICE_OBJECT DeviceObject, _In_ PIRP Irp)
VOID PortFlushStarvedRequests(_In_ PFDO_DEVICE_EXTENSION FdoExtension)
Fails every queued request, for when the adapter goes away.
PPDO_DEVICE_EXTENSION FdoFindLun(_In_ PFDO_DEVICE_EXTENSION FdoExtension, _In_ ULONG Bus, _In_ ULONG Target, _In_ ULONG Lun)
struct _PDO_IO_FLOW_CONTROL PDO_IO_FLOW_CONTROL
NTSTATUS MiniportFindAdapter(_In_ PMINIPORT Miniport)
INTERFACE_TYPE GetBusInterface(PDEVICE_OBJECT DeviceObject)
VOID NTAPI StorpCompleteExtendedSrb(_In_ PSCSI_REQUEST_BLOCK Srb, _In_ PEXTENDED_REQUEST Request)
Carries the miniport's answer back to the original request block.
VOID NTAPI PortFdoBusChangeDpc(_In_ PKDPC Dpc, _In_opt_ PVOID DeferredContext, _In_opt_ PVOID SystemArgument1, _In_opt_ PVOID SystemArgument2)
NTSTATUS MiniportInitialize(_In_ PMINIPORT Miniport, _In_ PFDO_DEVICE_EXTENSION DeviceExtension, _In_ PHW_INITIALIZATION_DATA HwInitializationData)
struct _UNIT_DATA * PUNIT_DATA
struct _DRIVER_INIT_DATA DRIVER_INIT_DATA
struct _LUN_DESCRIPTOR * PLUN_DESCRIPTOR
struct _STARVED_REQUEST_QUEUE * PSTARVED_REQUEST_QUEUE
struct _FDO_DEVICE_EXTENSION * PFDO_DEVICE_EXTENSION
VOID PortFreeRequestReserve(_In_ PFDO_DEVICE_EXTENSION FdoExtension)
Releases the reserve. No request may be using it anymore.
NTSTATUS PortDeletePdo(_In_ PPDO_DEVICE_EXTENSION PdoExtension)
VOID NTAPI TimerCallbackDpcRoutine(PKDPC Dpc, PVOID DeferredContext, PVOID SystemArgument1, PVOID SystemArgument2)
BOOLEAN NTAPI StorpIsExtendedSrb(_In_ PVOID Srb)
Tells whether a request block is in the extended format.
BOOLEAN PortPdoScheduleRequestFlowControlled(_In_ PPDO_DEVICE_EXTENSION PdoExtension, _In_ PFDO_DEVICE_EXTENSION FdoExtension, _In_ PQUEUED_REQUEST_REFERENCE RequestReference)
Schedules an outstanding request and return a boolean value to indicate if the request can be immedia...
struct _QUEUED_REQUEST_REFERENCE QUEUED_REQUEST_REFERENCE
NTSTATUS NTAPI PortPdoPnp(_In_ PDEVICE_OBJECT DeviceObject, _In_ PIRP Irp)
NTSTATUS PortInitializeStarvedRequestQueue(_In_ PSTARVED_REQUEST_QUEUE Queue)
struct _MINIPORT MINIPORT
NTSTATUS AllocateAddressMapping(PMAPPED_ADDRESS *MappedAddressList, STOR_PHYSICAL_ADDRESS IoAddress, PVOID MappedAddress, ULONG NumberOfBytes, ULONG BusNumber)
struct _REPORT_LUNS_DATA REPORT_LUNS_DATA
BOOLEAN MiniportHwInterrupt(_In_ PMINIPORT Miniport)
PHW_INITIALIZATION_DATA PortGetDriverInitData(PDRIVER_OBJECT_EXTENSION DriverExtension, INTERFACE_TYPE InterfaceType)
struct _TIMER_ENTRY TIMER_ENTRY
VOID NTAPI MiniportQueryAdapterControl(_In_ PMINIPORT Miniport)
Asks the miniport which adapter control requests it handles.
struct _PDO_DEVICE_EXTENSION PDO_DEVICE_EXTENSION
VOID StorpSrbFreeRequestReference(_In_ PSCSI_REQUEST_BLOCK Srb)
Frees an SRB's Request Reference and restore Srb->OriginalRequest field to IRP. This function does no...
struct _REPORT_LUNS_DATA * PREPORT_LUNS_DATA
struct _MINIPORT_DEVICE_EXTENSION * PMINIPORT_DEVICE_EXTENSION
VOID PortQueueStarvedRequest(_In_ PFDO_DEVICE_EXTENSION FdoExtension, _In_ PIRP Irp)
Queues a request that could not allocate its private contexts.
NTSTATUS QueryBusInterface(PDEVICE_OBJECT DeviceObject, PGUID Guid, USHORT Size, USHORT Version, PBUS_INTERFACE_STANDARD Interface, PVOID InterfaceSpecificData)
struct _QUEUED_REQUEST_REFERENCE * PQUEUED_REQUEST_REFERENCE
struct _FDO_IO_FLOW_CONTROL * PFDO_IO_FLOW_CONTROL
struct _PDO_DEVICE_EXTENSION * PPDO_DEVICE_EXTENSION
VOID NTAPI StorpBuildUnitAddress(_In_ PPDO_DEVICE_EXTENSION PdoExtension, _Out_ PSTOR_ADDR_BTL8 Address)
Fills in the bus, target and LUN address of a logical unit.
struct _EXTENDED_REQUEST * PEXTENDED_REQUEST
struct _EXTENDED_REQUEST EXTENDED_REQUEST
BOOLEAN NTAPI MiniportHwMSInterrupt(_In_ PMINIPORT Miniport, _In_ ULONG MessageId)
PQUEUED_REQUEST_REFERENCE NTAPI StorpRequestReference(_In_ PSCSI_REQUEST_BLOCK Srb)
Finds the request reference behind an SRB in either format.
BOOLEAN TranslateResourceListAddress(PFDO_DEVICE_EXTENSION DeviceExtension, INTERFACE_TYPE BusType, ULONG SystemIoBusNumber, STOR_PHYSICAL_ADDRESS IoAddress, ULONG NumberOfBytes, BOOLEAN InIoSpace, PPHYSICAL_ADDRESS TranslatedAddress)
struct _MINIPORT_DEVICE_EXTENSION MINIPORT_DEVICE_EXTENSION
VOID NTAPI MiniportFreeAdapterResources(_In_ PMINIPORT Miniport)
Tells the miniport the adapter is going away.
BOOLEAN MiniportStartIo(_In_ PMINIPORT Miniport, _In_ PSCSI_REQUEST_BLOCK Srb)
PCM_RESOURCE_LIST CopyResourceList(POOL_TYPE PoolType, PCM_RESOURCE_LIST Source)
NTSTATUS MiniportHwInitialize(_In_ PMINIPORT Miniport)
PPDO_DEVICE_EXTENSION NTAPI FdoFindLunAboveDispatch(_In_ PFDO_DEVICE_EXTENSION FdoExtension, _In_ ULONG Bus, _In_ ULONG Target, _In_ ULONG Lun)
Finds a unit from an interrupt service routine or any other caller above DISPATCH_LEVEL.
NTSTATUS PortCreatePdo(_In_ PFDO_DEVICE_EXTENSION FdoExtension, _In_ ULONG Bus, _In_ ULONG Target, _In_ ULONG Lun, _Out_ PPDO_DEVICE_EXTENSION *PdoExtension)
VOID NTAPI PortFdoUnlinkPdo(_Inout_ PFDO_DEVICE_EXTENSION FdoExtension, _Inout_ PPDO_DEVICE_EXTENSION PdoExtension)
NTSTATUS GetResourceListInterrupt(PFDO_DEVICE_EXTENSION DeviceExtension, PULONG Vector, PKIRQL Irql, KINTERRUPT_MODE *InterruptMode, PBOOLEAN ShareVector, PKAFFINITY Affinity)
VOID NTAPI SimpleTimerCallbackDpcRoutine(PKDPC Dpc, PVOID DeferredContext, PVOID SystemArgument1, PVOID SystemArgument2)
struct _MINIPORT * PMINIPORT
struct _DRIVER_OBJECT_EXTENSION * PDRIVER_OBJECT_EXTENSION
VOID PortRetryStarvedRequest(_In_ PFDO_DEVICE_EXTENSION FdoExtension)
Retries one queued request, so each completion lets exactly one through.
VOID NTAPI MiniportQueryUnitControl(_In_ PMINIPORT Miniport)
Asks the miniport which unit control requests it handles.
VOID NTAPI PortFdoLinkPdo(_Inout_ PFDO_DEVICE_EXTENSION FdoExtension, _Inout_ PPDO_DEVICE_EXTENSION PdoExtension)
Adds a PDO where both the list lock and the interrupt service routines respect it.
struct _FDO_IO_FLOW_CONTROL FDO_IO_FLOW_CONTROL
struct _TIMER_ENTRY * PTIMER_ENTRY
PVOID NTAPI StorpSrbDataBuffer(_In_ PSCSI_REQUEST_BLOCK Srb)
Finds the data buffer of a request in either format.
VOID NTAPI PortCompletionDpc(_In_ PKDPC Dpc, _In_ PVOID Context, _In_ PVOID SystemArgument1, _In_ PVOID SystemArgument2)
struct _DRIVER_INIT_DATA * PDRIVER_INIT_DATA
struct _UNIT_DATA UNIT_DATA
NTSTATUS NTAPI PortFdoScsi(_In_ PDEVICE_OBJECT DeviceObject, _In_ PIRP Irp)
struct _DRIVER_OBJECT_EXTENSION DRIVER_OBJECT_EXTENSION
NTSTATUS PortPdoIssueRequest(_In_ PPDO_DEVICE_EXTENSION PdoExtension, _In_ PQUEUED_REQUEST_REFERENCE RequestReference)
SCSI_UNIT_CONTROL_STATUS NTAPI MiniportUnitControl(_In_ PMINIPORT Miniport, _In_ SCSI_UNIT_CONTROL_TYPE ControlType, _In_opt_ PVOID Parameters)
Sends one unit control request, if the miniport claimed it.
struct _STARVED_REQUEST_QUEUE STARVED_REQUEST_QUEUE
VOID PortAllocateRequestReserve(_In_ PFDO_DEVICE_EXTENSION FdoExtension)
Reserves the memory a single request needs, so IO can still be issued out of pool.
VOID NTAPI StorpBuildExtendedSrb(_In_ PSCSI_REQUEST_BLOCK Srb, _Out_ PEXTENDED_REQUEST Request)
Fills in the extended request a miniport will be given.
NTSTATUS NTAPI PortFdoPnp(_In_ PDEVICE_OBJECT DeviceObject, _In_ PIRP Irp)
DRIVER_DISPATCH ForwardIrpAndForget
_In_ PIRP _In_ PIO_COMPLETION_ROUTINE _In_ PVOID Context
_In_ UINT _In_ UINT _In_ PNDIS_PACKET Source
enum _INTERFACE_TYPE INTERFACE_TYPE
enum _KINTERRUPT_MODE KINTERRUPT_MODE
struct STOR_ADDRESS_ALIGN _STOR_ADDR_BTL8 * PSTOR_ADDR_BTL8
struct STOR_ADDRESS_ALIGN _STOR_ADDR_BTL8 STOR_ADDR_BTL8
struct SRB_ALIGN _SRBEX_DATA_SCSI_CDB16 SRBEX_DATA_SCSI_CDB16
_Must_inspect_result_ _In_ PVOID _In_ struct _HW_INITIALIZATION_DATA * HwInitializationData
enum _SCSI_UNIT_CONTROL_STATUS SCSI_UNIT_CONTROL_STATUS
BOOLEAN(NTAPI * PHW_PASSIVE_INITIALIZE_ROUTINE)(_In_ PVOID DeviceExtension)
VOID(NTAPI * PHW_TIMER_EX)(_In_ PVOID DeviceExtension, _In_opt_ PVOID Context)
enum _SCSI_UNIT_CONTROL_TYPE SCSI_UNIT_CONTROL_TYPE
HW_INITIALIZATION_DATA HwInitData
LIST_ENTRY AdapterListHead
LIST_ENTRY InitDataListHead
PDRIVER_OBJECT DriverObject
KSPIN_LOCK AdapterListLock
EXTENSION_TYPE ExtensionType
STORAGE_REQUEST_BLOCK Srb
SRBEX_DATA_SCSI_CDB16 Cdb
PMAPPED_ADDRESS MappedAddressList
PDEVICE_OBJECT LowerDevice
PCM_RESOURCE_LIST AllocatedResources
BOOLEAN MessageInterrupts
struct _QUEUED_REQUEST_REFERENCE * ReservedRequestReference
PDEVICE_OBJECT PhysicalDevice
PHW_PASSIVE_INITIALIZE_ROUTINE HwPassiveInitRoutine
PVOID ReservedSrbExtension
PVOID UncachedExtensionVirtualBase
PCM_RESOURCE_LIST TranslatedResources
NPAGED_LOOKASIDE_LIST RequestReferenceLookaside
ULONG UncachedExtensionSize
PHW_INITIALIZATION_DATA HwInitData
EXTENSION_TYPE ExtensionType
FDO_IO_FLOW_CONTROL FlowControl
ULONG OutstandingRequestMax
PIO_INTERRUPT_MESSAGE_INFO MessageInfo
LIST_ENTRY AdapterListEntry
PHYSICAL_ADDRESS UncachedExtensionPhysicalBase
PDRIVER_OBJECT_EXTENSION DriverExtension
SLIST_HEADER CompletionList
STARVED_REQUEST_QUEUE StarvedRequests
BUS_INTERFACE_STANDARD BusInterface
BOOLEAN RequestReferenceLookasideInitialized
LIST_ENTRY FdoBlockedRequestsListHead
ULONG OutstandingRequestCount
ULONG RemainingBusyRequests
struct _MINIPORT * Miniport
UCHAR HwDeviceExtension[0]
PORT_CONFIGURATION_INFORMATION PortConfig
ULONG UnitControlSupportedBitmap
PHW_INITIALIZATION_DATA InitData
struct _FDO_DEVICE_EXTENSION * DeviceExtension
ULONG AdapterControlSupportedBitmap
PMINIPORT_DEVICE_EXTENSION MiniportExtension
PFDO_DEVICE_EXTENSION FdoExtension
PDO_IO_FLOW_CONTROL FlowControl
ULONG OutstandingRequestMax
PINQUIRYDATA InquiryBuffer
EXTENSION_TYPE ExtensionType
LONG SpecialRequestCounter
LIST_ENTRY ActiveRequestsListHead
BOOLEAN IsWaitingQueueClear
ULONG RemainingBusyRequests
ULONG OutstandingRequestCount
LIST_ENTRY AwaitingRequestsListHead
PEXTENDED_REQUEST ExtendedRequest
BOOLEAN DumpSpecialRequest
PSTOR_SCATTER_GATHER_LIST ScatterGatherList
PPDO_DEVICE_EXTENSION PdoExtension
SLIST_ENTRY CompletionEntry
LUN_DESCRIPTOR LunDescriptor[1]
PHW_TIMER_EX TimerCallback
#define SLIST_ENTRY(type)
_Must_inspect_result_ _In_ WDFDEVICE _In_ WDFREQUEST Request
_In_ UCXUSBDEVICE _In_ ULONG Interface
_In_ PDEVICE_OBJECT DeviceObject
_Must_inspect_result_ _In_ WDFDEVICE _In_ DEVICE_REGISTRY_PROPERTY _In_ _Strict_type_match_ POOL_TYPE PoolType
_Must_inspect_result_ _In_ WDFDEVICE _In_ PIRP _In_ WDFQUEUE Queue
_Must_inspect_result_ _In_ WDFDEVICE _In_ PWDF_DEVICE_PROPERTY_DATA _In_ DEVPROPTYPE _In_ ULONG Size
_Must_inspect_result_ _In_ PWDF_DPC_CONFIG _In_ PWDF_OBJECT_ATTRIBUTES _Out_ WDFDPC * Dpc
_Must_inspect_result_ _In_ PDRIVER_OBJECT _In_ PCUNICODE_STRING RegistryPath
_Must_inspect_result_ _In_ PDRIVER_OBJECT DriverObject
_Must_inspect_result_ _In_ WDFDEVICE _In_ LPCGUID InterfaceType
_Must_inspect_result_ _In_ WDFDEVICE _In_ LPCGUID _Out_ PINTERFACE _In_ USHORT _In_ USHORT Version
_Must_inspect_result_ _In_ WDFDEVICE _In_ LPCGUID _Out_ PINTERFACE _In_ USHORT _In_ USHORT _In_opt_ PVOID InterfaceSpecificData
_Must_inspect_result_ _In_ WDFOBJECT _In_ CONST GUID * Guid
_Reserved_ PVOID Reserved
struct LOOKASIDE_ALIGN _NPAGED_LOOKASIDE_LIST NPAGED_LOOKASIDE_LIST
_In_ ULONG _In_ ULONG _In_ ULONG _Out_ PKIRQL _Out_ PKAFFINITY Affinity
_In_opt_ PUNICODE_STRING _In_ PDRIVER_OBJECT _In_ PDEVICE_OBJECT _In_ INTERFACE_TYPE BusType
_In_ PKSERVICE_ROUTINE _In_opt_ PVOID _In_opt_ PKSPIN_LOCK _In_ ULONG _In_ KIRQL _In_ KIRQL _In_ KINTERRUPT_MODE InterruptMode
_In_ ULONG _In_ PHYSICAL_ADDRESS _Inout_ PULONG _Out_ PPHYSICAL_ADDRESS TranslatedAddress
_In_ PKSERVICE_ROUTINE _In_opt_ PVOID _In_opt_ PKSPIN_LOCK _In_ ULONG _In_ KIRQL _In_ KIRQL _In_ KINTERRUPT_MODE _In_ BOOLEAN ShareVector
_Must_inspect_result_ typedef _In_ PHYSICAL_ADDRESS _Inout_ PLARGE_INTEGER NumberOfBytes
_In_opt_ PVOID _In_opt_ PVOID SystemArgument1
_In_opt_ PVOID DeferredContext
_In_opt_ PVOID _In_opt_ PVOID _In_opt_ PVOID SystemArgument2