GetLogicalProcessorInformationEx 函数 (sysinfoapi.h)
检索有关逻辑处理器和相关硬件关系的信息。
语法
BOOL GetLogicalProcessorInformationEx(
[in] LOGICAL_PROCESSOR_RELATIONSHIP RelationshipType,
[out, optional] PSYSTEM_LOGICAL_PROCESSOR_INFORMATION_EX Buffer,
[in, out] PDWORD ReturnedLength
);
参数
[in] RelationshipType
要检索的关系类型。 此参数可以是以下 LOGICAL_PROCESSOR_RELATIONSHIP 值之一。
[out, optional] Buffer
指向接收大小可变SYSTEM_LOGICAL_PROCESSOR_INFORMATION_EX结构的序列 的缓冲区的 指针。 如果函数失败,则此缓冲区的内容未定义。
[in, out] ReturnedLength
在输入时,指定 Buffer 指向的 缓冲区的长度(以字节为单位)。 如果缓冲区足够大,足以包含所有数据,则此函数成功,并将 ReturnedLength 设置为返回的字节数。 如果缓冲区不够大,无法包含所有数据,则函数会失败, GetLastError 将返回ERROR_INSUFFICIENT_BUFFER,并将 ReturnedLength 设置为包含所有数据所需的缓冲区长度。 如果函数失败并出现除 ERROR_INSUFFICIENT_BUFFER 以外的错误,则 ReturnedLength 的值未定义。
返回值
如果函数成功,则返回值为 TRUE,并且至少将一个 SYSTEM_LOGICAL_PROCESSOR_INFORMATION_EX 结构写入输出缓冲区。
如果函数失败,则返回值为 FALSE。 要获得更多的错误信息,请调用 GetLastError。
注解
如果在 WOW64 下运行的 32 位进程在具有 64 个以上处理器的系统上调用此函数,则函数返回的某些处理器关联掩码可能不正确。 这是因为表示所有 64 个处理器的 64 位 KAFFINITY 结构的高阶 DWORD 被“折叠”到调用方缓冲区中的 32 位 KAFFINITY 结构中。 因此,处理器 32 到 63 的关联掩码被错误地表示为处理器 0 到 31 的掩码的副本。 此外,处理器 32 到 63 的关联掩码错误地表示为处理器 0 到 31 的掩码的副本。 此外,在PROCESSOR_GROUP_INFO结构中报告的所有每组 ActiveProcessorCount 和 MaximumProcessorCount 值的总 和 可能会排除某些活动逻辑处理器。
当使用关系类型 RelationProcessorCore 调用此函数时,它将为系统每个处理器组中的每个活动处理器核心返回 PROCESSOR_RELATIONSHIP 结构。 这是设计使然,因为未加入的 32 位线程可以在给定组中的任何逻辑处理器上运行,包括处理器 32 到 63。 32 位调用方可以使用 PROCESSOR_RELATIONSHIP 结构的总计数来确定系统上活动处理器核心的实际数量。 但是,不能将 32 位线程的相关性显式设置为任何处理器组的逻辑处理器 32 到 63。
若要编译使用此函数的应用程序,请设置 _WIN32_WINNT >= 0x0601。 有关详细信息,请参阅 使用 Windows 标头。
从 Windows Server 2022 (21H2 开始的行为,内部版本 20348)
已修改此函数和其他 NUMA 函数的行为,以便更好地支持节点包含 64 个以上处理器的系统。 有关此更改的详细信息,包括有关启用此 API 的旧行为的信息,请参阅 NUMA 支持。
RelationNumaNode 的请求将返回NUMA_NODE_RELATIONSHIP结构,这些结构仅包含其主组中节点的相关性。 GroupCount 值为 1,结构大小是固定的。
RelationNumaNodeEx 或 RelationAll 的请求将返回NUMA_NODE_RELATIONSHIP结构,这些结构包含所有组上节点的地缘数组。 GroupCount 报告关联数,结构大小可变。
要求
要求 | 值 |
---|---|
最低受支持的客户端 | Windows 7 [桌面应用 |UWP 应用] |
最低受支持的服务器 | Windows Server 2008 R2 [桌面应用 |UWP 应用] |
目标平台 | Windows |
标头 | sysinfoapi.h (包括 Windows.h) |
Library | Kernel32.lib |
DLL | Kernel32.dll |