ExAllocatePoolWithQuota 函式 (wdm.h)
警告
ExAllocatePoolWithQuota 例程已過時,且已在 Windows 10 2004 版中已被取代,且已由 ExAllocatePool2 取代。 如需詳細資訊,請參閱 更新對 ExAllocatePool2 和 ExAllocatePool3 的已淘汰 ExAllocatePool 呼叫。
在 Windows 10 版本 2004 之前開發 Windows 版本的驅動程式時,請使用 ExAllocatePoolQuotaZero。
ExAllocatePoolWithQuota 會配置集區內存,針對目前的進程收取配額。
語法
PVOID ExAllocatePoolWithQuota(
[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
指定要配置的位元組數。
傳回值
ExAllocatePoolWithQuota 會傳回已配置集區的指標。
如果無法滿足要求, ExAllocatePoolWithQuota 會引發例外狀況。
備註
這個例程是由最高層級的驅動程式所呼叫,這些驅動程式會配置記憶體以滿足原本發出 I/O 要求之進程內容中的要求。 較低層級的驅動程式會改為呼叫 ExAllocatePoolWithTag 。
如果 NumberOfBytes 是PAGE_SIZE或更新版本,則會配置頁面對齊的緩衝區。 配額不會向程式收取PAGE_SIZE或更新版本的配置費用。
小於PAGE_SIZE的記憶體配置會配置在頁面內,而且不會跨越頁面界限。 PAGE_SIZE或更少記憶體配置不一定靠頁面對齊,而是對齊 32 位系統中的 8 位元組界限,以及 64 位系統中的 16 位元組界限。
請勿設定 NumberOfBytes = 0。 避免零長度配置,因為它們浪費集區標頭空間,而且在許多情況下,表示呼叫程式代碼中的潛在驗證問題。 基於這個理由, 驅動程式驗證器 會將這類配置標幟為可能的錯誤。
當集區數量 (分頁或非分頁) 為高或低時,系統會自動設定特定標準事件物件。 驅動程式可以等候這些事件調整其集區使用量。 如需詳細資訊,請參閱 標準事件物件。
ExAllocatePoolWithQuota 配置的記憶體未初始化。 如果核心模式驅動程式要讓使用者模式軟體 (可見,則必須先將這個記憶體設為零,以避免) 外泄潛在的特殊許可權內容。
ExAllocatePoolWithQuota 的呼叫端必須在 IRQL <= DISPATCH_LEVEL執行。 在 DISPATCH_LEVEL 執行的呼叫端必須指定 PoolType 的 NonPagedXxx 值。 在 IRQL <= APC_LEVEL執行的呼叫端可以指定任何 POOL_TYPE 值,但也必須考慮 IRQL 和環境來判斷集區類型。
規格需求
需求 | 值 |
---|---|
最低支援的用戶端 | 已過時。 此例程只會針對現有的驅動程式二進位檔導出。 請改用 ExAllocatePoolWithQuotaTag。 |
目標平台 | Universal |
標頭 | wdm.h (包括 Wdm.h、Ntddk.h、Ntifs.h、Classpnp.h) |
程式庫 | NtosKrnl.lib |
Dll | NtosKrnl.exe |
IRQL | <= DISPATCH_LEVEL (请参阅一节) |
DDI 合規性規則 | HwStorPortProhibitedDIS (storport) 、 SpNoWait (storport) 、 StorPortStartIo (storport) 、 UnsafeAllocatePool (kmdf) |