Freigeben über


Richtlinien für Sitzung Null für UMDF-Treiber

Ab Windows Vista isoliert das Betriebssystem Dienste und Systemprozesse in Sitzung 0, während Anwendungen in nachfolgenden, nummerierten Sitzungen ausgeführt werden. Da der UMDF-Hostprozess (WUDFHost.exe) einer der Systemprozesse ist, die in Sitzung 0 ausgeführt werden, sind UMDF-Treiber von Anwendungen isoliert. Beim Entwickeln Ihres Treibers müssen Sie daher die folgenden Richtlinien verwenden:

  • Erstellen Sie kein Element der Benutzeroberfläche (UI), z. B. ein Dialogfeld, und verlassen Sie sich nicht auf Benutzereingaben. Da der Benutzer nicht in Sitzung 0 ausgeführt wird, sieht er die Benutzeroberfläche nie und kann nicht darauf reagieren.

    Ändern Sie auf ähnliche Weise keine UI-Elemente. Ein UMDF-Treiber kann z. B. keine Fenster in der Sitzung des Benutzers aufzählen.

  • Wenn Ihr Treiber mit einem Dienst kommunizieren muss, verwenden Sie einen Client-/Servermechanismus wie remote procedure call (RPC) oder named pipes.

  • Achten Sie beim Aufrufen von Funktionen in der Windows-API auf Vorsicht. Einige Funktionen können UI-Elemente bearbeiten oder versuchen, in der Sitzung eines Benutzers auf benannte Objekte zuzugreifen. Rufen Sie keine Windows-Funktionen auf, die Sie nicht von einem Benutzermodusdienst aufrufen würden. In der Regel kann ein UMDF-Treiber Funktionen, die in kernel32.dllexportiert werden, sicher aufrufen, jedoch nicht funktionen, die in user32.dllexportiert werden.

    Ein UMDF-Treiber ruft möglicherweise Windows-Funktionen auf, um die folgenden Aufgaben auszuführen:

    • Ein Treiber könnte SetupDiXxx-Funktionen aufrufen, um eine Plug-and-Play-Geräteeigenschaft abzurufen. Beispielsweise ruft der UMDF-Beispieltreiber für OSR USB Fx2 Learning KitSetupDiGetDeviceRegistryProperty auf, um die GUID für den Bustyp des Geräts abzurufen. Anmerkung Ein UMDF-Treiber kann viele der SetupDiXxx-Funktionen nicht sicher aufrufen, aber es ist sicher, Funktionen aufzurufen, die Geräteknoteneigenschaften abrufen.

    • Ein Treiber, der E/A-Anforderungen aus einer manuellen Warteschlange abruft, kann einen periodischen Timer erstellen, um die Warteschlange abzufragen. Beispielsweise registriert das WudfVhidmini-Beispiel eine Timerrückrufroutine durch Aufrufen von CreateThreadpoolTimer und legt dann einen regelmäßigen Timer durch Aufrufen von SetThreadpoolTimer fest. Anmerkung Ab Version 1.11 bietet UMDF Unterstützung für Arbeitsaufgaben. Weitere Informationen finden Sie unter Verwenden von Arbeitselementen.

Weitere Informationen zur Verwendung von Systemdiensten außerhalb der Frameworks finden Sie in Kapitel 14 ("Jenseits der Frameworks") von Orwick, Penny und Guy Smith. Entwickeln von Treibern mit Windows Driver Foundation. Redmond, WA: Microsoft Press, 2007.

Weitere Informationen zur Sitzungsnullisolation finden Sie unter "Auswirkungen der Sitzung 0-Isolation auf Dienste und Treiber in Windows".