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
用於已配置記憶體的集區標籤。 如需詳細資訊,請參閱 ExAllocatePoolWithTag 的 Tag 參數。
[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 執行的呼叫端必須指定 PoolType 的 NonPagedXxx 值。 在 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) |