Функция 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 возвращает одно из следующих значений:

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

Замечания

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

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

Если параметр PreviousAffinity не имеет значения NULL, StorPortSetSystemGroupAffinityThread сохраняет сведения о сходстве предыдущих групп, которые были в действии в начале вызова, в структуре STOR_GROUP_AFFINITY , на которую указывает Предыдущая Аффинити . Чтобы восстановить предыдущее сходство потоков, вызывающий объект может предоставить указатель на эту структуру в качестве входного параметра в подпрограмму 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
Header storport.h
IRQL <= DISPATCH_LEVEL

См. также

KeSetSystemGroupAffinityThread

STOR_GROUP_AFFINITY

StorPortCreateSystemThread

StorPortGetCurrentIrql

StorPortRevertToUserGroupAffinityThread