Freigeben über


KeQueryLogicalProcessorRelationship-Funktion (wdm.h)

Die KeQueryLogicalProcessorRelationship Routine ruft Informationen über die Beziehungen eines oder mehrerer Prozessoren zu den anderen Prozessoren in einem Multiprozessorsystem ab.

Syntax

NTSTATUS KeQueryLogicalProcessorRelationship(
  [in, optional]  PPROCESSOR_NUMBER                        ProcessorNumber,
  [in]            LOGICAL_PROCESSOR_RELATIONSHIP           RelationshipType,
  [out, optional] PSYSTEM_LOGICAL_PROCESSOR_INFORMATION_EX Information,
  [in, out]       PULONG                                   Length
);

Parameter

[in, optional] ProcessorNumber

Ein Zeiger auf eine PROCESSOR_NUMBER-Struktur, die den logischen Prozessor identifiziert, für den der Aufrufer Beziehungsinformationen anfordert. Um Informationen zu allen logischen Prozessoren im System anzufordern, legen Sie diesen Parameter auf NULL-fest.

[in] RelationshipType

Gibt den Typ der Beziehungsinformationen an, die vom Aufrufer angefordert werden. Legen Sie diesen Parameter auf einen der folgenden LOGICAL_PROCESSOR_RELATIONSHIP Enumerationswerte fest:

  • RelationProcessorCore-

  • RelationNumaNode

    Ab Windows Server 2022 wird jedem NUMA-Knoten eine primäre Gruppe zugewiesen. Anforderungen für RelationNumaNode- geben RelationNumaNode Strukturen zurück, die nur eine einzelne Gruppenaffinität enthalten, die der primären Gruppe des Knotens, wenn keine Prozessornummer angegeben ist, die der Gruppe, die den angegebenen Prozessor enthält, wenn eine Prozessornummer angegeben wird (GroupCount == 1, Die Strukturgröße ist unverändert). Weitere Informationen finden Sie unter KeQueryNodeActiveAffinity und NUMA Support.

  • RelationCache-

  • RelationProcessorPackage-

  • RelationGroup-

  • RelationProcessorDie

  • RelationNumaNodeEx

  • RelationAll-

    Ab Windows Server 2022 geben Anforderungen für RelationNumaNodeEx oder RelationAll-RelationNumaNode Strukturen zurück, die ein Array von Affinitäten für den Knoten über alle Gruppen enthalten (GroupCount meldet Anzahl der Affinitäten, Die Strukturgröße ist variabel). Weitere Informationen finden Sie unter NUMA Support.

[out, optional] Information

Ein Zeiger auf einen vom Aufrufer zugewiesenen Puffer, in den die Routine ein Array einer oder mehrerer SYSTEM_LOGICAL_PROCESSOR_INFORMATION_EX Strukturen schreibt, die die vom Aufrufer angeforderten Informationen enthalten. Wenn die Funktion fehlschlägt, sind die Inhalte dieses Puffers nicht definiert. Legen Sie Information = NULL- fest, um die erforderliche Pufferlänge abzurufen, bevor Sie den Puffer zuordnen. Weitere Informationen finden Sie im folgenden Abschnitt "Hinweise".

[in, out] Length

Ein Zeiger auf eine Position, die die Größe des Puffers in Byte enthält, auf den Informationverweist. Beim Eintrag enthält *Length die Größe des vom Aufrufer zugewiesenen Puffers, auf den Informationverweist. Während des Aufrufs überschreibt die Routine den Wert, auf den durch Length verwiesen wird, mit der Puffergröße, die erforderlich ist, um die angeforderten Beziehungsinformationen enthalten zu können.

Rückgabewert

KeQueryLogicalProcessorRelationship gibt STATUS_SUCCESS zurück, wenn der Aufruf erfolgreich ist. Mögliche Fehlerrückgabewerte sind:

Rückgabecode Beschreibung
STATUS_INVALID_PARAMETER Der parameter ProcessorNumber verweist auf eine PROCESSOR_NUMBER Struktur, die ungültige Informationen enthält.
STATUS_INFO_LENGTH_MISMATCH Der vom Aufrufer zugewiesene Puffer, auf den der parameter Information verweist, ist nicht groß genug, um die angeforderten Beziehungsinformationen zu enthalten.

Bemerkungen

Um die zuzuordnende Puffergröße zu bestimmen, rufen Sie zunächst KeQueryLogicalProcessorRelationship mit Information = NULL- und Length = 0 auf. Als Reaktion schreibt die Routine die erforderliche Puffergröße auf**Length und gibt STATUS_INFO_LENGTH_MISMATCH zurück. Weisen Sie als Nächstes einen Puffer der erforderlichen Größe zu, und rufen Sie KeQueryLogicalProcessorRelationship ein zweites Mal auf. Legen Sie in diesem zweiten Aufruf Information auf die Pufferadresse und *Length auf die Puffergröße fest. Wenn der zweite Aufruf erfolgreich verläuft, schreibt die Routine die angeforderten Beziehungsinformationen in den Puffer und gibt STATUS_SUCCESS zurück.

Beispiele

Das folgende Codebeispiel ruft Prozessorbeziehungsinformationen für alle logischen Prozessoren in einem Multiprozessorsystem ab:

//
// Get required buffer size.
//
NTSTATUS Status;
PSYSTEM_LOGICAL_PROCESSOR_INFORMATION_EX Info = NULL;
ULONG BufferSize = 0;
Status = KeQueryLogicalProcessorRelationship(NULL, RelationAll, NULL, &BufferSize);

NT_ASSERT(Status == STATUS_INFO_LENGTH_MISMATCH && BufferSize > 0);

//
// Allocate buffer (assume IRQL <= APC_LEVEL).
//
Info = ExAllocatePoolWithTag(PagedPool, BufferSize, ' gaT');
if (Info == NULL)
{
    Status = STATUS_INSUFFICIENT_RESOURCES;
}

//
// Get processor relationship information.
//
if (NT_SUCCESS(Status))
{
    Status = KeQueryLogicalProcessorRelationship(NULL, RelationAll, Info, &BufferSize);
}

Das NT_ASSERT Makro wird in der Wdm.h-Headerdatei definiert. Das NT_SUCCESS-Makro wird in der Ntdef.h-Headerdatei definiert.

Anforderungen

Anforderung Wert
mindestens unterstützte Client- Verfügbar in Windows 7 und höheren Versionen von Windows.
Zielplattform- Universal
Header- wdm.h (include Ntddk.h, Wdm.h, Ntddk.h)
Library NtosKrnl.lib
DLL- NtosKrnl.exe
IRQL- <= DISPATCH_LEVEL

Siehe auch

LOGICAL_PROCESSOR_RELATIONSHIP

PROCESSOR_NUMBER

SYSTEM_LOGICAL_PROCESSOR_INFORMATION_EX