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


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

Подпрограмма KeRevertToUserAffinityThreadEx восстанавливает предыдущее сходство текущего потока.

Синтаксис

void KeRevertToUserAffinityThreadEx(
  [in] KAFFINITY Affinity
);

Параметры

[in] Affinity

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

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

None

Remarks

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

Если значение Affinity не равно нулю, KeRevertToUserAffinityThreadEx устанавливает для маски сходства потока значение Affinity . Если значение Affinity равно нулю, KeRevertToUserAffinityThreadEx восстанавливает исходную маску сходства пользователей потока. Эта исходная маска сходства пользователей была сохранена в объекте потока при предыдущем вызове KeSetSystemAffinityThreadEx. Вызов KeRevertToUserAffinityThreadEx не оказывает никакого влияния, если ему не предшествует вызов KeSetSystemAffinityThreadEx.

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

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

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

Если метод KeRevertToUserAffinityThreadEx вызывается по адресу IRQL <= APC_LEVEL и вызов выполняется успешно, новая (отмененная) маска сходства вступает в силу немедленно. При возврате вызова вызывающий поток уже выполняется на процессоре, указанном в новой маске сходства. Если метод KeRevertToUserAffinityThreadEx вызывается по адресу 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 (см. раздел "Примечания").
Правила соответствия DDI HwStorPortProhibitedDDIs(storport), PowerIrpDDis(wdm)

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

KAFFINITY

KeRevertToUserGroupAffinityThread

KeSetSystemAffinityThreadEx