Compartir a través de


Función IoDriverProxyCreateHotSwappableWorkerThread (wdm.h)

La función IoDriverProxyCreateHotSwappableWorkerThread crea un subproceso de trabajo intercambiable en caliente que proporciona un subproceso de trabajo "spin waiting" compatible con driver Hot-Swap. Esta función es especialmente útil para controlar bucles infinitos y operaciones de larga duración en los controladores que necesitan permanecer intercambiables en caliente.

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
);

Parámetros

DriverProxyExtension

[in] Puntero a la extensión DriverProxy a la que están registrados los puntos de conexión. La rutina de trabajo especificada en WorkerStartContext debe ser un contenedor de punto de conexión registrado.

ThreadHandle

[out] Puntero a una variable que recibe el identificador del subproceso creado.

DesiredAccess

[in] Derechos de acceso deseados para el identificador de subproceso.

ObjectAttributes

[in, opcional] Puntero a una estructura de OBJECT_ATTRIBUTES* que especifica atributos para el objeto de subproceso. Este parámetro puede ser NULL.

ProcessHandle

[in, opcional] Identificador del proceso en el que se crea el subproceso. Si es NULL, el subproceso se crea en el proceso actual.

ClientId

[out, optional] Puntero a la estructura CLIENT_ID del subproceso creado. Este parámetro puede ser NULL.

WorkerStartContext

[in] Puntero a una estructura de DRIVER_PROXY_HOTSWAP_WORKER_ROUTINE_START_CONTEXT que contiene la configuración del subproceso de trabajo, incluida la rutina de trabajo y los objetos de evento que se van a esperar.

Valor devuelto

IoDriverProxyCreateHotSwappableWorkerThread devuelve uno de los siguientes valores NTSTATUS:

Código de retorno Description
STATUS_SUCCESS El subproceso de trabajo intercambiable en caliente se creó correctamente.
STATUS_NOT_SUPPORTED La funcionalidad DriverProxy no está disponible en el sistema actual.
STATUS_INVALID_PARAMETER Uno o varios parámetros no son válidos, como una rutina de trabajo NULL o un recuento de eventos no válidos.
STATUS_INSUFFICIENT_RESOURCES La memoria insuficiente estaba disponible para crear el contexto del subproceso o las estructuras auxiliares.

Observaciones

Esta función crea un subproceso de trabajo especializado que se integra con el sistema DriverProxy, lo que permite intercambiar la rutina de trabajo mientras el subproceso continúa ejecutándose. Esto es especialmente útil para los controladores que necesitan realizar operaciones en segundo plano continuas que deben conservarse en las actualizaciones de controladores.

La rutina de trabajo especificada en WorkerStartContext debe ser un contenedor de punto de conexión registrado obtenido a través del proceso de registro DriverProxy. Este requisito habilita la funcionalidad intercambiable activa, lo que permite a los controladores actualizar su lógica de trabajo sin detener las operaciones en segundo plano de ejecución prolongada.

El subproceso de trabajo funciona en un bucle, esperando los eventos especificados y llamando a la rutina de trabajo cuando se indican eventos. La rutina de trabajo puede indicar si el subproceso debe continuar ejecutándose o finalizar.

La función realiza una copia de la estructura WorkerStartContext , por lo que el autor de la llamada puede descartar de forma segura la estructura original después de que la función devuelva. Se debe llamar a la función en PASSIVE_LEVEL a medida que realiza la asignación de memoria y la creación de subprocesos.

Requisitos

Requirement Importancia
de la plataforma de destino de Universal
Header wdm.h
Library NtosKrnl.lib
irQL PASSIVE_LEVEL

Consulte también

DRIVER_PROXY_HOTSWAP_WORKER_ROUTINE_START_CONTEXT

DRIVER_PROXY_HOTSWAP_WORKER_ROUTINE

IoRegisterDriverProxyEndpointsPsCreateSystemThread