共用方式為


ExAllocatePoolZero 函式 (wdm.h)

警告

Microsoft 知道 ExAllocatePoolZero 的問題,可能會導致配置在 Windows 10 1909 版上沒有零。 此問題已在 Windows 10 2020 年 12 月 16 日 Windows 10 2004 版和 Enterprise WDK (EWDK) 的安全性重新整理中修正。 如需下載最新 WDK 的資訊,請參閱 下載 Windows 驅動程式套件 (WDK)

此例程是 的包裝函式,以及 ExAllocatePoolWithTag 的建議取代選項。

ExAllocatePoolZero 會配置指定類型的集區內存,並傳回已配置區塊的指標。 它與 ExAllocatePoolWithTag 相同,但零會初始化配置的記憶體。

語法

PVOID ExAllocatePoolZero(
  __drv_strictTypeMatch(__drv_typeExpr)POOL_TYPE PoolType,
  SIZE_T                                         NumberOfBytes,
  ULONG                                          Tag
);

參數

PoolType

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

您可以使用 中 wdm.h定義的POOL_RAISE_IF_ALLOCATION_FAILURE旗標來執行位 OR 來修改列舉值。 如果無法滿足要求,此旗標會導致引發例外狀況。 不建議使用此旗標,因為它成本很高。

同樣地,您可以使用 POOL_COLD_ALLOCATION 旗標 (位 ORing 此值來修改 PoolType 值,) 中也會定義為 wdm.h 核心的提示,以從可能快速分頁的頁面配置記憶體。 若要盡可能減少駐留集區內存的數量,您不應該經常參考這些配置。 POOL_COLD_ALLOCATION旗標只是諮詢。

NumberOfBytes

要配置的位元組數目。

Tag

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

傳回值

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

備註

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

若要在 Windows 10 2004 版之前的 Windows 版本上執行,驅動程式必須先定義POOL_ZERO_DOWN_LEVEL_SUPPORT並呼叫 ExInitializeDriverRuntime,再呼叫此函式。

此函式與 ExAllocatePoolWithTag 之間的唯一差異是記憶體為零初始化。 如果不想要的話,請改用 ExAllocatePoolUninitialized ,這是 ExAllocatePoolWithTag 的包裝函式。

驅動程式應該只會存取其配置的位元組範圍內記憶體。 存取此範圍以外的記憶體可能會損毀集區,並導致系統當機。

如需其他指引,請參閱 ExAllocatePoolWithTag 的一節。

規格需求

需求
最低支援的用戶端 Windows 10 版本 2004 需要 WDK。 以 Windows 7 和更新版本的 Windows 作業系統為目標。
目標平台 Universal
標頭 wdm.h (包括 Wdm.h、Ntddk.h、Ntifs.h)
程式庫 NtosKrnl.lib
IRQL IRQL <= DISPATCH_LEVEL (请参阅一节)
DDI 合規性規則 CheckDeviceObjectFlags、HwStorPortProhibitedDDIs、IrqlExAllocatePool、IrqlExFree1、PowerDownAllocate、PowerUpFail、SpNoWait、StorPortStartIo

另請參閱

ExAllocatePoolUninitialized