共用方式為


PALLOCATE_COMMON_BUFFER_WITH_BOUNDS回呼函式 (wdm.h)

此回呼函式會配置一般緩衝區的記憶體,並加以對應,以便由主要裝置和 CPU 存取。 通用緩衝區可以透過選擇性的最小和最大邏輯位址來系結。

語法

PALLOCATE_COMMON_BUFFER_WITH_BOUNDS PallocateCommonBufferWithBounds;

PVOID PallocateCommonBufferWithBounds(
  [in]           PDMA_ADAPTER DmaAdapter,
  [in, optional] PPHYSICAL_ADDRESS MinimumAddress,
  [in, optional] PPHYSICAL_ADDRESS MaximumAddress,
  [in]           ULONG Length,
  [in]           ULONG Flags,
  [in, optional] MEMORY_CACHING_TYPE *CacheType,
  [in]           NODE_REQUIREMENT PreferredNode,
  [out]          PPHYSICAL_ADDRESS LogicalAddress
)
{...}

參數

[in] DmaAdapter

DMA_ADAPTER 結構的指標。 這個結構是代表驅動程式總線主要 DMA 裝置或系統 DMA 通道的配接器物件。 呼叫端從 先前呼叫IoGetDmaAdapter 例程取得此指標。

[in, optional] MinimumAddress

變數的指標,其中包含通用緩衝區的最小邏輯位址。 這個參數表示緩衝區應該從這個位址的記憶體和上方配置。 這個參數是選擇性的,而且可以指定為 NULL,表示沒有最小位址。

[in, optional] MaximumAddress

變數的指標,其中包含通用緩衝區的最大邏輯位址。 此參數表示緩衝區應該從此位址下方的記憶體配置。 這個參數是選擇性的,而且可以指定為 NULL,表示沒有最大位址。

[in] Length

要配置給 DMA 作業之通用緩衝區的大小,以位元組為單位。

[in] Flags

要配置給 DMA 作業之通用緩衝區的大小,以位元組為單位。

旗標 意義
DOMAIN_COMMON_BUFFER_LARGE_PAGE 一般緩衝區會使用較大的頁面粒度來配置PAGE_SIZE * 512。 請注意,這可能會增加配置失敗的機會。

[in, optional] CacheType

MEMORY_CACHING_TYPE列舉的指標,指出例程必須啟用或停用要配置之通用緩衝區中的快取記憶體。 僅支援 MmNonCachedMmCached 的值。 參數是選擇性的,而且可以指定為 NULL,以指定快取將取決於硬體平台預設值。

[in] PreferredNode

要配置記憶體的慣用NUMA節點。 如果 N 是多處理器系統中的 NUMA 節點數目, PreferredNode 是範圍 0 到 N–1 的數位。 若為一處理器系統或非 NUMA 多處理器系統,請將 PreferredNode 設定為零。

[out] LogicalAddress

變數的指標,此例程會寫入裝置可用來存取通用緩衝區的邏輯位址。 DMA 裝置應該使用此邏輯位址,而不是 由 MmGetPhysicalAddress 等例程傳回的實體位址。

傳回值

傳回 PVOID,這是配置給一般緩衝區的記憶體虛擬位址。 如果無法配置緩衝區,則傳回NULL。

備註

此回呼函式是 PALLOCATE_COMMON_BUFFER_EX 例程的擴充版本。 下列清單摘要說明只能在擴充版本中使用的功能:

  • 呼叫端可以為要配置的一般緩衝區指定最小邏輯位址。

  • 無論硬體平台為何,呼叫者都可以提供將遵循的快取類型覆寫。

  • 呼叫端可以指定針對其通用緩衝區配置使用較大的粒度。

規格需求

需求
最低支援的用戶端 Windows 10 (版本 1803)
目標平台 桌面
標頭 wdm.h (包含 Wdm.h)
IRQL PASSIVE_LEVEL

另請參閱

DMA_OPERATIONS

PALLOCATE_COMMON_BUFFER_EX