Функция KeRevertToUserGroupAffinityThread (wdm.h)
Подпрограмма KeRevertToUserGroupAffinityThread восстанавливает сходство групп вызывающего потока с исходным значением во время создания потока.
Синтаксис
void KeRevertToUserGroupAffinityThread(
[in] PGROUP_AFFINITY PreviousAffinity
);
Параметры
[in] PreviousAffinity
Указатель на сходство группы для восстановления. Этот параметр указывает на структуру GROUP_AFFINITY, содержащую номер группы и маску сходства. Маска сходства указывает набор логических процессоров, на которые может работать поток пользователя.
Возвращаемое значение
Никакой
Замечания
Эта подпрограмма изменяет номер группы и маску сходства относительно группы вызывающего потока. Номер группы и маска сходства определяют набор процессоров, на которых может выполняться поток. В случае успешного выполнения подпрограмма планирует выполнение потока на процессоре в этом наборе.
Параметр PreviousAffinity указывает на структуру GROUP_AFFINITY, указывающую новый номер группы (членгруппы) и маску сходства (элемент Маски) для потока. Если PreviousAffinity->Mask ненулево, KeRevertToUserGroupAffinityThread задает номер группы и маску сходства вызывающего потока значениям в структуре. Если PreviousAffinity->Маска равно нулю, подпрограмма восстанавливает номер группы и маску сходства с исходными значениями во время инициализации потока.
Процесс может иметь сходство для нескольких групп за раз. Однако поток может быть назначен только одной группе в любое время, и эта группа всегда находится в сопоставлении процесса потока.
Поток может изменить группу, которой она назначается, вызвав подпрограмму KeSetSystemGroupAffinityThread. После одного или нескольких вызовов KeSetSystemGroupAffinityThreadThreadпоток может восстановить сходство исходной группы, которое было создано при создании потока путем вызова KeRevertToUserGroupAffinityThreadThread.
После создания потока вызов KeRevertToUserGroupAffinityThread не действует (т. е. число группы и маска сходства потока остаются неизменными), если поток не вызывает KeSetSystemGroupAffinityThread. После вызова KeRevertToUserGroupAffinityThreadвторой вызов KeRevertToUserGroupAffinityThread не действует, если поток не вызывает KeSetSystemGroupAffinityThread.
Подпрограмма изменяет номер группы и маску сходства на значения, указанные в *previousAffinity только в том случае, если задано значение true:
- Допустимый номер группы.
- Маска сходства допустима (т. е. заданы только биты маски, соответствующие логическим процессорам в группе).
- По крайней мере один из процессоров, указанных в маске сходства, активен.
Связанная подпрограмма, 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 (include Ntddk.h, Wdm.h, Ntddk.h) |
библиотеки | NtosKrnl.lib |
DLL | NtosKrnl.exe |
IRQL | <= DISPATCH_LEVEL (см. раздел "Примечания"). |