exAllocatePool 函式 (wdm.h)

警告

ExAllocatePool 已過時,且已在 Windows 10 2004 版中淘汰。 它已被 ExAllocatePool2 取代。 如需詳細資訊,請參閱 更新對 ExAllocatePool2 和 ExAllocatePool3 的已淘汰 ExAllocatePool 呼叫

在 Windows 10 2004 版之前開發 Windows 版本的驅動程式時,請使用 ExAllocatePoolZero

ExAllocatePool 會配置指定類型的集區內存,並傳回配置區塊的指標。

語法

PVOID ExAllocatePool(
  [in] __drv_strictTypeMatch(__drv_typeExpr)POOL_TYPE PoolType,
  [in] SIZE_T                                         NumberOfBytes
);

參數

[in] PoolType

指定要配置的集區內存類型。 如需可用集區內存類型的描述,請參閱 POOL_TYPE

您可以使用位 OR 搭配 POOL_COLD_ALLOCATION 旗標來修改 PoolType ,作為核心的提示,以從可能快速分頁的頁面配置記憶體。 若要盡可能減少駐留集區內存的數量,您不應該經常參考這些配置。 POOL_COLD_ALLOCATION旗標只是諮詢,而且適用於 Windows XP 和更新版本的 Windows 操作系統。

[in] NumberOfBytes

指定要配置的位元組數。

傳回值

如果可用集區中的記憶體不足,ExAllocatePool 會傳回 NULL,以滿足要求。 否則,例程會傳回已配置記憶體的指標。

備註

此例程用於記憶體的一般集區配置。

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

要求非分頁集區PAGE_SIZE NumberOfBytes< 的成功配置,可讓呼叫端確切提供要求的記憶體位元組數目。 如果 NumberOfBytes> PAGE_SIZE的配置要求成功, 而且 NumberOfBytes 不是PAGE_SIZE的確切倍數,則配置中的最後一頁包含不屬於呼叫端配置的位元組。 可能的話,集區配置器會使用這些位元組。 若要避免損毀屬於其他內核模式元件的數據,驅動程式必須只存取明確配置的儲存位址。

如果 ExAllocatePool 傳回 NULL,則呼叫端應該傳回 NTSTATUS 值STATUS_INSUFFICIENT_RESOURCES,或延遲處理至另一個時間點。

ExAllocatePool 的呼叫端必須在 IRQL <= DISPATCH_LEVEL執行。 在 DISPATCH_LEVEL 執行的呼叫端必須指定 PoolTypeNonPagedXxx 值。 在 IRQL <= APC_LEVEL執行的呼叫端可以指定任何 POOL_TYPE 值,但也必須考慮 IRQL 和環境來判斷頁面類型。

請勿設定 NumberOfBytes = 0。 避免零長度配置,因為它們浪費集區標頭空間,而且在許多情況下,表示呼叫程式代碼中的潛在驗證問題。 基於這個理由, 驅動程式驗證器 會將這類配置標幟為可能的錯誤。

當集區數量 (分頁或非分頁) 為高或低時,系統會自動設定特定標準事件物件。 驅動程式可以等候這些事件調整其集區使用量。 如需詳細資訊,請參閱 標準事件物件

ExAllocatePool 配置的記憶體未初始化。 如果核心模式驅動程式要讓使用者模式軟體 (可見,則必須先將這個記憶體設為零,以避免) 外泄潛在的特殊許可權內容。

規格需求

需求
最低支援的用戶端 已過時。 此例程只會針對現有的二進位檔導出。 請改用 ExAllocatePoolWithTag。
目標平台 Universal
標頭 wdm.h (包括 Wdm.h、Ntddk.h、Ntifs.h、Classpnp.h、Smcnt.h)
程式庫 NtosKrnl.lib
Dll NtosKrnl.exe
IRQL IRQL <= DISPATCH_LEVEL (请参阅一节)
DDI 合規性規則 CheckDeviceObjectFlags (wdm) HwStorPortProhibitedDDIs (storport) IrqlExAllocatePool (wdm ) 、 PowerDownAllocate (wdm) PowerUpFail (wdm) SpNoWait (storport) StorPortStartIo (storport) UnsafeAllocatePool (kmdf ) 、 UnsafeAllocatePool (wdm)

另請參閱

ExAllocatePoolWithTag

ExFreePool

POOL_TYPE