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后,此区域可供 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 例程可以安全地映射并使用映射范围访问适配器,TRUEScsiPortValidateRange 如果其他驱动程序已在注册表中声明指定的访问范围值,则返回 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返回 TRUEHwScsiFindAdapter 可以安全地执行以下作:

  1. 使用 ScsiPortGetDeviceBase将总线相对范围地址映射到系统空间逻辑范围地址。
  2. 将映射的逻辑地址与 ScsiPortRead/WriteXxx 配合使用,以确定适配器是否实际上是驱动程序支持的 HBA。
如果微型端口驱动程序使用成功传递给它支持的 HBA ScsiPortValidateRange 的范围,则当驱动程序设置 AccessRanges 元素的 RangeInMemory 成员时,该驱动程序必须反转 PORT_CONFIGURATION_INFORMATION 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)
Scsiport.lib

另请参阅

ACCESS_RANGE

HwScsiFindAdapter

PORT_CONFIGURATION_INFORMATION (SCSI)

ScsiPortGetDeviceBase

ScsiPortInitialize