GetLogicalProcessorInformationEx, fonction (sysinfoapi.h)

Récupère des informations sur les relations entre les processeurs logiques et le matériel associé.

Syntaxe

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

Paramètres

[in] RelationshipType

Type de relation à récupérer. Ce paramètre peut être l’une des valeurs LOGICAL_PROCESSOR_RELATIONSHIP suivantes.

Valeur Signification
RelationProcessorCore
0
Récupère des informations sur les processeurs logiques qui partagent un cœur de processeur unique.
RelationNumaNode
1
Récupère des informations sur les processeurs logiques qui font partie du même nœud NUMA.
RelationCache
2
Récupère des informations sur les processeurs logiques qui partagent un cache.
RelationProcessorPackage
3
Récupère des informations sur les processeurs logiques qui partagent un package physique.
RelationGroup
4
Récupère des informations sur les processeurs logiques qui partagent un groupe de processeurs.
RelationProcessorDie
5
Récupère des informations sur les processeurs logiques qui partagent une matrice de processeur.
RelationNumaNodeEx
6
Récupère des informations sur les processeurs logiques qui font partie du même nœud NUMA (avec une affinité totale).
RelationProcessorModule
7
Récupère des informations sur les processeurs logiques qui partagent un module de processeur.
RelationTous
0xffff
Récupère des informations sur les processeurs logiques pour tous les types de relation (cache, nœud NUMA, cœur de processeur, package physique, groupe de processeurs, dé processeur et module processeur).

[out, optional] Buffer

Pointeur vers une mémoire tampon qui reçoit une séquence de structures de SYSTEM_LOGICAL_PROCESSOR_INFORMATION_EX de taille variable. Si la fonction échoue, le contenu de cette mémoire tampon n’est pas défini.

[in, out] ReturnedLength

Lors de l’entrée, spécifie la longueur de la mémoire tampon pointée par Buffer, en octets. Si la mémoire tampon est suffisamment grande pour contenir toutes les données, cette fonction réussit et ReturnedLength est défini sur le nombre d’octets retournés. Si la mémoire tampon n’est pas assez grande pour contenir toutes les données, la fonction échoue, GetLastError retourne ERROR_INSUFFICIENT_BUFFER et ReturnsLength est défini sur la longueur de mémoire tampon requise pour contenir toutes les données. Si la fonction échoue avec une erreur autre que ERROR_INSUFFICIENT_BUFFER, la valeur de ReturnedLength n’est pas définie.

Valeur retournée

Si la fonction réussit, la valeur de retour est TRUE et au moins une structure SYSTEM_LOGICAL_PROCESSOR_INFORMATION_EX est écrite dans la mémoire tampon de sortie.

Si la fonction échoue, la valeur de retour est FALSE. Pour obtenir des informations détaillées sur l’erreur, appelez GetLastError.

Remarques

Si un processus 32 bits s’exécutant sous WOW64 appelle cette fonction sur un système avec plus de 64 processeurs, certains des masques d’affinité de processeur retournés par la fonction peuvent être incorrects. En effet, le DWORD d’ordre élevé de la structure KAFFINITY 64 bits qui représente les 64 processeurs est « plié » dans une structure KAFFINITY 32 bits dans la mémoire tampon de l’appelant. Par conséquent, les masques d’affinité pour les processeurs 32 à 63 sont incorrectement représentés comme des doublons des masques pour les processeurs 0 à 31. En outre, les masques d’affinité pour les processeurs 32 à 63 sont incorrectement représentés en tant que doublons des masques pour les processeurs 0 à 31. En outre, la somme de toutes les valeurs ActiveProcessorCount et MaximumProcessorCount par groupe signalées dans PROCESSOR_GROUP_INFO structures peut exclure certains processeurs logiques actifs.

Lorsque cette fonction est appelée avec un type relationnel RelationProcessorCore, elle retourne une structure PROCESSOR_RELATIONSHIP pour chaque cœur de processeur actif dans chaque groupe de processeurs du système. C’est par conception, car un thread 32 bits non affilié peut s’exécuter sur n’importe quel processeur logique d’un groupe donné, y compris les processeurs 32 à 63. Un appelant 32 bits peut utiliser le nombre total de structures PROCESSOR_RELATIONSHIP pour déterminer le nombre réel de cœurs de processeur actifs sur le système. Toutefois, l’affinité d’un thread 32 bits ne peut pas être définie explicitement sur le processeur logique 32 à 63 d’un groupe de processeurs.

Pour compiler une application qui utilise cette fonction, définissez _WIN32_WINNT >= 0x0601. Pour plus d’informations, consultez Utilisation des en-têtes Windows.

Comportement à partir de Windows Server 2022 (21H2, build 20348)

Le comportement de cette fonction et d’autres fonctions NUMA a été modifié pour mieux prendre en charge les systèmes avec des nœuds contenant plus de 64 processeurs. Pour plus d’informations sur cette modification, notamment sur l’activation de l’ancien comportement de cette API, consultez Prise en charge de NUMA.

Les demandes de RelationNumaNode retournent NUMA_NODE_RELATIONSHIP structures qui contiennent uniquement l’affinité du nœud au sein de son groupe principal. La valeur GroupCount est 1 et la taille de structure est fixe.

Les demandes de RelationNumaNodeEx ou RelationAll retournent NUMA_NODE_RELATIONSHIP structures qui contiennent un tableau d’affinités pour le nœud sur tous les groupes. GroupCount indique le nombre d’affinités et la taille de la structure est variable.

Configuration requise

Condition requise Valeur
Client minimal pris en charge Windows 7 [applications de bureau | Applications UWP]
Serveur minimal pris en charge Windows Server 2008 R2 [applications de bureau | Applications UWP]
Plateforme cible Windows
En-tête sysinfoapi.h (inclure Windows.h)
Bibliothèque Kernel32.lib
DLL Kernel32.dll

Voir aussi

SYSTEM_LOGICAL_PROCESSOR_INFORMATION_EX