共用方式為


_RxAllocatePoolWithTag函式

_RxAllocatePoolWithTag 從集區配置記憶體,其區塊開頭有四位元組標記,可用來協助攔截記憶體回收的實例。

語法

VOID* _RxAllocatePoolWithTag(
   ULONG Type,
   ULONG Size,
   ULONG Tag,
   PSZ   FileName,
   ULONG LineNumber
);

參數

類型
要配置的集區類型。 此參數可以是下列其中一個列舉值,適用於 POOL_TYPE:

NonPagedPool
可從任何 IRQL 存取的非可分頁系統記憶體。 NonPagedPool 記憶體是一項不足的資源,驅動程式應該在必要時才配置它。 系統只能以PAGE_SIZE的倍數配置大於 NonPagedPool PAGE_SIZE的緩衝區。 緩衝區的要求大於PAGE_SIZE,但不是PAGE_SIZE多個緩衝區,會浪費不可分頁的記憶體。

PagedPool
只能在 IRQL < DISPATCH_LEVEL配置和存取的可分頁系統記憶體。

大小
要配置的記憶體區塊大小,以位元組為單位。

標籤
要用來標記已配置緩衝區的四位元組標記。 如需如何使用標籤的描述,請參閱 ExAllocatePoolWithTag。 標記中每個字元的 ASCII 值必須介於 0 到 127 之間。

FileName
發生記憶體配置的來源檔名指標。 目前未使用此參數。

LineNumber
來源檔案中發生記憶體配置的行號。 目前未使用此參數。

傳回值

如果可用集區中的記憶體不足,RxAllocatePoolWithTag 會傳回 NULL,以滿足要求。 否則,例程會傳回已配置記憶體的指標。

備註

建議呼叫 RxAllocatePoolWithTag 宏,而不是直接使用此例程。 在零售組建上,此宏會定義為呼叫 ExAllocatePoolWithTag。 在核取的組建上,此宏會定義為呼叫 _RxAllocatePoolWithTag

_RxAllocatePoolWithTag例程會呼叫 ExAllocatePoolWithTagPriority,其優先順序 (要求的重要性) 設為 LowPoolPriority。 當低資源執行時,系統可能會使 LowPoolPriority 的要求失敗。 使用這個例程時,驅動程式應該準備好從配置失敗中復原。

當系統從集區內存配置緩衝區PAGE_SIZE或更新版本時,它會對齊頁面界限上的緩衝區。 小於PAGE_SIZE的記憶體要求不一定在頁面界限上對齊,但一律符合單一頁面,而且會對齊 8 位元組界限。 任何要求大於PAGE_SIZE區塊且不是多個PAGE_SIZE成功配置都會浪費最後一個配置頁面上所有未使用的位元組。

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

呼叫 _RxFreePool,應釋放配置_RxAllocatePoolWithTag的記憶體

_RxAllocatePoolWithTag的呼叫端必須在 IRQL <= DISPATCH_LEVEL執行。 在 DISPATCH_LEVEL 執行的呼叫端必須指定 Type 參數的 NonPagedPool 值。 在 IRQL <= APC_LEVEL執行的呼叫端可以指定 Type 參數的任何POOL_TYPE值。

規格需求

目標平台

桌面

標頭

Ntrxdef.h (包含 Ntrxdef.h)

IRQL

請參閱一節。

另請參閱

ExAllocatePoolWithTag

_RxCheckMemoryBlock

_RxFreePool