FsRtlAllocatePoolWithTag 宏 (ntifs.h)
FsRtlAllocatePoolWithTag 例程分配池内存。
语法
void FsRtlAllocatePoolWithTag(
[in] PoolType,
[in] NumberOfBytes,
[in] Tag
);
参数
[in] PoolType
要分配的池的类型。 下列类型作之一:
- NonPagedPool
- PagedPool
- NonPagedPoolCacheAligned
- PagedPoolCacheAligned
NonPagedPoolMustSucceed 和 NonPagedPoolCacheAlignedMustS 池类型已过时,不应再使用。
[in] NumberOfBytes
要分配的字节数。 此参数是必需的,不能为零。
[in] Tag
指定已分配内存的池标记。 驱动程序通常将池标记指定为包含 1 到 4 个 7 位 ASCII 字符的字符串,由单引号分隔 (例如“abcd”) 。 此参数是必需的,不能为零。
返回值
无
备注
如果发生池分配失败, FsRtlAllocatePoolWithTag 将引发STATUS_INSUFFICIENT_RESOURCES异常。 若要控制是否发生此池分配失败,驱动程序应在 try-except 或 try-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 (请参阅备注部分) |
另请参阅
反馈
https://aka.ms/ContentUserFeedback。
即将发布:在整个 2024 年,我们将逐步淘汰作为内容反馈机制的“GitHub 问题”,并将其取代为新的反馈系统。 有关详细信息,请参阅:提交和查看相关反馈