共用方式為


PALLOCATE_COMMON_BUFFER_EX回呼函式 (wdm.h)

AllocateCommonBufferEx 例程會配置一般緩衝區的記憶體,並對應此記憶體,以便由處理器和執行 DMA 作業的裝置存取。

語法

PALLOCATE_COMMON_BUFFER_EX PallocateCommonBufferEx;

PVOID PallocateCommonBufferEx(
  [in]           PDMA_ADAPTER DmaAdapter,
  [in, optional] PPHYSICAL_ADDRESS MaximumAddress,
  [in]           ULONG Length,
  [out]          PPHYSICAL_ADDRESS LogicalAddress,
  [in]           BOOLEAN CacheEnabled,
  [in]           NODE_REQUIREMENT PreferredNode
)
{...}

參數

[in] DmaAdapter

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

[in, optional] MaximumAddress

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

[in] Length

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

[out] LogicalAddress

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

[in] CacheEnabled

例程是否必須在要配置的通用緩衝區中啟用或停用快取記憶體。 如果為 TRUE,則會啟用快取。 如果為 FALSE,則會停用它。 如果硬體平臺未強制執行 DMA 作業的快取一致性,則傳遞 FALSE。 如需有關 ARM 或 ARM 64 處理器目標電腦之此參數的資訊,請參閱。

[in] PreferredNode

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

傳回值

AllocateCommonBufferEx 會傳回為一般緩衝區配置的記憶體虛擬位址。 如果無法配置緩衝區,則會傳回NULL。

言論

AllocateCommonBufferEx 不是可以直接依名稱呼叫的系統例程。 這個例程只能由 DMA_OPERATIONS 結構中傳回之位址的指標呼叫。 驅動程式會呼叫 IoGetDmaAdapter,並將 deviceDescription 參數的 Version 成員設為 DEVICE_DESCRIPTION_VERSION3,以取得此例程的位址。 如果 IoGetDmaAdapter 傳回 NULL ,則您的平台上無法使用例程。

AllocateCommonBufferExAllocateCommonBuffer 例程的擴充版本。 下列清單摘要說明只能在擴充版本中使用的功能:

  • 呼叫端可以為要配置的通用緩衝區指定最大邏輯位址。

  • 呼叫端可以指定要配置通用緩衝區的慣用NUMA節點。

在具有 ARM 或 ARM 64 處理器的電腦上,系統 ACPI 中的快取設定優先順序高於驅動程式所傳遞 CacheEnabled 參數值。 如果 ACPI _CCA 方法指出裝置未快取一致,則即使驅動程式配置快取的記憶體,CacheEnabled 設為 TRUE,作系統仍會停用快取。

在具有 ARM 或 ARM 64 處理器的電腦上,作系統會將未快取的通用緩衝區配置為裝置記憶體。 如需緩衝區的詳細資訊,請參閱 ARMv7 架構參考手冊中的 A3.5.1 和 A3.5.6 小節,

處理器不允許對裝置記憶體的未對齊存取。 您的驅動程序必須一律使用自然對齊的作業,從通用緩衝區存取數據。 大部分的核心例程不接受裝置記憶體作為輸入參數。 例如,網路驅動程式無法將裝置記憶體傳遞至 NdisMIndicateReceiveNetBufferLists。 如果您的驅動程式需要將數據從 DMA 通用緩衝區傳遞至核心例程,請配置緩衝區,並將 CacheEnabled 設定為 TRUE,或將數據從未快取的通用緩衝區複製到暫存集區配置中。

如需使用通用緩衝區之 DMA 作業的詳細資訊,請參閱下列主題:

使用一般緩衝區

使用 Common-Buffer Bus-Master DMA

使用 Common-Buffer System DMA

要求

要求 價值
最低支援的用戶端 從 Windows 8 開始提供。
目標平臺 桌面
標頭 wdm.h (包括 Wdm.h、Ntddk.h、Ntifs.h)
IRQL PASSIVE_LEVEL

另請參閱

AllocateCommonBuffer

DMA_ADAPTER

DMA_OPERATIONS

IoGetDmaAdapter

MmGetPhysicalAddress