共用方式為


ExAllocatePoolWithTagPriority 函式 (wdm.h)

ExAllocatePoolWithTagPriority 例程會配置指定類型的集區內存。

警告

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

語法

PVOID ExAllocatePoolWithTagPriority(
  [in] __drv_strictTypeMatch(__drv_typeCond)POOL_TYPE        PoolType,
  [in] SIZE_T                                                NumberOfBytes,
  [in] ULONG                                                 Tag,
  [in] __drv_strictTypeMatch(__drv_typeExpr)EX_POOL_PRIORITY Priority
);

參數

[in] PoolType

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

您可以使用 POOL_RAISE_IF_ALLOCATION_FAILURE 旗標將此值位 ORing 來修改 PoolType 值。 如果無法滿足要求,此旗標會導致引發例外狀況。

同樣地,您可以使用 POOL_COLD_ALLOCATION 旗標將此值位 ORing 為核心的提示,以修改 PoolType 值,以從可能快速分頁的頁面配置記憶體。 若要盡可能減少駐留集區內存的數量,您不應該經常參考這些配置。 POOL_COLD_ALLOCATION旗標只是諮詢,而且可從 Windows XP 開始提供。

[in] NumberOfBytes

要配置的位元組數目。

[in] Tag

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

[in] Priority

此要求的優先順序。 將此參數設定為下列其中一個 EX_POOL_PRIORITY 列舉值。

優先權值 Description
LowPoolPriority 指定當系統對資源執行不足時,系統可能會失敗要求。 可從配置失敗中復原的驅動程式配置會使用此優先順序。
NormalPoolPriority 指定當系統在資源上執行非常低時,系統可能會失敗要求。 大部分驅動程式都應該使用此值。
HighPoolPriority 指定系統不得讓要求失敗,除非它完全不在資源中。 驅動程式只有在要求成功非常重要時,才會使用此值。

EX_POOL_PRIORITY列舉會定義 XxxSpecialPoolOverrun 和XxxSpecialPoolUnderrun 變體,以指定啟用驅動程式驗證器 (或特殊集區) 時應如何配置記憶體。 如果驅動程式指定 XxxSpecialPoolUnderrun,當 記憶體管理員特殊集區配置記憶體時,它會在實體頁面的開頭配置它。 如果驅動程式指定 XxxSpecialPoolOverrun,記憶體管理員會在實體頁面的結尾配置它。

傳回值

ExAllocatePoolWithTagPriority 如果可用集區中的記憶體不足,無法滿足要求,除非指定POOL_RAISE_IF_ALLOCATION_FAILURE,否則會傳回 NULL 。 否則,例程會傳回已配置記憶體的指標。

備註

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

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

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

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

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

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

規格需求

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

另請參閱

ExAllocatePoolWithTag

ExFreePool

POOL_TYPE