Функция StorPortSetSystemGroupAffinityThread (storport.h)

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

Синтаксис

ULONG StorPortSetSystemGroupAffinityThread(
  [in]           PVOID                HwDeviceExtension,
  [in/optional]  PVOID                ThreadContext,
  [in]           PSTOR_GROUP_AFFINITY Affinity,
  [out/optional] PSTOR_GROUP_AFFINITY PreviousAffinity
);

Параметры

[in] HwDeviceExtension

Указатель на расширение аппаратного устройства мини-порта.

[in/optional] ThreadContext

Указатель на контекст потока, полученный при предыдущем вызове StorPortCreateSystemThread.

[in] Affinity

Указатель на структуру STOR_GROUP_AFFINITY , выделенную вызывающим объектом, которая задает новый номер группы и маску сходства относительно группы для вызывающего потока.

[out/optional] PreviousAffinity

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

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

StorPortSetSystemGroupAffinityThread возвращает одно из следующих значений:

Код возврата Описание
STOR_STATUS_SUCCESS Указанное сходство группы было успешно задано.
STOR_STATUS_INVALID_PARAMETER Один или несколько указанных параметров являются недопустимыми.
STOR_STATUS_UNSUCCESSFUL Возвращается по другим внутренним системным причинам.

Комментарии

Мини-порт может вызвать StorPortSetSystemGroupAffinityThread , чтобы изменить номер группы и маску сходства на уровне группы вызывающего потока.

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

Если параметр PreviousAffinity не равен NULL, StorPortSetSystemGroupAffinityThread сохраняет сведения о предыдущем сходстве групп, которые действовали в начале вызова, в структуре STOR_GROUP_AFFINITY , на которую указывает PreviousAffinity . Чтобы восстановить предыдущее сходство потоков, вызывающий объект может предоставить указатель на эту структуру в качестве входного параметра для подпрограммы StorPortRevertToUserGroupAffinityThread .

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

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

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

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

Если какое-либо из этих условий не выполняется, номер группы и маска сходства потока остаются неизменными. Если параметр PreviousAffinity не имеет значения NULL, подпрограмма записывает ноль как в номер группы, так и в маску сходства в PreviousAffinity.

Перед тем как новая маска сходства в Affinity вступит в силу, StorPortSetSystemGroupAffinityThread удаляет (устанавливает в нулевое значение) все биты маски сходства, соответствующие процессорам, которые в настоящее время не активны. В последующем вызове StorPortSetSystemGroupAffinityThread значение, которое подпрограмма записывает в PreviousAffinity , может содержать маску сходства, которая была изменена таким образом.

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

Требования

Требование Значение
Минимальная версия сервера Windows Server 2022
Верхняя часть storport.h
IRQL <= DISPATCH_LEVEL

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

**KeSetSystemGroupAffinityThread **

STOR_GROUP_AFFINITY

StorPortCreateSystemThread

StorPortGetCurrentIrql

StorPortRevertToUserGroupAffinityThread