Функция 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 , только если верно следующее:
- Допустимый номер группы.
- Допустимая маска сходства (то есть задаются только биты маски, соответствующие логическим процессорам в группе).
- Активен по крайней мере один из процессоров, указанных в маске сходства.
Связанная подпрограмма 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 (см. раздел "Примечания"). |