共用方式為


ExAllocatePool2 函式 (wdm.h)

ExAllocatePool2 例程會配置指定類型的集區內存,並傳回所配置區塊的指標。

語法

DECLSPEC_RESTRICT PVOID ExAllocatePool2(
  POOL_FLAGS Flags,
  SIZE_T     NumberOfBytes,
  ULONG      Tag
);

參數

Flags

指定集區內存類型以及必要和選擇性屬性的ULONG64型別值。 多個旗標值可以使用位 OR 來結合。 如需可能的值,請參閱 POOL_FLAGS

NumberOfBytes

指定要配置的位元組數目非零。

Tag

要用於已配置記憶體的集區標籤。 將集區標記指定為以單引號分隔之一到四個字元的非零字元常值(例如,Tag1)。 字串通常會以反向順序指定(例如,1gaT)。 標記中的每個 ASCII 字元都必須是範圍0x20(空格)中的值,才能0x7E(tilde)。 每個配置程式代碼路徑都應該使用唯一的集區標記來協助調試程式和驗證程式識別程式代碼路徑。

傳回值

ExAllocatePool2 會傳回已配置記憶體的指標。

下列條件會導致函式預設傳回NULL。 如果指定 POOL_FLAG_RAISE_ON_FAILURE,函式會引發例外狀況。

  • 記憶體不足
  • 標記 設定為 0 或指定無效的POOL_FLAGS

言論

如果您要建置以 Windows 10 版本 2004 之前的 Windows 版本為目標的驅動程式,請使用 ExAllocatePoolZeroExAllocatePoolUninitializedExAllocatePoolQuotaZeroExAllocatePoolQuotaUninitialized

此例程與先前的配置例程有下列差異(ExAllocatePoolWithTagExAllocatePoolWithQuotaTagExAllocatePoolWithTagPriority):

  1. 除非指定 POOL_FLAG_UNINITIALIZED,否則記憶體會初始化為零。

  2. 如果配置失敗,則傳回行為。 ExAllocatePoolWithQuotaTag 預設會引發例外狀況。

  3. 值為 0 的標記無效。

ExAllocatePoolWithQuotaTag取代為 exAllocatePool2時,您必須指定 POOL_FLAG_USE_QUOTA 旗標。 如需集區旗標的詳細資訊,請參閱 POOL_FLAGS

如果 NumberOfBytesPAGE_SIZE 或更新,則會配置頁面對齊的緩衝區。 PAGE_SIZE 或更少記憶體配置是在頁面內配置,而且不會跨越頁面界限。 小於 PAGE_SIZE 的記憶體配置不一定對齊頁面,而是與 32 位系統中的 8 位元組界限對齊,而在 64 位系統中則對齊 16 位元組界限。

驅動程式最多只能使用已明確配置的 NumberOfBytes。 存取超出此範圍的記憶體可能會損毀集區,並導致系統當機。

系統會將集區標籤與配置的記憶體產生關聯。 WinDbg 之類的程式設計工具可以顯示與每個已配置緩衝區相關聯的集區標記。 Gflags 是 Windows 偵錯工具中包含的工具,會開啟系統功能,要求從特定集區標記的特殊集區配置。 包含在 WDK 中的 Poolmon 會依集區標記追蹤記憶體。

Tag 的值會以反向順序儲存,有時也會以反轉順序顯示。 例如,如果呼叫端以標記的形式傳遞 Fred,它會顯示為集區傾印和調試程式中的集區使用量追蹤中的 derF,並在登錄和工具中顯示 0x64657246

您可以使用 exFreePool ExFreePoolWithTag釋放已設定的緩衝區。

ExAllocatePool2 的呼叫端必須在 IRQL <= DISPATCH_LEVEL 執行。 在 DISPATCH_LEVEL 執行的呼叫端必須針對 Flags指定 POOL_FLAG_NON_PAGEDPOOL_FLAG_NON_PAGED_EXECUTABLE。 在 IRQL 執行 <= APC_LEVEL 的呼叫端可以指定 POOL_FLAG_PAGED,但如果記憶體將從執行於 DISPATCH_LEVEL 的程式代碼存取,您仍必須配置非分頁記憶體。

在非統一記憶體存取 (NUMA) 多處理器架構中,ExAllocatePool2 嘗試配置本機記憶體給呼叫 exAllocatePool2 的處理器。 如果沒有可用的本機記憶體,ExAllocatePool2 配置最接近的可用記憶體。

ExAllocatePool2 配置的記憶體初始化為零。 核心模式驅動程式不應選擇不要將配置複製到不受信任的位置(使用者模式、透過網路等)的配置,以避免披露敏感性資訊。

要求

要求 價值
最低支援的用戶端 Windows 10 版本 2004
目標平臺 普遍
標頭 wdm.h (包括 Wdm.h、Ntddk.h、Ntifs.h)
連結庫 NtosKrnl.lib
DLL NtosKrnl.exe
IRQL IRQL <= DISPATCH_LEVEL (請參閱一節)
DDI 合規性規則 HwStorPortProhibitedDDIs、SpNoWait、StorPortStartIo

另請參閱

ExAllocatePool3