Compartir a través de


Función KeQueryLogicalProcessorRelationship (wdm.h)

La rutina KeQueryLogicalProcessorRelationship obtiene información sobre las relaciones de uno o varios procesadores con los demás procesadores de un sistema multiprocesador.

Sintaxis

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

Parámetros

[in, optional] ProcessorNumber

Puntero a una estructura de PROCESSOR_NUMBER que identifica el procesador lógico para el que el autor de la llamada solicita información de relación. Para solicitar información sobre todos los procesadores lógicos del sistema, establezca este parámetro en NULL.

[in] RelationshipType

Especifica el tipo de información de relación solicitada por el autor de la llamada. Establezca este parámetro en uno de los siguientes valores de enumeración de LOGICAL_PROCESSOR_RELATIONSHIP:

  • RelationProcessorCore

  • RelationNumaNode

    A partir de Windows Server 2022, a cada nodo NUMA se le asigna un grupo principal. Las solicitudes de RelationNumaNode devolverán RelationNumaNode estructuras que contienen solo una afinidad de grupo única, la del grupo principal del nodo si no se especifica un número de procesador, el del grupo que contiene el procesador especificado si se especifica un número de procesador (GroupCount == 1, el tamaño de la estructura no cambia). Para obtener más información, consulta keQueryNodeActiveAffinity y compatibilidad con NUMA.

  • RelationCache

  • RelationProcessorPackage

  • RelationGroup

  • RelationProcessorDie

  • RelationNumaNodeEx

  • RelationAll

    A partir de Windows Server 2022, las solicitudes de RelationNumaNodeEx o RelationAll devolverán RelationNumaNode estructuras que contienen una matriz de afinidades para el nodo en todos los grupos (GroupCount notifica el número de afinidades, el tamaño de la estructura es variable). Para obtener más información, consulta compatibilidad con NUMA.

[out, optional] Information

Puntero a un búfer asignado por el autor de la llamada en el que la rutina escribe una matriz de una o varias estructuras SYSTEM_LOGICAL_PROCESSOR_INFORMATION_EX que contienen la información solicitada por el autor de la llamada. Si se produce un error en la función, el contenido de este búfer no está definido. Establezca information = NULL para obtener la longitud necesaria del búfer antes de asignar el búfer. Para obtener más información, vea la siguiente sección Comentarios.

[in, out] Length

Puntero a una ubicación que contiene el tamaño, en bytes, del búfer al que apunta Información. En la entrada, *Longitud contiene el tamaño del búfer asignado por el autor de la llamada al que apunta Information. Durante la llamada, la rutina sobrescribe el valor al que apunta Longitud con el tamaño del búfer necesario para contener la información de relación solicitada.

Valor devuelto

KeQueryLogicalProcessorRelationship devuelve STATUS_SUCCESS si la llamada se realiza correctamente. Entre los valores devueltos de error posibles se incluyen los siguientes:

Código devuelto Descripción
STATUS_INVALID_PARAMETER El parámetro ProcessorNumber apunta a una estructura de PROCESSOR_NUMBER que contiene información no válida.
STATUS_INFO_LENGTH_MISMATCH El búfer asignado por el autor de la llamada al que apunta el parámetro Information no es lo suficientemente grande como para contener la información de relación solicitada.

Observaciones

Para determinar el tamaño del búfer que se va a asignar, llame inicialmente a KeQueryLogicalProcessorRelationship con Information = NULL y Length = 0. En respuesta, la rutina escribe el tamaño de búfer necesario en**Length y devuelve STATUS_INFO_LENGTH_MISMATCH. A continuación, asigne un búfer del tamaño necesario y llame a KeQueryLogicalProcessorRelationship una segunda vez. En esta segunda llamada, establezca información en la dirección del búfer y *longitud en el tamaño del búfer. Si la segunda llamada se realiza correctamente, la rutina escribe la información de relación solicitada en el búfer y devuelve STATUS_SUCCESS.

Ejemplos

En el ejemplo de código siguiente se obtiene información de relación del procesador para todos los procesadores lógicos de un sistema multiprocesador:

//
// 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 se define en el archivo de encabezado Wdm.h. La macro NT_SUCCESS se define en el archivo de encabezado Ntdef.h.

Requisitos

Requisito Valor
cliente mínimo admitido Disponible en Windows 7 y versiones posteriores de Windows.
de la plataforma de destino de Universal
encabezado de wdm.h (include Ntddk.h, Wdm.h, Ntddk.h)
biblioteca de NtosKrnl.lib
DLL de NtosKrnl.exe
irQL <= DISPATCH_LEVEL

Consulte también

LOGICAL_PROCESSOR_RELATIONSHIP

PROCESSOR_NUMBER

SYSTEM_LOGICAL_PROCESSOR_INFORMATION_EX