Função GetLogicalProcessorInformationEx (sysinfoapi.h)

Recupera informações sobre as relações de processadores lógicos e hardware relacionado.

Sintaxe

BOOL GetLogicalProcessorInformationEx(
  [in]            LOGICAL_PROCESSOR_RELATIONSHIP           RelationshipType,
  [out, optional] PSYSTEM_LOGICAL_PROCESSOR_INFORMATION_EX Buffer,
  [in, out]       PDWORD                                   ReturnedLength
);

Parâmetros

[in] RelationshipType

O tipo de relação a ser recuperada. Esse parâmetro pode ser um dos seguintes valores de LOGICAL_PROCESSOR_RELATIONSHIP .

Valor Significado
RelationProcessorCore
0
Recupera informações sobre processadores lógicos que compartilham um único núcleo de processador.
RelationNumaNode
1
Recupera informações sobre processadores lógicos que fazem parte do mesmo nó NUMA.
RelationCache
2
Recupera informações sobre processadores lógicos que compartilham um cache.
RelationProcessorPackage
3
Recupera informações sobre processadores lógicos que compartilham um pacote físico.
RelationGroup
4
Recupera informações sobre processadores lógicos que compartilham um grupo de processadores.
RelationProcessorDie
5
Recupera informações sobre processadores lógicos que compartilham um processador die.
RelationNumaNodeEx
6
Recupera informações sobre processadores lógicos que fazem parte do mesmo nó NUMA (com afinidade completa).
RelationProcessorModule
7
Recupera informações sobre processadores lógicos que compartilham um módulo de processador.
RelationAll
0xffff
Recupera informações sobre processadores lógicos para todos os tipos de relação (cache, nó NUMA, núcleo do processador, pacote físico, grupo de processadores, processador die e módulo de processador).

[out, optional] Buffer

Um ponteiro para um buffer que recebe uma sequência de estruturas de SYSTEM_LOGICAL_PROCESSOR_INFORMATION_EX de tamanho variável. Se a função falhar, o conteúdo desse buffer será indefinido.

[in, out] ReturnedLength

Na entrada, especifica o comprimento do buffer apontado por Buffer, em bytes. Se o buffer for grande o suficiente para conter todos os dados, essa função terá êxito e ReturnedLength será definido como o número de bytes retornados. Se o buffer não for grande o suficiente para conter todos os dados, a função falhará, GetLastError retornará ERROR_INSUFFICIENT_BUFFER e ReturnedLength será definido como o comprimento do buffer necessário para conter todos os dados. Se a função falhar com um erro diferente de ERROR_INSUFFICIENT_BUFFER, o valor de ReturnedLength será indefinido.

Retornar valor

Se a função for bem-sucedida, o valor retornado será TRUE e pelo menos uma estrutura SYSTEM_LOGICAL_PROCESSOR_INFORMATION_EX será gravada no buffer de saída.

Se a função falhar, o valor retornado será FALSE. Para obter informações de erro estendidas, chame GetLastError.

Comentários

Se um processo de 32 bits em execução em WOW64 chamar essa função em um sistema com mais de 64 processadores, algumas das máscaras de afinidade do processador retornadas pela função poderão estar incorretas. Isso ocorre porque o DWORD de alta ordem da estrutura KAFFINITY de 64 bits que representa todos os 64 processadores é "dobrado" em uma estrutura KAFFINITY de 32 bits no buffer do chamador. Como resultado, as máscaras de afinidade para processadores de 32 a 63 são representadas incorretamente como duplicatas das máscaras para processadores de 0 a 31. Além disso, as máscaras de afinidade para processadores de 32 a 63 são representadas incorretamente como duplicatas das máscaras para processadores de 0 a 31. Além disso, a soma de todos os valores ActiveProcessorCount e MaximumProcessorCount por grupo relatados em estruturas PROCESSOR_GROUP_INFO pode excluir alguns processadores lógicos ativos.

Quando essa função é chamada com um tipo de relação RelationProcessorCore, ela retorna uma estrutura PROCESSOR_RELATIONSHIP para cada núcleo de processador ativo em cada grupo de processadores no sistema. Isso ocorre por design, porque um thread de 32 bits não habilitado pode ser executado em qualquer processador lógico em um determinado grupo, incluindo processadores de 32 a 63. Um chamador de 32 bits pode usar a contagem total de estruturas de PROCESSOR_RELATIONSHIP para determinar o número real de núcleos de processador ativos no sistema. No entanto, a afinidade de um thread de 32 bits não pode ser definida explicitamente como processador lógico de 32 a 63 de qualquer grupo de processadores.

Para compilar um aplicativo que usa essa função, defina _WIN32_WINNT >= 0x0601. Para obter mais informações, consulte Usando os cabeçalhos do Windows.

Comportamento começando com o Windows Server 2022 (21H2, build 20348)

O comportamento dessa e de outras funções NUMA foi modificado para dar melhor suporte a sistemas com nós contendo mais de 64 processadores. Para obter mais informações sobre essa alteração, incluindo informações sobre como habilitar o comportamento antigo dessa API, consulte Suporte a NUMA.

As solicitações para RelationNumaNode retornarão NUMA_NODE_RELATIONSHIP estruturas que contêm apenas a afinidade do nó dentro do grupo primário. O valor GroupCount será 1 e o tamanho da estrutura será fixo.

As solicitações para RelationNumaNodeEx ou RelationAll retornarão NUMA_NODE_RELATIONSHIP estruturas que contêm uma matriz de afinidades para o nó em todos os grupos. O GroupCount relata o número de afinidades e o tamanho da estrutura é variável.

Requisitos

Requisito Valor
Cliente mínimo com suporte Windows 7 [aplicativos da área de trabalho | Aplicativos UWP]
Servidor mínimo com suporte Windows Server 2008 R2 [aplicativos da área de trabalho | Aplicativos UWP]
Plataforma de Destino Windows
Cabeçalho sysinfoapi.h (inclua Windows.h)
Biblioteca Kernel32.lib
DLL Kernel32.dll

Confira também

SYSTEM_LOGICAL_PROCESSOR_INFORMATION_EX