Verhindern eines Ungleichgewichts beim Erstellen und Schließen von Benachrichtigungen für einen Treiber

Warnung

UMDF 2 ist die neueste Version von UMDF und ersetzt UMDF 1. Alle neuen UMDF-Treiber sollten mit UMDF 2 geschrieben werden. UMDF 1 werden keine neuen Features hinzugefügt, und die Unterstützung für UMDF 1 für neuere Versionen von Windows 10 ist eingeschränkt. Universelle Windows-Treiber müssen UMDF 2 verwenden.

Die archivierten UMDF 1-Beispiele finden Sie im Windows 11, Version 22H2 – Mai 2022 Treiberbeispiele Update.

Weitere Informationen finden Sie unter Erste Schritte mit UMDF.

Ein höherer UMDF-Treiber kann die IWDFDeviceInitialize::AutoForwardCreateCleanupClose-Methode verwenden, um zu steuern, wann das Framework automatisch Create-File-, Cleanup-File- und Close-File-Benachrichtigungen an den nächstniedrigen Treiber im Gerätestapel weiterleitet. Da der obere Treiber AutoForwardCreateCleanupClose jedoch so festlegt, dass es nur auf Geräteebene und nicht auf Dateiebene automatisch weitergeleitet wird, muss die Weiterleitung für alle Dateien für ein Gerät identisch sein. Das Framework stellt dieses Weiterleitungsverhalten für Bereinigungs- und Close-File-Benachrichtigungen sicher. Wenn der obere Treiber die Rückruffunktion IQueueCallbackCreate::OnCreateFile implementiert, muss er sicherstellen, dass das Weiterleitungsverhalten für alle Create-File-Anforderungen identisch ist und mit dem Weiterleitungsverhalten für Cleanup-File- und Close-File-Benachrichtigungen konsistent ist. Andernfalls erhalten niedrigere Treiber ungleich viele Aufrufe der Methoden IQueueCallbackCreate::OnCreateFile und IFileCallbackCleanup::OnCleanupFile und IFileCallbackClose::OnCloseFile .

Um zu verhindern, dass niedrigere Treiber ungleich viele Create-File- und Close-File-Benachrichtigungen erhalten, muss der obere Treiber in seiner IQueueCallbackCreate::OnCreateFile-Rückruffunktion folgendes sicherstellen:

  • Das Weiterleitungsverhalten ist für alle Dateien für ein Gerät identisch.

  • Das Weiterleitungsverhalten stimmt mit dem Festlegen des Flagparameters von IWDFDeviceInitialize::AutoForwardCreateCleanupClose überein. Dies bedeutet:

    • Wenn der Treiber das Flag auf WdfTrue festgelegt hat, muss der Treiber alle Create-File-Anforderungen auf den Gerätestapel weiterleiten.
    • Wenn der Treiber das Flag auf WdfFalse festgelegt hat, darf der Treiber keine der Create-File-Anforderungen im Stapel weiterleiten.
    • Wenn der Treiber das Flag auf WdfUseDefault festgelegt hat, und:
      • Wenn der Treiber ein Funktionstreiber ist, darf er keine Create-File-Anforderungen im Stapel weiterleiten.
      • Wenn der Treiber ein Filtertreiber ist, müssen alle Create-File-Anforderungen im Stapel weitergeleitet werden.

In Situationen, in denen der Treiber keine Create-File-Anforderung weiterleiten kann, kann der Treiber dennoch eine neue Create-File-Anforderung für niedrigere Treiber generieren, indem er die IWDFDevice::CreateWdfFile-Methode aufruft , um eine neue WDF-Datei zu erstellen. Der Treiber kann dann die ursprüngliche Create-File-Anforderung basierend auf den Ergebnissen der neu generierten Create-File-Anforderung (d. a. aus den Ergebnissen von CreateWdfFile) abschließen.