ScsiPortGetPhysicalAddress 函数 (srb.h)

ScsiPortGetPhysicalAddress 例程将给定的虚拟地址范围转换为 DMA作的物理地址范围。

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

语法

SCSIPORT_API SCSI_PHYSICAL_ADDRESS ScsiPortGetPhysicalAddress(
  [in]  PVOID               HwDeviceExtension,
  [in]  PSCSI_REQUEST_BLOCK Srb,
  [in]  PVOID               VirtualAddress,
  [out] ULONG               *Length
);

参数

[in] HwDeviceExtension

指向硬件设备扩展的指针。 这是端口驱动程序代表微型端口驱动程序分配和初始化的每个 HBA 存储区域。 微型端口驱动程序通常在此扩展中存储特定于 HBA 的信息,例如 HBA 的状态和 HBA 的映射访问范围。 在微型端口驱动程序调用 ScsiPortInitialize后,此区域可供 DeviceExtension->HwDeviceExtension 成员的微型端口驱动程序使用。 端口驱动程序在删除设备时释放此内存。

[in] Srb

如果要转换的 VirtualAddress 来自该 SRB DataBuffer 成员,或者可能来自 SenseInfoBuffer,则指向 SCSI 请求块的指针。 否则,此参数必须 NULL

[in] VirtualAddress

指向要转换的基虚拟地址的指针。 如果此虚拟地址位于 SRB 提供的 DataBuffer的范围内,则调用方还必须提供 Srb 指针。

[out] Length

返回从返回的物理地址开始映射的字节数。

返回值

ScsiPortGetPhysicalAddress 返回给定 VirtualAddress对应的物理地址。 如果无法转换给定地址,则返回 NULL

言论

总线主 HBA 的微型端口驱动程序调用 ScsiPortGetPhysicalAddress 以获取在 DMA作期间要使用的映射物理地址范围。 例如,ScsiPortGetPhysicalAddress 可用于为跨页的数据传输生成散点/收集列表。 请注意,返回的 长度 可以大于给定 SRB 中 DataBuffer 的大小。

如果传递非NULLSrb,则 VirtualAddress 要么在 SRB 的 DataBuffer 范围内,要么必须是来自 SenseInfoBuffer的指针。 否则,给定 的 virtualAddress 必须位于微型端口驱动程序的未缓存扩展、SrbExtension SenseInfoBuffer中。

微型端口驱动程序只能调用 ScsiPortGetPhysicalAddress 来转换扩展地址,前提是该微型端口驱动程序的 DriverEntry 例程设置为 NeedPhysicalAddresses 在HW_INITIALIZATION_DATA中调用 ScsiPortInitializeTRUE

由于某些总线(如 ISA)的约束,因此无法保证此例程返回的地址与类似外部例程返回的地址匹配(如 MmGetPhysicalAddress)。 微型端口驱动程序应仅调用 ScsiPortXxx 例程才能移植。

ScsiPortGetPhysicalAddress 使用 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

另请参阅

SCSI 微型端口驱动程序 DriverEntry

HW_INITIALIZATION_DATA (SCSI)

SCSI_REQUEST_BLOCK

ScsiPortGetUncachedExtension

ScsiPortGetVirtualAddress