StorPortAllocateDmaMemory 函数 (storport.h)

此函数是 StorPortAllocateContiguousMemorySpecifyCacheNode 函数的扩展版本。 它分配一系列物理连续的非缓存、非分页内存,并返回已分配缓冲区的物理地址。

语法

ULONG StorPortAllocateDmaMemory(
  [in]           PVOID               HwDeviceExtension,
  [in]           SIZE_T              NumberOfBytes,
  [in]           PHYSICAL_ADDRESS    LowestAcceptableAddress,
  [in]           PHYSICAL_ADDRESS    HighestAcceptableAddress,
  [in, optional] PHYSICAL_ADDRESS    BoundaryAddressMultiple,
  [in]           MEMORY_CACHING_TYPE CacheType,
  [in]           NODE_REQUIREMENT    PreferredNode,
  [out]          PVOID               *BufferPointer,
  [out]          PPHYSICAL_ADDRESS   PhysicalAddress
);

参数

[in] HwDeviceExtension

指向主机总线适配器的硬件设备扩展的指针 (HBA) 。

[in] NumberOfBytes

要分配的字节数。

[in] LowestAcceptableAddress

对分配有效的最低物理地址。 例如,如果设备只能引用 8 MB 到 16 MB 范围内的物理内存,则此值将设置为0x800000 (8 MB) 。

[in] HighestAcceptableAddress

对分配有效的最高物理地址。 例如,如果设备只能引用低于 16 MB 的物理内存,则此值将设置为0xFFFFFF (16 MB - 1) 。

[in, optional] BoundaryAddressMultiple

此分配不得交叉的物理地址倍数。

[in] CacheType

映射的所需缓存类型。

[in] PreferredNode

如果页面在该节点上可用,则应从该节点进行分配的首选节点。

[out] BufferPointer

接收已分配内存块的起始地址的变量。 从此例程返回时,如果此变量为零,则找不到连续范围来满足请求。 如果此变量不为 NULL,则它包含指针 (例如,系统非分页部分中的虚拟地址) 分配的物理连续内存。

[out] PhysicalAddress

分配的内存块的物理地址。

返回值

此函数返回STOR_STATUS代码。

返回代码 说明
STOR_STATUS_NOT_IMPLEMENTED 此函数未在活动操作系统上实现。
STOR_STATUS_SUCCESS 操作成功。
STOR_STATUS_INSUFFICIENT_RESOURCES 由于资源不足,操作未能分配请求的内存。

注解

如果请求失败,BufferPointer 将设置为 NULL。

要求

要求
最低受支持的客户端 Windows 10 (版本 1803)
目标平台 通用
标头 storport.h
DDI 符合性规则 StorPortIrql

另请参阅

StorPortFreeDmaMemory