Partager via


IoDriverProxyCreateHotSwappableWorkerThread, fonction (wdm.h)

La fonction IoDriverProxyCreateHotSwappableWorkerThread crée un thread de travail permutable à chaud qui fournit un thread de travail « en attente de rotation » compatible avec l’échange à chaud du pilote. Cette fonction est particulièrement utile pour gérer des boucles infinies et des opérations de longue durée dans les pilotes qui doivent rester permutables à chaud.

Syntaxe

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

Paramètres

DriverProxyExtension

[in] Pointeur vers l’extension DriverProxy à laquelle les points de terminaison sont inscrits. La routine worker spécifiée dans WorkerStartContext doit être un wrapper de point de terminaison inscrit.

ThreadHandle

[out] Pointeur vers une variable qui reçoit le handle vers le thread créé.

DesiredAccess

[in] Droits d’accès souhaités pour le handle de thread.

ObjectAttributes

[in, facultatif] Pointeur vers une structure OBJECT_ATTRIBUTES* qui spécifie les attributs de l’objet thread. Ce paramètre peut être NULL.

ProcessHandle

[in, facultatif] Handle du processus dans lequel le thread est créé. Si la valeur est NULL, le thread est créé dans le processus actuel.

ClientId

[out, facultatif] Pointeur vers la structure CLIENT_ID du thread créé. Ce paramètre peut être NULL.

WorkerStartContext

[in] Pointeur vers une structure DRIVER_PROXY_HOTSWAP_WORKER_ROUTINE_START_CONTEXT qui contient la configuration du thread de travail, y compris les objets de routine worker et d’événement à attendre.

Valeur retournée

IoDriverProxyCreateHotSwappableWorkerThread retourne l’une des valeurs NTSTATUS suivantes :

Code de retour Descriptif
STATUS_SUCCESS Le thread worker permutable à chaud a été créé avec succès.
STATUS_NOT_SUPPORTED La fonctionnalité DriverProxy n’est pas disponible sur le système actuel.
STATUS_INVALID_PARAMETER Un ou plusieurs paramètres ne sont pas valides, tels qu’une routine de travail NULL ou un nombre d’événements non valide.
STATUS_INSUFFICIENT_RESOURCES La mémoire insuffisante était disponible pour créer le contexte de thread ou les structures de prise en charge.

Remarques

Cette fonction crée un thread de travail spécialisé qui s’intègre au système DriverProxy, ce qui permet à la routine de travail d’être permutée à chaud pendant l’exécution du thread. Cela est particulièrement utile pour les pilotes qui doivent effectuer des opérations en arrière-plan continues qui doivent persister entre les mises à jour des pilotes.

La routine worker spécifiée dans WorkerStartContext doit être un wrapper de point de terminaison inscrit obtenu via le processus d’inscription DriverProxy. Cette exigence permet aux fonctionnalités permutables à chaud, ce qui permet aux pilotes de mettre à jour leur logique de travail sans arrêter les opérations en arrière-plan longues.

Le thread de travail fonctionne dans une boucle, en attendant les événements spécifiés et en appelant la routine worker lorsque les événements sont signalés. La routine worker peut indiquer si le thread doit continuer à s’exécuter ou à se terminer.

La fonction effectue une copie de la structure WorkerStartContext , afin que l’appelant puisse ignorer en toute sécurité la structure d’origine une fois la fonction retournée. La fonction doit être appelée à PASSIVE_LEVEL car elle effectue l’allocation de mémoire et la création de threads.

Spécifications

Requirement Valeur
plateforme cible Universal
Header wdm.h
Library NtosKrnl.lib
IRQL PASSIVE_LEVEL

Voir aussi

DRIVER_PROXY_HOTSWAP_WORKER_ROUTINE_START_CONTEXT

DRIVER_PROXY_HOTSWAP_WORKER_ROUTINE

IoRegisterDriverProxyEndpointsPsCreateSystemThread