Storport 驱动程序支持例程

本页对系统提供的 Storport 驱动程序提供给微型端口的一些支持例程进行了分类。 有关完整列表,请参阅 storport.h

有关 Storport 驱动程序微型端口例程的列表,请参阅 Storport 微型端口驱动程序例程

直接内存访问支持例程

Storport 驱动程序提供以下直接内存访问 (DMA) 支持例程。

例程 说明
StorPortBuildScatterGatherList 为指定的数据缓冲区创建分散/聚集列表。
StorPortGetScatterGatherList 检索指定的 SCSI 请求块 (SRB) 的关联分散/聚集列表。
StorPortPutScatterGatherList 释放与之前通过调用 StorPortBuildScatterGatherList 例程创建的分散/聚集列表关联的任何资源。

常规支持例程

Storport 提供以下常规支持例程。

例程 说明
StorPortDebugPrint 如果附加了调试器,则会将调试字符串输出到内核调试器。
StorPortEtwEvent2 将 Windows 事件跟踪 (ETW) 事件发布到存储跟踪通道。 微型端口可以记录两个常规用途 ETW 参数。 ETW 参数表示为两个名称-值对。
StorPortEtwEvent4 将 ETW 事件发布到存储跟踪通道。 微型端口可以记录四个常规用途 ETW 参数。 ETW 参数表示为四个名称-值对。
StorPortEtwEvent8 将 ETW 事件发布到存储跟踪通道。 微型端口可以记录八个常规用途 ETW 参数。 ETW 参数表示为八个名称-值对。
StorPortGetActivityIdSrb 检索与请求块关联的 ETW 活动 ID。
StorPortGetDeviceObjects 返回与适配器设备堆栈关联的设备对象。 返回的设备对象是适配器的功能对象和物理设备对象以及功能设备对象所连接的设备对象。
StorPortGetSystemPortNumber 检索存储适配器的系统分配的端口号。
StorPortInitializeSListHead 初始化 Storport 托管的单向链接列表的头部。
StorPortInterlockedFlushSList 从 Storport 托管的单向链接列表中删除所有项。 对列表的访问在多处理器系统上是同步的
StorPortInterlockedPopEntrySList 从 Storport 托管的单向链接列表的前面删除项目。 对列表的访问在多处理器系统上是同步的。
StorPortInterlockedPushEntrySList 在 Storport 托管的单向链接列表的前面插入一个项目。 对列表的访问在多处理器系统上是同步的。
StorPortInvokeAcpiMethod 为存储设备执行 ACPI 方法。
StorPortIsCurrentOsInstallationUpgrade 检查 Windows 的当前安装是否是从以前的版本升级。
StorPortIsDeviceOperationAllowed 允许微型端口确定是否允许对某个设备管理类进行操作。
StorPortLogError 通知端口驱动程序发生错误。
StorPortLogTelemetry 记录微型端口遥测事件,以帮助诊断或收集任何有用的信息。
StorPortLogSystemEvent 使微型端口驱动程序能够完全访问 Windows 内核事件工具的功能,使微型端口驱动程序能够创建在排查存储问题时真正有用的事件日志条目。 它为 StorPortLogError 提供了更好的替代方案。
StorPortQueryDepthSList 检索 Storport 托管的单向链接列表中的条目数。
StorPortQueryPerformanceCounter 查询并返回当前系统性能计数器值。
StorPortQuerySystemTime 获取当前系统时间。
StorPortRegistryRead 读取指定设备和值的注册表数据。
StorPortRegistryReadAdapterKey 读取位于 HKLM/CurrentControlSet/Enum/<Instance path>/DeviceParameters/.... 的注册表中的硬件或设备注册表适配器键
StorPortRegistryWriteAdapterKey 写入位于 HKLM/CurrentControlSet/Enum/<Instance path>/DeviceParameters/.... 的注册表中的硬件或设备注册表适配器键
StorPortRegistryWrite 将指定缓冲区中包含的注册表数据从 ASCII 转换为 Unicode,然后将数据写入每个 HBA 存储区域的微型端口驱动程序。

I/O 请求处理支持例程

Storport 提供以下 I/O 请求处理支持例程。

例程 说明
StorPortBusy 通知端口驱动程序适配器当前正忙,正在处理未完成的请求。
StorPortCompleteRequest 完成所有未完成的请求,将 SRB 状态值设置为 SrbStatus。
StorPortCompleteServiceIrp 当 Storport 虚拟微型端口驱动程序需要完成在其 HwStorProcessServiceRequest 回调例程中收到的请求时,由 Storport 虚拟微型端口驱动程序调用。
StorPortDeviceBusy 通知端口驱动程序指定的逻辑单元当前正忙,正在处理未完成的请求。
StorPortDeviceReady 通知端口驱动程序所指示的逻辑单元已准备好处理新请求。
StorPortFreeWorker 释放以前由 StorPortInitializeWorker 例程分配的 Storport 工作项。
StorPortGetRequestInfo 检索与 SCSI 请求块 (SRB) 关联的 IO 请求信息,并以 STOR_REQUEST_INFO 结构返回该信息。
StorPortInitializeWorker 创建在系统工作线程中运行的新 Storport 工作项。
StorPortQueueWorkItem 计划 Storport 工作项,以在系统工作线程的上下文中执行。
StorPortPause 在指定的时间段内暂停适配器。
StorPortPauseDevice 在指定时间段内暂停特定逻辑单元设备。
StorPortReady 通知端口驱动程序适配器不再繁忙。
StorPortResume 恢复暂停的适配器。
StorPortResumeDevice 恢复以前暂停的逻辑单元。

初始化支持例程

Storport 驱动程序提供以下初始化支持例程。

例程 说明
StorPortEnablePassiveInitialization 启用微型端口的 HwStorPassiveInitializeRoutine 回调例程,以便在微型端口初始化期间在 PASSIVE_LEVEL 上执行。
StorPortGetActiveGroupCount 返回系统中存在的处理器组的数量。
StorPortGetActiveNodeCount 返回系统中存在的节点数。
StorPortGetBusData 检索初始化 HBA 所需的特定于总线的配置信息。
StorPortGetCurrentProcessorNumber 从内核中检索当前处理器编号。
StorPortGetGroupAffinity 构造请求组中活动处理器的掩码。
StorPortGetHighestNodeNumber 返回系统上可能的最大节点数。
StorPortGetLogicalProcessorRelationship 返回一个或多个指定类型的关系信息。 这些类型包括组、物理包和主机系统中的节点。 返回的信息包括由主机系统中的逻辑处理器组成的处理器关联掩码。 这些逻辑处理器共享指定的关系类型。
StorPortGetLogicalUnit 返回指向微型端口驱动程序每个逻辑单元存储区域的指针。
StorPortGetNodeAffinity 在请求的非一致性内存访问 (NUMA) 节点中构造活动处理器的掩码。
StorPortGetStartIoPerfParams 将给定 I/O 请求的性能参数置于 STARTIO_PERFORMANCE_PARAMETERS 结构中。
StorPortInitialize 初始化端口驱动程序参数和扩展数据。 StorPortInitilize 还会保存微型端口驱动程序提供的适配器信息。
StorPortInitializePerfOpts 使用 PERF_CONFIGURATION_DATA 结构初始化微型端口驱动程序和 Storport 驱动程序都支持的性能优化。
StorPortSetAdapterBusType 用于根据适配器的当前配置调整其总线类型。 使用此例程设置 BusType 可以替代微型端口 INF 中设置的全局属性,而无需重新安装驱动程序。 此功能对于 RAID 支持或支持具有不同总线类型的多个适配器等方案非常有用。
StorPortSetBusDataByOffset 写入特定于总线的配置信息。
StorPortSetDeviceQueueDepth 为指定设备设置设备队列的最大深度。
StorPortSetPowerSettingNotificationGuids 使微型端口能够接收电源设置通知。 微型端口注册一组 GUID,用于标识接收电源更改通知的电源设置。
StorPortSetUnitAttributes 在 Storport 驱动程序中注册存储单元设备的电源属性。

中断支持例程

Storport 驱动程序提供以下中断支持例程。

例程 说明
StorPortGetMSIInfo 检索指定消息的消息信号中断 (MSI) 信息。
StorPortSynchronizeAccess 提供对微型端口驱动程序设备扩展的同步访问。
StorPortInitializeDpc 初始化 StorPort 延迟过程调用 (DPC)。
StorPortIssueDpc 颁发 Storport DPC。
StorPortStallExecution 暂停微型端口驱动程序。

锁定支持例程

Storport 驱动程序提供以下锁定支持例程。

例程 说明
StorPortAcquireMSISpinLock 获取与指定消息关联的消息信号中断 (MSI) 自旋锁。
StorPortAcquireSpinLock 获取指定的自旋锁。
StorPortReleaseMSISpinLock 为指定消息释放以前获取的 MSI 自旋锁。
StorPortReleaseSpinLock 释放由 StorPortAcquireSpinLock 获取的自旋锁。

内存管理支持例程

Storport 驱动程序提供以下内存管理支持例程。

例程 说明
StorPortAllocateContiguousMemorySpecifyCacheNode 分配一系列物理上连续的非缓存、非分页内存。
StorPortAllocateMdl 分配一个 MDL 来描述给定的非分页池内存。
StorPortAllocatePool 分配一个非连续的非分页池内存块。
StorPortAllocateRegistryBuffer 分配一个微型端口可用于读写注册表数据的缓冲区。
StorPortBuildMdlForNonPagedPool 更新 MDL 以描述关联的非分页内存。
StorPortConvertUlongToPhysicalAddress 将无符号的长地址转换为物理地址。
StorPortConvertPhysicalAddressToULong64 将物理地址转换为 ULONG64 值。
StorPortFreeMdl 释放描述非分页池内存的内存描述符列表 (MDL)。
StorPortFreeContiguousMemorySpecifyCache 在系统地址空间的非分页部分取消分配一系列非缓存内存。
StorPortFreePool 释放之前通过调用 StorPortAllocatePool 例程分配的内存块。
StorPortFreeRegistryBuffer 释放分配用于存储注册表数据的缓冲区。
StorPortGetDataInBufferMdl 返回与 SCSI 请求块 (SRB) 的输入数据缓冲区关联的 MDL。
StorPortGetDataInBufferScatterGatherList 返回与 SCSI 请求块 (SRB) 的输入数据缓冲区关联的分散-聚集列表。
StorPortGetDataInBufferSystemAddress 返回 SCSI 请求块 (SRB) 的输入数据缓冲区的系统地址。
StorPortGetOriginalMdl 返回与给定 SRB 关联的 MDL。
StorPortGetVirtualAddress 获取映射到指定物理地址的虚拟地址。
StorPortGetPhysicalAddress 将给定的虚拟地址范围转换为 DMA 操作的物理地址范围。
StorPortGetSystemAddress 返回指定 SCSI 请求块 (SRB) 的数据缓冲区在系统空间中的虚拟地址。
StorPortGetUncachedExtension 分配 CPU 和设备可以共享的未缓存公共缓冲区。
StorPortMarkDumpMemory 微型端口应标记用于转储文件或休眠文件的内存。 标记的内存将保留,并在从休眠操作恢复后保持有效。 要标记的内存由对 StorPortMarkDumpMemory 的调用中的地址和范围长度指定。
StorPortMoveMemory 将内存从一个缓冲区复制到另一个缓冲区。

通知支持例程

Storport 驱动程序提供以下通知支持例程。

例程 说明
StorPortAsyncNotificationDetected 通知 Storport 驱动程序存储设备状态更改事件。
StorPortNotification 通知 Storport 驱动程序某些事件和条件。
StorPortStateChangeDetected 通知 Storport 端口驱动程序逻辑单元号 (LUN)、主机总线适配器 (HBA) 端口或目标设备的状态更改。

端口和寄存器 I/O 支持例程

Storport 驱动程序提供以下端口和寄存器 I/O 支持例程。

例程 说明
StorPortGetDeviceBase 将 I/O 地址映射到系统地址空间。
StorPortFreeDeviceBase 释放以前映射 StorPortGetDeviceBase 的设备 I/O 内存范围。
StorPortReadPortBufferUchar 从指定的端口地址读取值
StorPortReadPortBufferUlong 从指定的端口地址读取值。
StorPortReadPortBufferUshort 从指定的端口地址读取值。
StorPortReadPortUchar 从指定的端口地址读取值
StorPortReadPortUlong 从指定的端口地址读取值。
StorPortReadPortUshort 从指定的端口地址读取值。
StorPortReadRegisterBufferUchar 从指定的寄存器地址读取值。
StorPortReadRegisterBufferUlong 从指定的寄存器地址读取值。
StorPortReadRegisterBufferUlong64 将指定数量的 ULONG64 值从指定的 64 位寄存器地址读取到缓冲区中。
StorPortReadRegisterBufferUshort 从指定的寄存器地址读取值。
StorPortReadRegisterUchar 从指定的寄存器地址读取值。
StorPortReadRegisterUlong 从指定的寄存器地址读取值。
StorPortReadRegisterUlong64 从指定的 64 位寄存器地址读取 64 位值。
StorPortReadRegisterUshort 从指定的寄存器地址读取值。
StorPortValidateRange 确定指定范围的 I/O 地址是否正由另一个适配器使用。 此例程在 Windows NT 4.0 和更高版本的操作系统中已过时。
StorPortWritePortBufferUchar 将值写入指定的寄存器地址。
StorPortWritePortBufferUlong 将值写入指定的寄存器地址。
StorPortWritePortBufferUshort 将值写入指定的寄存器地址。
StorPortWritePortUchar 将值写入指定的寄存器地址。
StorPortWritePortUlong 将值写入指定的寄存器地址。
StorPortWritePortUshort 将值写入指定的寄存器地址。
StorPortWriteRegisterBufferUchar 将给定数量的无符号字节从缓冲区传输到 HBA。
StorPortWriteRegisterBufferUlong 将给定数量的 ULONG 值从缓冲区传输到 HBA。
StorPortWriteRegisterBufferUlong64 从指定的 64 位寄存器地址写入指定数量的 ULONG64 值。
StorPortWriteRegisterBufferUshort 将给定数量的 USHORT 值从缓冲区传输到 HBA。
StorPortWriteRegisterUchar 将给定数量的字符值从缓冲区传输到指示的 HBA 寄存器地址。
StorPortWriteRegisterUlong 将 ULONG 值传输到指定的 HBA 寄存器地址。
StorPortWriteRegisterUlong64 将 ULONG64 值写入指定的寄存器地址。
StorPortWriteRegisterUshort 将 ULONG 值传输到指定的 HBA 寄存器地址。

运行时电源管理支持例程

Storport 驱动程序提供以下运行时电源管理支持例程。

例程 说明
StorPortInitializePoFxPower 在电源管理框架 (PoFx) 中注册存储设备。
StorPortPoFxActivateComponent 递增存储设备指定组件的激活引用计数。
StorPortPoFxIdleComponent 递减存储设备指定组件的激活引用计数。
StorPortPoFxPowerControl 向电源管理框架 (PoFx) 发送电源控制请求,以转发到电源引擎插件 (PEP)。
StorPortPoFxSetComponentLatency 指定在指定的存储设备组件中从空闲过渡到活动状态时可以容忍的最大延迟。
StorPortPoFxSetComponentResidency 设置存储设备组件进入空闲状态后可能保持空闲状态的估计时间。

计时器支持例程

Storport 驱动程序提供以下计时器支持例程。

例程 说明
StorPortFreeTimer 释放以前由 StorPortInitializeTimer 例程创建的 Storport 计时器上下文对象。
StorPortInitializeTimer 创建 Storport 计时器上下文对象。
StorPortRequestTimer 为 Storport 计时器上下文对象安排回调事件。