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 ,則您的平台上無法使用例程。
AllocateCommonBufferEx 是 AllocateCommonBuffer 例程的擴充版本。 下列清單摘要說明只能在擴充版本中使用的功能:
呼叫端可以為要配置的通用緩衝區指定最大邏輯位址。
呼叫端可以指定要配置通用緩衝區的慣用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
要求
要求 | 價值 |
---|---|
最低支援的用戶端 | 從 Windows 8 開始提供。 |
目標平臺 | 桌面 |
標頭 | wdm.h (包括 Wdm.h、Ntddk.h、Ntifs.h) |
IRQL | PASSIVE_LEVEL |