Поделиться через


Функция IoDriverProxyCreateHotSwappableWorkerThread (wdm.h)

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

DRIVER_PROXY_HOTSWAP_WORKER_ROUTINE

IoRegisterDriverProxyEndpointsPsCreateSystemThread