Функция 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 |