ExAllocatePoolPriorityZero 函数 (wdm.h)
注意
Microsoft 注意到 ExAllocatePoolPriorityZero 存在一个问题,该问题可能导致在 Windows 10 版本 1909 上分配未归零。 2020 年 12 月 16 日,Windows 10版本 2004 的 WDK 和企业版 WDK (EWDK) Windows 10 2020 年 12 月 16 日修复了此问题。 有关下载最新 WDK 的信息,请参阅 下载 Windows 驱动程序工具包 (WDK) 。
此例程是 ExAllocatePoolWithTagPriority 的包装器和推荐的替换选项。
ExAllocatePoolPriorityZero 分配指定类型的池内存。
它与 ExAllocatePoolWithTagPriority 相同,只是零初始化分配的内存。 如果不需要此操作,请改用 ExAllocatePoolPriorityUninitialized 。
语法
PVOID ExAllocatePoolPriorityZero(
__drv_strictTypeMatch(__drv_typeExpr)POOL_TYPE PoolType,
SIZE_T NumberOfBytes,
ULONG Tag,
EX_POOL_PRIORITY Priority
);
参数
PoolType
要分配的池内存的类型。 有关可用池内存类型的说明,请参阅 POOL_TYPE。
可以通过使用 中 wdm.h
定义的POOL_RAISE_IF_ALLOCATION_FAILURE标志执行按位或来修改枚举值。 如果请求无法满足,则此标志会导致引发异常。 不建议使用此标志,因为它的成本很高。
同样,可以通过使用) 中wdm.h
定义的POOL_COLD_ALLOCATION标志对此值进行按位 ORing 来修改 PoolType 值 (作为内核的提示,以从可能快速分页的页面分配内存。 若要尽可能减少驻留池内存量,不应频繁引用这些分配。 POOL_COLD_ALLOCATION标志只是公告标志。
NumberOfBytes
要分配的字节数。
Tag
要用于已分配内存的池标记。 将池标记指定为一到四个字符的非零字符文本,由单引号分隔 (例如 Tag1
) 。 字符串通常按反向顺序指定, (例如 1gaT
,) 。 标记中的每个 ASCII 字符必须是) 0x7E (平铺) 0x20 (空间范围内的值。 每个分配代码路径都应使用唯一的池标记来帮助调试器和验证程序识别代码路径。
Priority
指定此请求优先级 的EX_POOL_PRIORITY 枚举值。
返回值
如果可用池中内存不足,则 ExAllocatePoolPriorityZero 返回 NULL,除非指定POOL_RAISE_IF_ALLOCATION_FAILURE。 否则,例程返回指向已分配内存的指针。
注解
若要在 Windows 10 版本 2004 之前的 Windows 版本上运行,驱动程序必须在调用此函数之前定义 POOL_ZERO_DOWN_LEVEL_SUPPORT并调用 ExInitializeDriverRuntime。
有关其他指南,请参阅 ExAllocatePoolWithTagPriority 的“备注”部分。
要求
要求 | 值 |
---|---|
最低受支持的客户端 | Windows 10版本 2004 需要 WDK。 面向 Windows 操作系统的 Windows 7 及更高版本。 |
目标平台 | 通用 |
标头 | wdm.h(包括 Wdm.h、Ntddk.h、Ntifs.h) |
Library | NtosKrnl.lib |
DLL | NtosKrnl.exe |
IRQL | <= DISPATCH_LEVEL (请参阅备注部分) |
DDI 符合性规则 | HwStorPortProhibitedDDI、IrqlExAllocatePool、IrqlExFree2、SpNoWait、StorPortStartIo |