Instructions de session zéro pour les pilotes UMDF
À compter de Windows Vista, le système d’exploitation isole les services et les processus système dans la session 0, tandis que les applications s’exécutent dans les sessions suivantes, plus numérotées. Étant donné que le processus hôte UMDF (WUDFHost.exe) est l’un des processus système qui s’exécutent dans la session 0, les pilotes UMDF sont isolés des applications. Par conséquent, vous devez utiliser les instructions suivantes lors du développement de votre pilote :
Ne créez pas d’élément d’interface utilisateur, tel qu’une boîte de dialogue, ou ne dépendez pas de l’entrée utilisateur. Étant donné que l’utilisateur n’est pas en cours d’exécution dans la session 0, il ne voit jamais l’interface utilisateur et ne peut pas y répondre.
De même, ne manipulez aucun élément d’interface utilisateur. Par exemple, un pilote UMDF ne peut pas énumérer les fenêtres dans la session de l’utilisateur.
Si votre pilote doit communiquer avec un service, utilisez un mécanisme client/serveur tel que l’appel de procédure distante (RPC) ou des canaux nommés.
Soyez prudent lorsque vous appelez des fonctions dans l’API Windows. Certaines fonctions peuvent manipuler des éléments d’interface utilisateur ou tenter d’accéder à des objets nommés dans la session d’un utilisateur. N’appelez pas les fonctions Windows que vous ne souhaitez pas appeler à partir d’un service en mode utilisateur. En règle générale, un pilote UMDF peut appeler en toute sécurité des fonctions exportées dans kernel32.dll, mais pas des fonctions exportées dans user32.dll.
Un pilote UMDF peut appeler des fonctions Windows pour effectuer les tâches suivantes :
Un pilote peut appeler des fonctions SetupDiXxx pour récupérer une propriété de périphérique Plug-and-Play. Par exemple, l’exemple de pilote UMDF pour OSR USB Fx2 Learning Kit appelle SetupDiGetDeviceRegistryProperty pour récupérer le GUID du type de bus de l’appareil. Note Un pilote UMDF ne peut pas appeler en toute sécurité la plupart des fonctions SetupDiXxx , mais il est sûr d’appeler des fonctions qui récupèrent les propriétés du nœud d’appareil.
Un pilote qui récupère les demandes d’E/S à partir d’une file d’attente manuelle peut créer un minuteur périodique pour interroger la file d’attente. Par exemple, l’exemple WudfVhidmini inscrit une routine de rappel du minuteur en appelant CreateThreadpoolTimer, puis définit un minuteur périodique en appelant SetThreadpoolTimer. Note À compter de la version 1.11, UMDF prend en charge les éléments de travail. Pour plus d’informations, consultez Utilisation d’éléments de travail.
Pour plus d’informations sur l’utilisation des services système en dehors des frameworks, consultez le chapitre 14 (« Au-delà des infrastructures ») de Orwick, Penny et Guy Smith. Développement de pilotes avec Windows Driver Foundation. Redmond, WA: Microsoft Press, 2007.
Pour plus d’informations sur l’isolation de session zéro, consultez Impact of Session 0 Isolation on Services and Drivers in Windows.