StorPortGetPhysicalAddress 函数 (storport.h)

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

语法

STORPORT_API STOR_PHYSICAL_ADDRESS StorPortGetPhysicalAddress(
  [in]           PVOID               HwDeviceExtension,
  [in, optional] PSCSI_REQUEST_BLOCK Srb,
  [in]           PVOID               VirtualAddress,
  [out]          ULONG               *Length
);

参数

[in] HwDeviceExtension

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

[in, optional] Srb

如果要转换的虚拟地址来自该 SRB 的 DataBuffer 成员或 SenseInfoBuffer 成员,则指向 SCSI 请求块的指针。 否则,此参数必须为 NULL

[in] VirtualAddress

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

[out] Length

指向一个值的指针,该值指示从返回的物理地址开始映射的字节数。

返回值

StorPortGetPhysicalAddress 返回给定虚拟地址的相应物理地址。 如果无法转换给定地址,则该函数将返回 NULL

注解

如果从 StorPortAllocateContiguousMemorySpecifyCacheNode 获取传递给 StorPortGetPhysicalAddress 的虚拟地址,则应忽略为 Length 返回的值。

从 Windows 8 开始,Srb 参数可能指向 SCSI_REQUEST_BLOCKSTORAGE_REQUEST_BLOCK。 如果 Srb“函数”字段中的函数标识符SRB_FUNCTION_STORAGE_REQUEST_BLOCK,则 SRB 是STORAGE_REQUEST_BLOCK请求结构。

StorPortGetPhysicalAddress 使用 STOR_PHYSICAL_ADDRESS 表示物理地址。

typedef PHYSICAL_ADDRESS STOR_PHYSICAL_ADDRESS, *PSTOR_PHYSICAL_ADDRESS;

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

要求

要求
目标平台 通用
标头 storport.h (包括 Storport.h)
Library Storport.lib

另请参阅

SCSI_REQUEST_BLOCK

STORAGE_REQUEST_BLOCK

ScsiPortGetPhysicalAddress