Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
In diesem Thema werden Aktionen beschrieben, die User-Mode Driver Framework (UMDF) und das Betriebssystem ausführen, wenn ein UMDF-Treiber ausfällt. Sie gilt sowohl für UMDF-Versionen 1 als auch für 2.
Die folgenden Ereignisse treten in der angegebenen Reihenfolge auf:
Das Betriebssystem benachrichtigt den Reflektor (WUDFRd.sys).
Der Reflektor verfolgt ausstehende E/A-Vorgänge im Hostprozess nach:
- Der Reflektor schließt ausstehende E/A-Vorgänge mit dem fehlercode STATUS_DRIVER_PROCESS_TERMINATED ab.
- Microsoft Win32-Anwendungen erhalten den ERROR_DRIVER_PROCESS_TERMINATED Fehlercode für die ausstehende E/A.
Hinweis Der Reflektor, der unter Microsoft Windows XP ausgeführt wird, schließt ausstehende E/A-Vorgänge mit STATUS_DRIVER_INTERNAL_ERROR ab, und Win32-Anwendungen erhalten wiederum den ERROR_IO_DEVICE Fehlercode für die ausstehende E/A. Daher sollten Anwendungen, die unter Windows XP ausgeführt werden, ERROR_IO_DEVICE nicht verwenden, um einen Treiberfehler zu erkennen, da sie keinen Unterschied zu den status ermitteln können, die von einer typischen E/A-Anforderung zurückgegeben wird (z. B. die status, die von einem Aufruf der Win32 DeviceIoControl-Funktion zurückgegeben wird).
Der Reflektor sendet das GUID_WUDF_DEVICE_HOST_PROBLEM benutzerdefiniertes Plug & Play-Ereignis (PnP) an das Betriebssystem, nachdem das Betriebssystem ein Problem mit dem Hostprozess gemeldet hat.
Wenn eine Anwendung, die zuvor die Win32 RegisterDeviceNotification-Funktion aufgerufen hat , um GUID_WUDF_DEVICE_HOST_PROBLEM für das Gerät zu registrieren, erhält diese Anwendung eine DBT_CUSTOMEVENT Benachrichtigung, wenn der Hostprozess fehlschlägt. Weitere Informationen zu RegisterDeviceNotification und DBT_CUSTOMEVENT finden Sie in der Windows SDK-Dokumentation.
Das Betriebssystem schreibt einen Eintrag in das Systemereignisprotokoll, der angibt, dass der Treiber ausgefallen ist. Außerdem wird angegeben, wie oft das Betriebssystem den Treiber noch mal neu startet. Das Betriebssystem schreibt die folgenden Ereignisnummern in das Systemereignisprotokoll, um die angegebenen Probleme anzugeben:
- 10110, wenn der Hostprozess fehlerhaft war
- 10111, wenn das Gerät offline geschaltet und neu gestartet wurde
- 10112, wenn das Gerät offline geschaltet und nicht neu gestartet wurde
Das Framework kann versuchen, einen fehlerhaften Treiber neu zu starten. Die UMDF-Codeüberprüfung stellt einen Registrierungswert bereit, der die Anzahl der Neustartversuche steuert. Wenn der Benutzer das Gerät im Geräte-Manager deaktiviert und aktiviert oder das Gerät aus- und einsteckt, erstellt das Betriebssystem eine neue instance des Geräts, und das Framework setzt den Neustartzähler zurück.
Das Betriebssystem entlädt die Kerneltreiber im Gerätestapel.
Hinweis Das Betriebssystem wird den Gerätestapel erst dann abreißen und neu starten, wenn alle Handles für den alten Stapel geschlossen wurden. Eine Anwendung erkennt den Gerätefehler und eine überraschende Entfernungsbenachrichtigung für das Gerät (DBT_REMOVEDEVICEPENDING). Wenn jedoch ein Handle für den alten Stapel geöffnet bleibt, wird das Gerät nicht neu gestartet.
Der Treiber-Manager startet das Gerät neu oder deaktiviert es. Wenn das Gerät deaktiviert ist, zeigt das Betriebssystem in Geräte-Manager ein gelbes Ausrufezeichen an.
Beachten Sie, dass nach dem Ausfall eines UMDF-Treibers die folgenden Vorgänge in beliebiger Reihenfolge erfolgen können:
Das Betriebssystem löscht das Gerät und startet es neu.
Der Reflektor sendet das GUID_WUDF_DEVICE_HOST_PROBLEM PnP-Ereignis an das Betriebssystem.
Der Reflektor schließt ausstehende E/A-Vorgänge mit STATUS_DRIVER_PROCESS_TERMINATED ab.
Daher kann eine Anwendung ERROR_DRIVER_PROCESS_TERMINATED für die ausstehende E/A erhalten, nachdem das Betriebssystem das Gerät neu gestartet hat. Nachdem sie ERROR_DRIVER_PROCESS_TERMINATED empfangen hat, erhält die Anwendung möglicherweise auch die DBT_CUSTOMEVENT Benachrichtigung, die sich aus dem GUID_WUDF_DEVICE_HOST_PROBLEM-Ereignis ergibt.