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

Подпрограмма KeSetSystemAffinityThreadEx задает системное сходство текущего потока.

Синтаксис

KAFFINITY KeSetSystemAffinityThreadEx(
  [in] KAFFINITY Affinity
);

Параметры

[in] Affinity

Переменная типа KAFFINITY, задающая новое системное сходство текущего потока.

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

KeSetSystemAffinityThreadEx возвращает либо предыдущее сходство системы текущего потока, либо ноль, чтобы указать, что предыдущее сходство системы не было.

Комментарии

KeSetSystemAffinityThreadEx изменяет маску сходства текущего потока. Маска сходства определяет набор процессоров, на которых может выполняться поток. В случае успеха подпрограмма планирует выполнение потока на процессоре в этом наборе.

Вызывающие методы KeSetSystemAffinityThreadEx должны сохранить возвращаемое значение, а затем передать это значение в подпрограмму KeRevertToUserAffinityThreadEx для восстановления предыдущей маски сходства.

В многопроцессорной системе подпрограмме драйвера в режиме ядра, которая выполняется в контексте потока пользовательского режима, может потребоваться вызвать KeSetSystemAffinityThreadEx , чтобы временно изменить маску сходства потока. Перед завершением процедуры она должна вызвать KeRevertToUserAffinityThreadEx , чтобы восстановить маску сходства потока до его исходного значения.

Термин сходство пользователей относится к исходному сходству потока пользовательского режима. Сходство, заданное драйвером режима ядра, называется сходством системы. Если вызов KeSetSystemAffinityThreadEx заменяет сходство пользователей потока с сопоставлением системы, вызов возвращает ноль. Позже драйвер восстанавливает сходство пользователей, вызывая KeRevertToUserAffinityThreadEx и передавая это возвращаемое значение (ноль) в качестве значения Affinity .

Кроме того, подпрограмма драйвера в режиме ядра, требующая определенной маски сходства, может вызвать другую подпрограмму режима ядра, требующую другую маску сходства. Каждая подпрограмма может вызвать KeSetSystemAffinityThreadEx , чтобы задать новую маску сходства, а затем вызвать KeRevertToUserAffinityThreadEx , чтобы восстановить предыдущую маску сходства перед возвратом.

Подпрограмма KeSetSystemAffinityThreadEx изменяет маску сходства текущего потока на значение Affinity только в том случае, если выполняются оба следующих параметра:

  • Допустимое значение Affinity (то есть задаются только биты маски, соответствующие логическим процессорам).
  • Активен по крайней мере один из процессоров, указанных в значении Affinity .
Если ни одно из этих условий не выполняется, вызов KeSetSystemAffinityThreadEx не оказывает никакого влияния.

Windows 7 и более поздние версии Windows поддерживают группы процессоров. Драйверы, предназначенные для обработки сведений о группах процессоров, должны использовать подпрограмму KeSetSystemGroupAffinityThread , которая задает группу процессоров, а не KeSetSystemAffinityThreadEx, что не делает этого. Однако реализация KeSetSystemAffinityThreadEx в Windows 7 и более поздних версиях Windows обеспечивает совместимость драйверов, написанных для более ранних версий Windows, которые не поддерживают группы процессоров. В этой реализации KeSetSystemAffinityThreadEx назначает поток группе 0 и использует маску сходства для указания набора логических процессоров в этой группе, на которых может выполняться поток. Подпрограмма возвращает предыдущую маску сходства относительно группы, но не предыдущую группу.

Если keSetSystemAffinityThreadEx вызывается по адресу IRQL <= APC_LEVEL и вызов выполнен успешно, новая маска сходства вступает в силу немедленно. Когда вызов возвращается, вызывающий поток уже выполняется на процессоре, указанном в новой маске сходства. Если метод KeSetSystemAffinityThreadEx вызывается по адресу IRQL = DISPATCH_LEVEL и вызов выполнен успешно, ожидающее изменение процессора откладывается до тех пор, пока вызывающий объект не понизит значение IRQL ниже DISPATCH_LEVEL.

Требования

Требование Значение
Минимальная версия клиента Доступно в Windows Vista и более поздних версиях Windows.
Целевая платформа Универсальное
Верхняя часть wdm.h (включая Wdm.h, Ntddk.h, Ntifs.h)
Библиотека NtosKrnl.lib
DLL NtosKrnl.exe
IRQL <= DISPATCH_LEVEL (см. раздел "Примечания").

См. также раздел

KAFFINITY

KeRevertToUserAffinityThreadEx

KeSetSystemAffinityThread

KeSetSystemGroupAffinityThread