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 后,HBA 设备对象的 DeviceExtension-HwDeviceExtension> 成员中的微型端口驱动程序可以使用此区域。 端口驱动程序在删除设备时释放此内存。
[in] ConfigInfo
指定有关 HBA 的 DMA 功能的信息。 必须填写以下成员: DmaChannel 或 DmaPort、 DmaWidth、 DmaSpeed、 MaximumTransferLength、 ScatterGather、 Master 设置为 TRUE、 NumberOfPhysicalBreaks、 AdapterInterfaceType、 Dma32BitAddresses、 SystemIoBusNumber、 AutoRequestSense 和 SrbExtensionSize。
与 HBA 不相关的成员(例如 EISA 总线主适配器的 DmaChannel )必须按原样保留。
[in] NumberOfBytes
指示要分配的未缓存扩展的大小(以字节为单位)。 Windows XP 和早期操作系统中的驱动程序不能分配超过 100 KB 的未缓存扩展,如果它们参与休眠文件或故障转储文件的 I/O 操作,则必须将分配给的未缓存扩展量限制在 32 KB 以下。
返回值
ScsiPortGetUncachedExtension 返回指向未缓存扩展的虚拟地址指针。 如果无法分配请求的内存,则返回 NULL。
注解
只能从微型端口驱动程序的 HwScsiFindAdapter 例程调用 ScsiPortGetUncachedExtension,并且只能调用总线主 HBA。 来自其他微型端口驱动程序例程的调用将导致系统故障或调用方操作不正确。
由于高端计算机具有缓存和大型内存,因此必须在 HBA 和 CPU 之间共享的任何内存进行专门分配。 系统内存中的邮箱或 I/O 请求队列是此类共享内存的示例。
微型端口驱动程序必须设置 SrbExtensionSize。 在调用 ScsiPortGetUncachedExtension 以基于 NumberOfPhysicalBreaks 更改其每个请求存储的大小之前。
对于微型端口驱动程序支持的每个总线主 HBA,HwScsiFindAdapter 例程只能调用 ScsiPortGetUncachedExtension 一次。
若要获取 HBA 可以使用的未缓存扩展的物理地址,请调用 ScsiPortGetPhysicalAddress。
适配器设备停止时,ScsiPort 驱动程序将释放 ScsiPortGetUncachedExtension 分配的内存。
要求
要求 | 值 |
---|---|
目标平台 | 桌面 |
标头 | srb.h (包括 Miniport.h、Scsi.h) |
Library | Scsiport.lib |