Поделиться через


Функция KeQueryLogicalProcessorRelationship (wdm.h)

Программа KeQueryLogicalProcessorRelationship получает сведения о связи одного или нескольких процессоров с другими процессорами в многопроцессорной системе.

Синтаксис

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

Параметры

[in, optional] ProcessorNumber

Указатель на структуру PROCESSOR_NUMBER, которая определяет логический обработчик, для которого вызывающий запрашивает сведения о связи. Чтобы запросить сведения обо всех логических процессорах в системе, задайте для этого параметра значение NULL.

[in] RelationshipType

Указывает тип сведений о связи, запрашиваемых вызывающим оператором. Задайте для этого параметра одно из следующих значений перечисления LOGICAL_PROCESSOR_RELATIONSHIP:

  • RelationProcessorCore

  • RelationNumaNode

    Начиная с Windows Server 2022 каждый узел NUMA назначается основной группе. Запросы на RelationNumaNode возвращают структуры RelationNumaN ode, содержащие только одно сходство групп, что основной группы узла, если номер процессора не указан, то группа, содержащая заданный процессор, если задан номер процессора (GroupCount == 1, размер структуры не изменяется). Дополнительные сведения см. в KeQueryNodeActiveAffinity и поддержке NUMA.

  • RelationCache

  • RelationProcessorPackage

  • RelationGroup

  • RelationProcessorDie

  • RelationNumaNodeEx

  • RelationAll

    Начиная с Windows Server 2022, запросы на RelationNumaNodeEx или RelationAll возвращают структуры RelationNumaNode, содержащие массив сходств для узла по всем группам (число отчетов GroupCount, размер структуры является переменной). Дополнительные сведения см. в поддержки NUMA.

[out, optional] Information

Указатель на выделенный вызывающим буфером, в который подпрограмма записывает массив одной или нескольких SYSTEM_LOGICAL_PROCESSOR_INFORMATION_EX структур, содержащих сведения, запрошенные вызывающим объектом. Если функция завершается ошибкой, содержимое этого буфера не определено. Задайте information = NULL, чтобы получить необходимую длину буфера перед выделением буфера. Дополнительные сведения см. в следующем разделе "Примечания".

[in, out] Length

Указатель на расположение, содержащее размер буфера в байтах, на который указывает Information. При записи *Длина содержит размер выделенного вызывающего буфера, на который указывает Information. Во время вызова подпрограмма перезаписывает значение, на которое указывает длина с размером буфера, который требуется для хранения запрошенных сведений о связи.

Возвращаемое значение

KeQueryLogicalProcessorRelationship возвращает STATUS_SUCCESS, если вызов выполнен успешно. Возможные значения возвращаемых ошибок включают следующие значения:

Возвращаемый код Описание
STATUS_INVALID_PARAMETER Параметр ProcessorNumber указывает на структуру PROCESSOR_NUMBER, содержащую недопустимые сведения.
STATUS_INFO_LENGTH_MISMATCH Выделенный вызывающим буфером, на который указывает параметр Information, недостаточно велик, чтобы содержать запрошенные сведения о связи.

Замечания

Чтобы определить размер выделенного буфера, сначала вызовите KeQueryLogicalProcessorRelationship с Information = NULL и Length = 0. В ответ подпрограмма записывает требуемый размер буфера в **Length и возвращает STATUS_INFO_LENGTH_MISMATCH. Затем выделите буфер требуемого размера и вызовите KeQueryLogicalProcessorRelationship второй раз. В этом втором вызове задайте information адрес буфера и *длина размер буфера. Если второй вызов выполнен успешно, подпрограмма записывает запрошенные сведения о связи в буфер и возвращает STATUS_SUCCESS.

Примеры

Следующий пример кода получает сведения о связи процессора для всех логических процессоров в многопроцессорной системе:

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

Макрос NT_ASSERT определен в файле заголовка Wdm.h. Макрос NT_SUCCESS определен в файле заголовка Ntdef.h.

Требования

Требование Ценность
минимальные поддерживаемые клиентские Доступно в Windows 7 и более поздних версиях Windows.
целевая платформа Всеобщий
заголовка wdm.h (include Ntddk.h, Wdm.h, Ntddk.h)
библиотеки NtosKrnl.lib
DLL NtosKrnl.exe
IRQL <= DISPATCH_LEVEL

См. также

LOGICAL_PROCESSOR_RELATIONSHIP

PROCESSOR_NUMBER

SYSTEM_LOGICAL_PROCESSOR_INFORMATION_EX