Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Функция IoDriverProxyCreateHotSwappableWorkerThread создает поток рабочей роли с поддержкой горячего переключения, который обеспечивает "спин ожидания" рабочий поток, совместимый с драйвером Hot-Swap. Эта функция особенно полезна для обработки бесконечных циклов и длительных операций в драйверах, которые должны оставаться горячими переключениями.
Синтаксис
NTSTATUS IoDriverProxyCreateHotSwappableWorkerThread(
PDRIVER_PROXY_EXTENSION DriverProxyExtension,
PHANDLE ThreadHandle,
ULONG DesiredAccess,
POBJECT_ATTRIBUTES ObjectAttributes,
HANDLE ProcessHandle,
PCLIENT_ID ClientId,
PDRIVER_PROXY_HOTSWAP_WORKER_ROUTINE_START_CONTEXT WorkerStartContext
);
Параметры
DriverProxyExtension
[in] Указатель на расширение DriverProxy, в которое зарегистрированы конечные точки. Подпрограмма рабочей роли, указанная в WorkerStartContext , должна быть зарегистрированной оболочкой конечной точки.
ThreadHandle
[out] Указатель на переменную, которая получает дескриптор созданному потоку.
DesiredAccess
[in] Требуемые права доступа для дескриптора потока.
ObjectAttributes
[in, необязательный] Указатель на структуру OBJECT_ATTRIBUTES* , указывающую атрибуты для объекта потока. Этот параметр может иметь значение NULL.
ProcessHandle
[in, необязательный] Дескриптор процесса создания потока. Если значение NULL, поток создается в текущем процессе.
ClientId
[out, необязательный] Указатель на CLIENT_ID структуру созданного потока. Этот параметр может иметь значение NULL.
WorkerStartContext
[in] Указатель на структуру DRIVER_PROXY_HOTSWAP_WORKER_ROUTINE_START_CONTEXT , содержащую конфигурацию рабочего потока, включая подпрограмму рабочей роли и объекты событий для ожидания.
Возвращаемое значение
IoDriverProxyCreateHotSwappableWorkerThread возвращает одно из следующих значений NTSTATUS:
| Код возврата | Description |
|---|---|
| STATUS_SUCCESS | Рабочий поток с поддержкой горячего переключения успешно создан. |
| STATUS_NOT_SUPPORTED | Функции DriverProxy недоступны в текущей системе. |
| СТАТУС_НЕДЕЙСТВИТЕЛЬНЫЙ_ПАРАМЕТР | Один или несколько параметров являются недопустимыми, например подпрограммой рабочей роли NULL или недопустимым числом событий. |
| STATUS_INSUFFICIENT_RESOURCES | Недостаточно памяти было доступно для создания контекста потока или вспомогательных структур. |
Замечания
Эта функция создает специализированный рабочий поток, который интегрируется с системой DriverProxy, что позволяет рабочей подпрограмме быть горячей переключение во время выполнения потока. Это особенно полезно для драйверов, которые должны выполнять непрерывные фоновые операции, которые должны сохраняться в обновлениях драйверов.
Подпрограмма рабочей роли, указанная в WorkerStartContext , должна быть зарегистрированной оболочкой конечной точки, полученной через процесс регистрации DriverProxy. Это требование позволяет драйверам обновлять логику рабочей роли без остановки длительных фоновых операций.
Рабочий поток работает в цикле, ожидая указанных событий и вызывая подпрограмму рабочей роли при сигнале событий. Рабочая подпрограмма может указать, должен ли поток продолжать работу или завершить работу.
Функция создает копию структуры WorkerStartContext , поэтому вызывающий объект может безопасно отменить исходную структуру после возврата функции. Функция должна вызываться в PASSIVE_LEVEL, так как она выполняет выделение памяти и создание потока.
Требования
| Требование | Ценность |
|---|---|
| целевая платформа | Всеобщий |
| Header | wdm.h |
| Library | NtosKrnl.lib |
| IRQL | PASSIVE_LEVEL |
См. также
DRIVER_PROXY_HOTSWAP_WORKER_ROUTINE_START_CONTEXT