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 后,HBA 的设备对象的 DeviceExtension-HwDeviceExtension> 成员中,此区域可供微型端口驱动程序使用。 端口驱动程序在移除设备时释放此内存。
[in] BusType
指定调用 HwScsiFindAdapter 时,PORT_CONFIGURATION_INFORMATION结构中 AdapterInterfaceType 成员的值。
[in] SystemIoBusNumber
指定调用 HwScsiFindAdapter 时配置信息中 SystemIoBusNumber 成员的值。
[in] IoAddress
指定要验证的端口或设备内存范围的总线相对基址 ,然后 微型端口驱动程序的 HwScsiFindAdapter 例程尝试在该地址映射适配器的访问范围。
[in] NumberOfBytes
指定范围中元素的大小(以字节为单位)。
[in] InIoSpace
指示当范围位于 I/O 空间而不是内存中时为 TRUE。 如果 为 FALSE,则范围在内存空间中。
返回值
如果 HwScsiFindAdapter 例程可以安全地映射并使用映射的范围访问适配器,则 ScsiPortValidateRange 将返回 TRUE。 如果其他驱动程序已在注册表中声明指定的访问范围值,则 ScsiPortValidateRange 返回 FALSE。
注解
只能从微型端口驱动程序的 HwScsiFindAdapter 例程调用 ScsiPortValidateRange。 来自其他微型端口驱动程序例程的调用将导致系统故障或调用方操作不正确。
如果操作系统特定的端口驱动程序在调用微型端口驱动程序的 HwScsiFindAdapter 例程之前初始化 PORT_CONFIGURATION_INFORMATION 结构的任何 AccessRanges 元素,则微型端口驱动程序必须将提供的值传递给 ScsiPortGetDeviceBase,并使用该范围的映射逻辑地址来确定 HBA 是否为它支持的值。
端口驱动程序使用适配器的总线相对地址范围的完整说明填充ACCESS_RANGE类型元素,或者端口驱动程序将元素的所有成员归零。
对于使用默认零设置的输入 AccessRanges 元素, HwScsiFindAdapter 例程可以尝试在给定的 I/O 总线上查找它支持的适配器。 在这些情况下,微型端口驱动程序通常具有一组驱动程序确定的默认地址类型 (hBA) 。 但是,以前加载的驱动程序可能已在使用此微型端口驱动程序的默认地址范围之一的初始化适配器,尤其是在某些设备在 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) |
Library | Scsiport.lib |