共用方式為


ExAllocatePoolWithQuotaTag 函式 (wdm.h)

ExAllocatePoolWithQuotaTag 例程會配置集區內存,針對目前的進程收取配額。

警告

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

語法

PVOID ExAllocatePoolWithQuotaTag(
  [in] __drv_strictTypeMatch(__drv_typeExpr)POOL_TYPE PoolType,
  [in] SIZE_T                                         NumberOfBytes,
  [in] ULONG                                          Tag
);

參數

[in] PoolType

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

您可以使用 POOL_QUOTA_FAIL_INSTEAD_OF_RAISE 旗標,以位 ORing 此值來修改 PoolType 值。 如果無法滿足要求,此旗標會導致例程傳回 NULL 值。

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

[in] NumberOfBytes

指定要配置的位元組數。

[in] Tag

指定已配置記憶體的集區標籤。 如需詳細資訊,請參閱 ExAllocatePoolWithTagTag 參數。

傳回值

ExAllocatePoolWithQuotaTag 會傳回已配置集區的指標。

如果無法滿足要求,除非指定POOL_QUOTA_FAIL_INSTEAD_OF_RAISE, 否則ExAllocatePoolWithQuotaTag 會引發例外狀況。 基於效能考慮,最好使用 POOL_QUOTA_FAIL_INSTEAD_OF_RAISE。

備註

此例程是由最高層級驅動程式所呼叫,這些驅動程式會配置記憶體以滿足原本發出 I/O 要求之進程內容中的要求。 較低層級的驅動程式會改為呼叫 ExAllocatePoolWithTag

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

系統會將集區標籤與配置的記憶體產生關聯。 WinDbg 之類的程式設計工具可以顯示與每個配置緩衝區相關聯的集區標籤。 Tag 的值通常會以反向順序顯示。 例如,如果呼叫端將 『Fred』 當做 Tag 傳遞,如果集區已傾印或追蹤調試程式中的集區使用量,它會顯示為 『derF』。

已配置的緩衝區可以使用 ExFreePool 或 ExFreePoolWithTag 釋放。

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

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

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

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

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

規格需求

需求
目標平台 Universal
標頭 wdm.h (包括 Wdm.h、Ntddk.h、Ntifs.h)
程式庫 NtosKrnl.lib
Dll NtosKrnl.exe
IRQL <= DISPATCH_LEVEL (请参阅一节)
DDI 合規性規則 HwStorPortProhibitedDIS (storport) SpNoWait (storport) StorPortStartIo (storport) UnsafeAllocatePool (kmdf)

另請參閱

ExAllocatePoolWithTag

ExFreePool

ExFreePoolWithTag

POOL_TYPE