ScsiPortValidateRange 函数 (srb.h)

ScsiPortValidateRange 例程指示指定的访问范围值是否已由其他驱动程序在注册表中声明。

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

语法

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 可以安全地执行以下操作:

  1. 使用 ScsiPortGetDeviceBase 将总线相对范围地址映射到系统空间逻辑范围地址。
  2. 将映射的逻辑地址与 ScsiPortRead/WriteXxx 配合使用,以确定适配器是否是驱动程序支持的 HBA。
如果微型端口驱动程序为它支持的 HBA 使用成功传递到 ScsiPortValidateRange 的范围,则当该驱动程序在PORT_CONFIGURATION_INFORMATION中设置 AccessRanges 元素的 RangeInMemory 成员时,必须反转 InIoSpace 值。

ScsiPortValidateRange 使用 SCSI_PHYSICAL_ADDRESS 来表示相对于总线的地址。

typedef PHYSICAL_ADDRESS SCSI_PHYSICAL_ADDRESS, *PSCSI_PHYSICAL_ADDRESS;

SCSI_PHYSICAL_ADDRESS类型是与操作系统无关的数据类型,SCSI 微型端口驱动程序使用该类型来表示物理地址或相对于总线的地址。

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

要求

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

另请参阅

ACCESS_RANGE

HwScsiFindAdapter

PORT_CONFIGURATION_INFORMATION (SCSI)

ScsiPortGetDeviceBase

ScsiPortInitialize