ScsiPortGetUncachedExtension 函数 (srb.h)
ScsiPortGetUncachedExtension 例程分配 CPU 和总线主 HBA 可用于 DMA 或共享数据的内存。
语法
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 功能的信息。 必须填写以下成员:DmaChannel 或 DmaPort、DmaWidth、DmaSpeed、MaximumTransferLength、ScatterGather、Master set TRUE、NumberOfPhysicalBreaks、AdapterInterfaceType、Dma32BitAddresses、SystemIoBusNumber、AutoRequestSense和 SrbExtensionSize。
与 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 |