ScsiPortGetUncachedExtension 函数 (srb.h)

ScsiPortGetUncachedExtension 例程分配 CPU 和总线主 HBA 可用于 DMA 或共享数据的内存。

注意 SCSI 端口驱动程序和 SCSI 微型端口驱动程序模型将来可能会更改或不可用。 相反,我们建议使用 Storport 驱动程序Storport 微型端口 驱动程序模型。
 

语法

SCSIPORT_API PVOID ScsiPortGetUncachedExtension(
  [in] PVOID                           HwDeviceExtension,
  [in] PPORT_CONFIGURATION_INFORMATION ConfigInfo,
  [in] ULONG                           NumberOfBytes
);

参数

[in] HwDeviceExtension

指向硬件设备扩展的指针。 这是端口驱动程序代表微型端口驱动程序分配和初始化的每个 HBA 存储区域。 微型端口驱动程序通常在此扩展中存储特定于 HBA 的信息,例如 HBA 的状态和 HBA 的映射访问范围。 在微型端口驱动程序调用 ScsiPortInitialize后,此区域可供 DeviceExtension->HwDeviceExtension 成员的微型端口驱动程序使用。 端口驱动程序在删除设备时释放此内存。

[in] ConfigInfo

指定有关 HBA 的 DMA 功能的信息。 必须填写以下成员:DmaChannelDmaPortDmaWidthDmaSpeedMaximumTransferLengthScatterGatherMaster set TRUENumberOfPhysicalBreaksAdapterInterfaceTypeDma32BitAddressesSystemIoBusNumberAutoRequestSenseSrbExtensionSize。

与 HBA 不相关的成员(如 EISA 总线主适配器的 DmaChannel)必须保持原样。

[in] NumberOfBytes

指示要分配的未缓存扩展的大小(以字节为单位)。 Windows XP 和早期作系统中的驱动程序不能分配超过 100 KB 的未缓存扩展,如果他们参与休眠文件或故障转储文件的 I/O作,则必须限制分配给 32 KB 以下的未缓存扩展的数量。

返回值

ScsiPortGetUncachedExtension 返回指向未缓存扩展的虚拟地址指针。 如果无法分配请求的内存,它将返回 NULL

言论

ScsiPortGetUncachedExtension 只能从微型端口驱动程序的 HwScsiFindAdapter 例程调用,并且仅适用于总线主 HBA。 来自其他微型端口驱动程序例程的调用将导致系统故障或调用方作不正确。

由于高端计算机具有缓存和大型内存,因此必须在 HBA 和 CPU 之间专门分配要共享的任何内存。 系统内存中的邮箱或 I/O 请求队列是此类共享内存的示例。

微型端口驱动程序必须设置 SrbExtensionSize。在调用 ScsiPortGetUncachedExtension 之前,以基于 numberOfPhysicalBreaks更改其每个请求存储的大小。

HwScsiFindAdapter 例程只能为每个总线主 HBA 调用 ScsiPortGetUncachedExtension 一次微型端口驱动程序支持。

若要获取 HBA 可以使用的未缓存扩展的物理地址,请调用 ScsiPortGetPhysicalAddress

当适配器设备停止时,ScsiPort 驱动程序将释放由 ScsiPortGetUncachedExtension 分配的内存。

要求

要求 价值
目标平台 桌面
标头 srb.h (包括 Miniport.h、Scsi.h)
Scsiport.lib

另请参阅

HwScsiFindAdapter

PORT_CONFIGURATION_INFORMATION (SCSI)

ScsiPortGetPhysicalAddress