ScsiPortValidateRange 函数 (srb.h)
ScsiPortValidateRange 例程指示指定的访问范围值是否已由另一个驱动程序在注册表中声明。
语法
SCSIPORT_API BOOLEAN ScsiPortValidateRange(
[in] PVOID HwDeviceExtension,
[in] INTERFACE_TYPE BusType,
[in] ULONG SystemIoBusNumber,
[in] SCSI_PHYSICAL_ADDRESS IoAddress,
[in] ULONG NumberOfBytes,
[in] BOOLEAN InIoSpace
);
参数
[in] HwDeviceExtension
指向硬件设备扩展的指针。 这是端口驱动程序代表微型端口驱动程序分配和初始化的每个 HBA 存储区域。 微型端口驱动程序通常在此扩展中存储特定于 HBA 的信息,例如 HBA 的状态和 HBA 的映射访问范围。 在微型端口驱动程序调用 ScsiPortInitialize后,此区域可供 DeviceExtension->HwDeviceExtension 成员的微型端口驱动程序使用。 端口驱动程序在删除设备时释放此内存。
[in] BusType
在调用 HwScsiFindAdapter 时,指定PORT_CONFIGURATION_INFORMATION结构中的 AdapterInterfaceType 成员的值。
[in] SystemIoBusNumber
指定调用 HwScsiFindAdapter 时配置信息中的 SystemIoBusNumber 成员的值。
[in] IoAddress
指定端口或设备内存范围的相对于总线的基址,以便在 微型端口驱动程序的 HwScsiFindAdapter 例程尝试映射该地址的适配器的访问范围之前。
[in] NumberOfBytes
指定区域中的元素大小(以字节为单位或元素数)。
[in] InIoSpace
指示范围在 I/O 空间而不是内存中时为 TRUE。 FALSE时,范围位于内存空间中。
返回值
ScsiPortValidateRange 如果 HwScsiFindAdapter 例程可以安全地映射并使用映射范围访问适配器,TRUE。 ScsiPortValidateRange 如果其他驱动程序已在注册表中声明指定的访问范围值,则返回 FALSE。
言论
ScsiPortValidateRange 只能从微型端口驱动程序的 HwScsiFindAdapter 例程调用。 来自其他微型端口驱动程序例程的调用将导致系统故障或调用方作不正确。
如果作系统特定的端口驱动程序在调用微型端口驱动程序的 HwScsiFindAdapter 例程之前初始化 AccessRanges PORT_CONFIGURATION_INFORMATION 元素,则微型端口驱动程序必须将提供的值传递给 ScsiPortGetDeviceBase,并使用该范围的映射逻辑地址来确定 HBA 是否为它支持的值。
端口驱动程序使用适配器的总线相对地址范围的完整说明填充ACCESS_RANGE类型元素,或者端口驱动程序将元素的所有成员都从零。
对于使用默认零设置的输入 AccessRanges 元素,HwScsiFindAdapter 例程可以尝试在给定的 I/O 总线上查找它支持的适配器。 在这些情况下,微型端口驱动程序通常为其 HBA 类型(s)具有一组由驱动程序确定的默认地址。 但是,以前加载的驱动程序可能已在此微型端口驱动程序的默认地址范围之一使用初始化适配器,尤其是在某些设备在 x86 实际模式下初始化的仅限 x86 的系统。 为了防止此类设备无意中重新编程,每个微型端口驱动程序的 HwScsiFindAdapter 例程应先调用 ScsiPortValidateRange,然后再将 ScsiPortGetDeviceBase 的任何驱动程序提供的地址映射到 I/O 总线上的适配器。
如果 ScsiPortValidateRange 返回 FALSE,则 HwScsiFindAdapter 不得尝试映射输入范围地址,因为另一个驱动程序已在注册表中声明了该范围。
如果 ScsiPortValidateRange返回 TRUE,HwScsiFindAdapter 可以安全地执行以下作:
- 使用 ScsiPortGetDeviceBase将总线相对范围地址映射到系统空间逻辑范围地址。
- 将映射的逻辑地址与 ScsiPortRead/WriteXxx 配合使用,以确定适配器是否实际上是驱动程序支持的 HBA。
ScsiPortValidateRange 使用 SCSI_PHYSICAL_ADDRESS 来表示相对于总线的地址。
typedef PHYSICAL_ADDRESS SCSI_PHYSICAL_ADDRESS, *PSCSI_PHYSICAL_ADDRESS;
SCSI_PHYSICAL_ADDRESS 类型是作系统无关的数据类型,SCSI 微型端口驱动程序用于表示物理地址或总线相对地址。
要求
要求 | 价值 |
---|---|
目标平台 | 桌面 |
标头 | srb.h (包括 Miniport.h、Scsi.h) |
库 | Scsiport.lib |