ExAllocatePoolZero 函式 (wdm.h)
謹慎
Microsoft知道 ExAllocatePoolZero 的問題,可能會導致配置在 Windows 10 版本 1909 上未獲得零。 此問題已在 2020 年 12 月 16 日 Windows 10 版本 2004 的 WDK 和企業版 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旗標來修改 PoolType 值 wdm.h
,做為核心的提示,從可能快速分頁的頁面配置記憶體。 若要盡可能減少常駐集區內存的數量,您不應該經常參考這些配置。 POOL_COLD_ALLOCATION旗標只是諮詢。
NumberOfBytes
要配置的位元元組數目。
Tag
要用於已配置記憶體的集區標籤。 將集區標記指定為以單引號分隔之一到四個字元的非零字元常值(例如,Tag1
)。 字串通常會以反向順序指定(例如,1gaT
)。 標記中的每個 ASCII 字元都必須是範圍0x20(空格)中的值,才能0x7E(tilde)。 每個配置程式代碼路徑都應該使用唯一的集區標記來協助調試程式和驗證程式識別程式代碼路徑。
傳回值
如果可用集區中的記憶體不足,ExAllocatePoolZero 會傳回 NULL 來滿足要求。 否則,例程會傳回所配置記憶體的指標。
言論
此例程用於記憶體的一般集區配置。
若要在 Windows 10 版本 2004 之前的 Windows 版本上執行,驅動程式必須先定義POOL_ZERO_DOWN_LEVEL_SUPPORT,並在呼叫此函式之前呼叫 exInitializeDriverRuntime。
此函式與 exAllocatePoolWithTag 之間唯一的差異在於記憶體為零初始化。 如果不需要,請改用 ExAllocatePoolUninitialized,這是 ExAllocatePoolWithTag 的包裝函式。
驅動程式應該只會存取其配置的位元組範圍內記憶體。 存取超出此範圍的記憶體可能會損毀集區,並導致系統當機。
如需其他指引,請參閱 ExAllocatePoolWithTag 的一節。
要求
要求 | 價值 |
---|---|
最低支援的用戶端 | 需要適用於 Windows 10 版本 2004 的 WDK。 以 Windows 7 和更新版本的 Windows作系統為目標。 |
目標平臺 | 普遍 |
標頭 | wdm.h (包括 Wdm.h、Ntddk.h、Ntifs.h) |
連結庫 | NtosKrnl.lib |
IRQL | IRQL <= DISPATCH_LEVEL (請參閱一節) |
DDI 合規性規則 | CheckDeviceObjectFlags、HwStorPortProhibitedDIs、IrqlExAllocatePool、IrqlExFree1、PowerDownAllocate、PowerUpFail、SpNoWait、StorPortStartIo |