FsRtlAllocatePoolWithTag 宏 (ntifs.h)

FsRtlAllocatePoolWithTag 例程分配池内存。

语法

void FsRtlAllocatePoolWithTag(
  [in]  PoolType,
  [in]  NumberOfBytes,
  [in]  Tag
);

参数

[in] PoolType

要分配的池的类型。 下列类型作之一:

  • NonPagedPool
  • PagedPool
  • NonPagedPoolCacheAligned
  • PagedPoolCacheAligned
注意NonPagedPoolMustSucceedNonPagedPoolCacheAlignedMustS 池类型已过时,不应再使用。
 

[in] NumberOfBytes

要分配的字节数。 此参数是必需的,不能为零。

[in] Tag

指定已分配内存的池标记。 驱动程序通常将池标记指定为一到四个 7 位 ASCII 字符的字符串,用单 (引号分隔,例如“abcd”) 。 此参数是必需的,不能为零。

返回值

备注

如果池分配失败, FsRtlAllocatePoolWithTag 将引发STATUS_INSUFFICIENT_RESOURCES异常。 若要控制此池分配失败是否发生,驱动程序应在 try-excepttry-finally 语句中包装对 FsRtlAllocatePoolWithTag 的调用。

系统将 Tag 参数指定的池标记与分配的缓冲区相关联。 编程工具(如 Windows 调试器 (WinDbg) )可以显示与每个分配的缓冲区关联的池标记。 池标记的值通常按反向顺序显示。 例如,如果调用方将“Fred”作为 Tag 参数的值传递,则如果转储池或跟踪调试器中的池使用情况,则此值将显示为“derF”。

有关内存管理的详细信息,请参阅 内存管理

注意

FsRtlAllocatePoolWithTag 分配的内存未初始化。 如果内核模式驱动程序要使用户模式软件 (可见,则内核模式驱动程序必须首先为此内存零,以避免) 泄露潜在的特权内容。

FsRtlAllocatePoolWithTag 的调用方必须在 IRQL <= DISPATCH_LEVEL运行。 DISPATCH_LEVEL的调用方必须指定 NonPagedXxxPoolType。 否则,调用方必须在 IRQL <= APC_LEVEL 上运行。

要求

   
目标平台 通用
标头 ntifs.h (包括 Ntifs.h)
Library NtosKrnl.lib
DLL NtosKrnl.exe
IRQL <= DISPATCH_LEVEL (请参阅“备注”部分)

另请参阅

ExAllocatePoolWithTag

ExFreePool