PsQuerySystemAvailableCpus 函数查询可用于系统进程的 CPU 集。
语法
NTSTATUS PsQuerySystemAvailableCpus(
[in, out] PKAFFINITY_EX Affinity,
[in, optional] PULONG64 ObservedSequenceNumber,
[out] PULONG64 SequenceNumber
);
参数
[in, out] Affinity
指向将接收系统进程的可用 CPU 集的扩展关联对象(PKAFFINITY_EX)的指针。
[in, optional] ObservedSequenceNumber
指向调用方通过上一次调用此例程观察到的最新序列号的可选指针。 如果此序列号与当前序列号匹配,则例程将返回STATUS_NO_WORK_DONE,并且不写入关联缓冲区。
[out] SequenceNumber
指向缓冲区的指针,该缓冲区将接收系统进程的可用 CPU 的当前序列号。
返回值
PsQuerySystemAvailableCpus 返回以下 NTSTATUS 值之一:
| 返回代码 | DESCRIPTION |
|---|---|
| STATUS_SUCCESS | 查询已成功完成。 |
| STATUS_INVALID_PARAMETER | 任何必需的缓冲区均为 NULL。 |
| STATUS_NO_WORK_DONE | 给定的序列号与当前序列号匹配,并且未执行任何查询。 |
| STATUS_BUFFER_TOO_SMALL | 给定的关联缓冲区太小。 |
注解
可以在 IRQL 中从 PASSIVE_LEVEL 调用此例程,以DISPATCH_LEVEL。
地缘缓冲区必须足够大,才能容纳活动处理器组计数。 使用 KeQueryActiveGroupCount 确定所需的大小。
序列号允许调用方通过检查自上次调用以来的 CPU 可用性是否已更改来优化重复查询。
此函数查询系统进程的 CPU 可用性,这通常表示系统中所有可用的 CPU。
要求
| 要求 | 价值 |
|---|---|
| 标头 | wdm.h |
| IRQL | 要DISPATCH_LEVEL的PASSIVE_LEVEL |