Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
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