Verwenden von Gerätepooling in UMDF-Treibern

User-Mode Driver Framework (UMDF) Version 1.11 und 2.0

Wenn Ihr User-Mode Driver Framework (UMDF)-Treiber mit Version 1.11 oder 2.0 erstellt wurde und auf Windows 8 oder höher ausgeführt wird, erstellt das Framework eine einzelne instance von Wudfhost, die mehrere Gerätestapel hosten kann. Diese Technik wird als Gerätepooling bezeichnet. Der Standard Vorteil von Gerätepools ist die Reduzierung des Arbeitsspeicherverbrauchs in einer Umgebung mit mehreren UMDF-Geräten.

Wenn ein Poolgerät ausfällt, beendet das Framework die instance von Wudfhost und versucht, alle Geräte neu zu starten, die sich zuvor im Pool befanden. Wenn das Gerät während des Pools erneut ausfällt, erstellt das Framework einen separaten Wudfhost-Prozess für das Gerät und versucht, das Gerät erneut zu starten.

Wenn das Gerät im separaten Hostprozess fehlschlägt, versucht das Framework, es bis zu fünf Mal neu zu starten. Das Framework setzt die Gerätefehleranzahl auf eine zurück, wenn seit dem letzten Fehler dreißig Minuten vergangen sind.

Wenn das System neu gestartet wird, werden geräte mit Ausnahme von Geräten, die bei der Ausführung in einem separaten Prozess fehlgeschlagen sind, vom Framework neu gruppiert.

Um das Gerätepooling für ein bestimmtes Gerät zu deaktivieren, verwenden Sie die UmdfHostProcessSharing-Anweisung im WDF-spezifischen DDInstall-Abschnitt des INF. Informationen zu UmdfHostProcessSharing finden Sie unter Angeben von WDF-Anweisungen in INF-Dateien.

Wenn Ihr Treiber direkte E/A verwendet, müssen Sie UmdfHostProcessSharing auf ProcessSharingDisabled festlegen. Andernfalls kann der Treiber nicht gestartet werden. Wenn WdfDeviceIoBufferedOrDirect ausgewählt ist und das Gerät pooling ist, ändert das Framework die Pufferzugriffsmethode in gepufferte E/A-Vorgänge. Wenn WdfDeviceIoBufferedOrDirect ausgewählt ist und das Gerät nicht im Pool zusammengefasst ist, ändert das Framework die Pufferzugriffsmethode, um eine direkte E/A zu leiten.

Um eine Pufferzugriffsmethode auszuwählen, muss Ihr Treiber die IWDFDeviceInitialize2::SetIoTypePreference-Methode über seine IDriverEntry::OnDeviceAdd-Rückruffunktion aufrufen. Informationen zu Zugriffsmethoden finden Sie unter Zugreifen auf Datenpuffer in UMDF-Based Treibern.

UMDF-Versionen 1.9 und früher

Wenn Ihr Treiber mit UMDF-Version 1.9 oder früher erstellt wurde, erstellt das Framework eine separate instance des Hostprozesses (Wudfhost) für jeden Gerätestapel.

Wenn das Gerät nicht gestartet werden kann, versucht das Framework, es bis zu fünf Mal neu zu starten. Das Framework setzt die Gerätefehleranzahl auf eine zurück, wenn seit dem letzten Fehler dreißig Minuten vergangen sind.

Wenn mehrere Gerätestapel in einer Umgebung ohne Pool denselben UMDF-Treiber verwenden:

Wenn mehrere Gerätestapel in einer Poolumgebung denselben Benutzermodustreiber verwenden:

Da nur ein Treiberobjekt in einer Poolkonfiguration vorhanden ist, darf der Treiber keinen gerätespezifischen Kontext in globalen Variablen oder in Objekten speichern, die für alle Geräte freigegeben werden, z. B. das Treiberrückrufobjekt. Stattdessen muss der Treiber den gerätespezifischen Kontext in einem Objekt speichern, das nicht für die Gerätestapel freigegeben wird, z. B. das Geräterückrufobjekt des Treibers.