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

Подпрограмма KeRevertToUserGroupAffinityThread восстанавливает сходство группы вызывающего потока к исходному значению на момент создания потока.

Синтаксис

void KeRevertToUserGroupAffinityThread(
  [in] PGROUP_AFFINITY PreviousAffinity
);

Параметры

[in] PreviousAffinity

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

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

None

Remarks

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

Параметр PreviousAffinity указывает на GROUP_AFFINITY структуру, которая задает новый номер группы (член группы ) и маску сходства (элемент Mask ) для потока. Если параметр PreviousAffinity-Mask> не является нулевым, KeRevertToUserGroupAffinityThread задает номер группы и маску сходства вызывающего потока со значениями в структуре. Если параметр PreviousAffinity-Mask> равен нулю, подпрограмма восстанавливает число группы и маску сходства до исходных значений во время инициализации потока.

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

Поток может изменить группу, которой он назначен, вызвав подпрограмму KeSetSystemGroupAffinityThread . После одного или нескольких вызовов KeSetSystemGroupAffinityThread поток может восстановить исходное сходство группы, которое было у него при создании потока, вызвав KeRevertToUserGroupAffinityThread.

После создания потока вызов KeRevertToUserGroupAffinityThread не оказывает никакого влияния (т. е. номер группы и маска сходства потока остаются неизменными), если поток не вызывает keSetSystemGroupAffinityThread. После вызова KeRevertToUserGroupAffinityThread второй вызов KeRevertToUserGroupAffinityThread не оказывает никакого влияния, если поток не вызывает keSetSystemGroupAffinityThread.

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

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

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

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

Требования

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

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

GROUP_AFFINITY

KeRevertToUserAffinityThreadEx

KeSetSystemGroupAffinityThread