Condividi tramite


Funzione KeQueryLogicalProcessorRelationship (wdm.h)

La routine KeQueryLogicalProcessorRelationship ottiene informazioni sulle relazioni tra uno o più processori con gli altri processori in un sistema multiprocessore.

Sintassi

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

Parametri

[in, optional] ProcessorNumber

Puntatore a una struttura PROCESSOR_NUMBER che identifica il processore logico per cui il chiamante richiede informazioni sulla relazione. Per richiedere informazioni su tutti i processori logici nel sistema, impostare questo parametro su NULL.

[in] RelationshipType

Specifica il tipo di informazioni sulle relazioni richieste dal chiamante. Impostare questo parametro su uno dei valori di enumerazione LOGICAL_PROCESSOR_RELATIONSHIP seguenti:

  • RelationProcessorCore

  • RelationNumaNode

    A partire da Windows Server 2022, a ogni nodo NUMA viene assegnato un gruppo primario. Le richieste di RelationNumaNode restituiranno strutture RelationNumaNode che contengono solo una singola affinità di gruppo, quella del gruppo primario del nodo se non è specificato un numero di processore, quella del gruppo contenente il processore specificato se è specificato un numero di processore (GroupCount == 1, la dimensione della struttura è invariata). Per altre informazioni, vedere KeQueryNodeActiveAffinity e NUMA Support.

  • RelationCache

  • RelationProcessorPackage

  • RelationGroup

  • RelationProcessorDie

  • RelationNumaNodeEx

  • RelationAll

    A partire da Windows Server 2022, le richieste di RelationNumaNodeEx o RelationAll restituiranno strutture RelationNumaNode che contengono una matrice di affinità per il nodo su tutti i gruppi (GroupCount segnala il numero di affinità, la dimensione della struttura è variabile). Per altre informazioni, vedere NUMA Support.

[out, optional] Information

Puntatore a un buffer allocato dal chiamante in cui la routine scrive una matrice di una o più strutture SYSTEM_LOGICAL_PROCESSOR_INFORMATION_EX che contengono le informazioni richieste dal chiamante. Se la funzione ha esito negativo, il contenuto del buffer non è definito. Impostare Informazioni = NULL per ottenere la lunghezza del buffer necessaria prima di allocare il buffer. Per altre informazioni, vedere la sezione Osservazioni seguente.

[in, out] Length

Puntatore a una posizione contenente le dimensioni, in byte, del buffer a cui punta Informazioni. Nella voce *Lunghezza contiene le dimensioni del buffer allocato dal chiamante a cui punta Informazioni. Durante la chiamata, la routine sovrascrive il valore a cui punta Length con le dimensioni del buffer necessarie per contenere le informazioni sulle relazioni richieste.

Valore restituito

KeQueryLogicalProcessorRelationship restituisce STATUS_SUCCESS se la chiamata ha esito positivo. I possibili valori restituiti dall'errore includono quanto segue:

Codice restituito Descrizione
STATUS_INVALID_PARAMETER Il parametro ProcessorNumber punta a una struttura PROCESSOR_NUMBER contenente informazioni non valide.
STATUS_INFO_LENGTH_MISMATCH Il buffer allocato dal chiamante a cui punta il parametro Information non è sufficiente per contenere le informazioni sulle relazioni richieste.

Osservazioni

Per determinare le dimensioni del buffer da allocare, chiamare inizialmente KeQueryLogicalProcessorRelationship con informazioni informazioni = NULL e Lunghezza = 0. In risposta, la routine scrive le dimensioni del buffer necessarie in**Lunghezza e restituisce STATUS_INFO_LENGTH_MISMATCH. Allocare quindi un buffer delle dimensioni necessarie e chiamare KeQueryLogicalProcessorRelationship una seconda volta. In questa seconda chiamata impostare Information sull'indirizzo del buffer e *Length sulla dimensione del buffer. Se la seconda chiamata ha esito positivo, la routine scrive le informazioni sulla relazione richieste nel buffer e restituisce STATUS_SUCCESS.

Esempi

Nell'esempio di codice seguente vengono recuperate informazioni sulla relazione del processore per tutti i processori logici in un sistema multiprocessore:

//
// 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);
}

La macro NT_ASSERT viene definita nel file di intestazione Wdm.h. La macro NT_SUCCESS è definita nel file di intestazione Ntdef.h.

Fabbisogno

Requisito Valore
client minimo supportato Disponibile in Windows 7 e versioni successive di Windows.
piattaforma di destinazione Universale
intestazione wdm.h (include Ntddk.h, Wdm.h, Ntddk.h)
libreria NtosKrnl.lib
dll NtosKrnl.exe
IRQL <= DISPATCH_LEVEL

Vedere anche

LOGICAL_PROCESSOR_RELATIONSHIP

PROCESSOR_NUMBER

SYSTEM_LOGICAL_PROCESSOR_INFORMATION_EX