Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
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 |