Partager via


Gestion des PDEVs

Cette rubrique s’applique uniquement à Windows 2000 et versions ultérieures.

Le nombre de threads qui appellent un pilote d’affichage dépend du nombre de PDEVs existants sur un appareil. Chaque appareil a un maximum d’un PDEV activé par sortie d’adaptateur et un nombre illimité de PDEVs désactivés. Un PDEV est désactivé ou activé en appelant la fonction DrvAssertMode du pilote. Lorsqu’un pilote d’affichage gère une combinaison de PDEVs désactivés et activés, le système d’exploitation permet à un thread unique d’appeler une fonction de pilote avec un PDEV activé tout en autorisant simultanément plusieurs threads à appeler des fonctions de pilote avec des PDEVs désactivés. Par exemple, DrvBitBlt peut s’exécuter sur le PDEV activé alors qu’un autre PDEV désactivé est détruit par DrvDisableSurface. Même si un seul pilote d’affichage gère plusieurs PDEVs activés (par exemple, dans un scénario sur plusieurs moniteurs), le système d’exploitation n’autorise toujours qu’un seul appel de thread dans le code du pilote avec l’un de ces PDEVs activés.

Si le pilote d’affichage doit gérer les ressources globales et les états matériels partagés entre les PDEVs, le pilote d’affichage doit également gérer toute synchronisation nécessaire. Le pilote d’affichage étant mappé à l’espace de session, chaque session a son propre ensemble de variables globales. Par conséquent, vous ne devez pas utiliser une variable globale de pilote d’affichage pour contenir un objet de synchronisation tel qu’un mutex. Au lieu de cela, stockez le mutex dans l’extension de l’appareil du pilote miniport vidéo, qui est mappé dans l’espace global et non dans l’espace de session. Vous pouvez initialiser le mutex dans la fonction HwVidInitialize du pilote vidéo miniport. Ensuite, la fonction DrvEnablePDEV du pilote d’affichage peut obtenir un pointeur vers le mutex en envoyant un IOCTL personnalisé au pilote de miniport vidéo. Les threads de pilote d’affichage qui appartiennent à différentes sessions auront des copies distinctes du pointeur, mais toutes ces copies pointent vers le même objet mutex.

Le pilote d’affichage n’étant pas autorisé à appeler directement les routines du noyau qui acquièrent et libèrent un mutex, le pilote d’affichage doit s’appuyer sur le pilote de miniport vidéo pour effectuer ces tâches. Le pilote de miniport vidéo peut implémenter une fonction qui acquiert et libère le mutex, et le pilote d’affichage peut obtenir un pointeur vers cette fonction dans le même IOCTL personnalisé qu’il utilise pour obtenir un pointeur vers le mutex lui-même.

Seules les fonctions de pilote suivantes peuvent être appelées avec un PDEV désactivé :