IoDriverProxyCreateHotSwappableWorkerThread 函数 (wdm.h)

IoDriverProxyCreateHotSwappableWorkerThread 函数创建一个热交换工作线程,该线程提供与驱动程序热交换兼容的“旋转等待”工作线程。 此函数特别适用于处理需要保持热交换的驱动程序中的无限循环和长时间运行的作。

Syntax

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, optional]指向所创建线程 的CLIENT_ID 结构的指针。 此参数可以为 NULL。

WorkerStartContext

[in]指向 DRIVER_PROXY_HOTSWAP_WORKER_ROUTINE_START_CONTEXT 结构的指针,该结构包含工作线程的配置,包括要等待的工作线程和事件对象。

返回值

IoDriverProxyCreateHotSwappableWorkerThread 返回以下 NTSTATUS 值之一:

返回代码 Description
STATUS_SUCCESS 已成功创建可热交换的工作线程。
STATUS_NOT_SUPPORTED DriverProxy 功能在当前系统上不可用。
STATUS_INVALID_PARAMETER 一个或多个参数无效,例如 NULL 工作线程例程或无效的事件计数。
STATUS_INSUFFICIENT_RESOURCES 内存不足,无法创建线程上下文或支持结构。

注解

此函数创建一个专用工作线程,该线程与 DriverProxy 系统集成,允许在线程继续运行时热交换辅助角色例程。 这对于需要执行应跨驱动程序更新持续持续后台作的驱动程序尤其有用。

WorkerStartContext 中指定的辅助角色例程必须是通过 DriverProxy 注册过程获取的已注册终结点包装器。 此要求允许热交换功能,允许驱动程序在不停止长时间运行的后台作的情况下更新其辅助角色逻辑。

工作线程在循环中运行,等待指定事件,并在发出事件信号时调用辅助角色例程。 工作线程例程可以指示线程是否应继续运行或终止。

该函数创建 WorkerStartContext 结构的副本,因此调用方可以在函数返回后安全地放弃原始结构。 在执行内存分配和线程创建时,必须在PASSIVE_LEVEL调用该函数。

要求

Requirement 价值
目标平台 普遍
Header wdm.h
Library NtosKrnl.lib
IRQL PASSIVE_LEVEL

另请参阅

DRIVER_PROXY_HOTSWAP_WORKER_ROUTINE_START_CONTEXT

DRIVER_PROXY_HOTSWAP_WORKER_ROUTINE

IoRegisterDriverProxyEndpointsPsCreateSystemThread