Notes
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.
Un processus est un programme logiciel qui s’exécute actuellement dans Windows. Chaque processus a un ID, un nombre qui l’identifie. Un thread est un objet qui identifie la partie du programme en cours d’exécution. Chaque thread a un ID, un nombre qui l’identifie.
Un processus peut avoir plusieurs threads. L’objectif d’un thread est d’allouer du temps processeur. Sur une machine avec un processeur, plusieurs threads peuvent être alloués, mais un seul thread peut s’exécuter à la fois. Chaque thread ne s’exécute qu’une courte fois, puis l’exécution est transmise au thread suivant, ce qui donne à l’utilisateur l’illusion que plusieurs choses se produisent à la fois. Sur une machine avec plusieurs processeurs, la véritable multithreading peut avoir lieu. Si une application a plusieurs threads, les threads peuvent s’exécuter simultanément sur différents processeurs.
Le processus en mode noyau Windows et le gestionnaire de threads gèrent l’exécution de tous les threads d’un processus. Que vous ayez un processeur ou plus, vous devez prendre soin de la programmation de pilotes pour vous assurer que tous les threads de votre processus sont conçus afin que, quel que soit l’ordre que les threads sont gérés, votre pilote fonctionne correctement.
Si des threads provenant de différents processus tentent d’utiliser la même ressource en même temps, des problèmes peuvent se produire. Windows fournit plusieurs techniques pour éviter ce problème. La technique de s’assurer que les threads provenant de différents processus ne touchent pas la même ressource est appelée synchronisation. Pour plus d’informations sur la synchronisation, consultez Techniques de synchronisation.
Les routines qui fournissent une interface directe au processus et au gestionnaire de threads sont généralement précédées des lettres « Ps » ; par exemple, PsCreateSystemThread. Pour obtenir la liste des DDIS du noyau, consultez le noyau Windows.
Meilleures pratiques pour l’implémentation des fonctions de rappel liées au processus et aux threads
Cet ensemble de directives s’applique à ces routines de rappel :
PCREATE_PROCESS_NOTIFY_ROUTINE
PCREATE_PROCESS_NOTIFY_ROUTINE_EX
Utilisez ces bonnes pratiques :
- Gardez les routines courtes et simples.
- N’effectuez pas d’appels dans un service en mode utilisateur pour valider le processus, le thread ou l’image.
- N’effectuez pas d’appels de registre.
- N’effectuez pas d’appels de fonction de communication interprocessus (IPC) bloquants et/ou de communication entre processus.
- Ne synchronisez pas avec d’autres threads, car cela peut entraîner des interblocages de réentrance.
- Utilisez des threads de travail système pour mettre en file d’attente le travail, surtout pour les tâches impliquant :
- API lentes ou API qui appellent d’autres processus.
- Tout comportement bloquant qui peut interrompre les threads dans les services principaux.
- Si vous utilisez des threads de travail du système, n'attendez pas que le travail soit terminé. Cela permet de mettre en file d’attente le travail de manière asynchrone.
- Tenez compte des meilleures pratiques pour l’utilisation de la pile en mode noyau. Pour obtenir des exemples, consultez Comment empêcher mon pilote de manquer de pile en mode noyau ? et Principes et conseils clés pour les pilotes.
Processus du sous-système
À compter de Windows 10, le sous-système Windows pour Linux (WSL) permet à un utilisateur d’exécuter des fichiers binaires Linux ELF64 natifs sur Windows, ainsi que d’autres applications Windows. Pour plus d’informations sur l’architecture WSL et les composants en mode utilisateur et en mode noyau requis pour exécuter les fichiers binaires, consultez les billets sur le blog du sous-système Windows pour Linux .
L’un des composants est un processus de sous-système qui héberge le binaire Linux en mode utilisateur non modifié, tel que /bin/bash. Les processus du sous-système ne contiennent pas de structures de données associées à des processus Win32, tels que le bloc d’environnement de processus (PEB) et le bloc d’environnement thread (TEB). Pour un processus de sous-système, les appels système et les exceptions en mode utilisateur sont distribués à un pilote jumelé.
Voici les modifications apportées aux routines process et Thread Manager afin de prendre en charge les processus du sous-système :
Le type WSL est indiqué par la valeur SubsystemInformationTypeWSL dans l’énumération SUBSYSTEM_INFORMATION_TYPE . Les pilotes peuvent appeler NtQueryInformationProcess et NtQueryInformationThread pour déterminer le sous-système sous-jacent. Ces appels retournent SubsystemInformationTypeWSL pour WSL.
D’autres pilotes en mode noyau peuvent être avertis de la création/suppression du processus du sous-système en inscrivant leur routine de rappel via l’appel PsSetCreateProcessNotifyRoutineEx2 . Pour obtenir des notifications sur la création/suppression de threads, les pilotes peuvent appeler PsSetCreateThreadNotifyRoutineEx et spécifier PsCreateThreadNotifySubsystems comme type de notification.
La structure PS_CREATE_NOTIFY_INFO a été étendue pour inclure un membre IsSubsystemProcess qui indique un sous-système autre que Win32. D’autres membres tels que FileObject, ImageFileName, CommandLine indiquent des informations supplémentaires sur le processus du sous-système. Pour plus d’informations sur le comportement de ces membres, consultez SUBSYSTEM_INFORMATION_TYPE.