Löschen von E/A-Warteschlangen

Frameworkbasierte Treiber müssen nur einige der E/A-Warteschlangen löschen, die sie erstellen. Wenn ein Treiber eine Standard-E/A-Warteschlange oder eine E/A-Warteschlange erstellt, die er durch Aufrufen von WdfDeviceConfigureRequestDispatching konfiguriert, löscht das Framework das Warteschlangenobjekt für den Treiber.

Wenn Sie beispielsweise beabsichtigen, dass die E/A-Warteschlangen jedes Geräts bestehen, solange jedes Gerät an das System angeschlossen bleibt, erstellt Ihr Treiber seine E/A-Warteschlangen in seiner Rückruffunktion EvtDriverDeviceAdd . Ihr Treiber erstellt möglicherweise eine Standardwarteschlange, die alle Anforderungen mit Ausnahme von Leseanforderungen empfängt, und eine separate Warteschlange, die nur Leseanforderungen empfängt.

Der Treiber kann diese E/A-Warteschlangen nicht löschen. Stattdessen löscht das Framework die Warteschlangenobjekte, wenn es das Geräteobjekt löscht, zu dem die Warteschlange gehört. Informationen dazu, warum Ihr Treiber diese E/A-Warteschlangen nicht löschen kann, finden Sie im folgenden Hinweis.

Wenn Ihr Treiber jedoch temporäre E/A-Warteschlangen außerhalb seiner Rückruffunktion EvtDriverDeviceAdd erstellt, muss er WdfObjectDelete aufrufen, um diese Warteschlangen zu löschen, wenn er sie verwendet hat. Beispielsweise kann ein Treiber, der eine EvtDeviceFileCreate-Rückruffunktion bereitstellt, eine E/A-Warteschlange erstellen, um E/A-Anforderungen zu verarbeiten, die einem bestimmten Frameworkdateiobjekt zugeordnet sind. In diesem Fall muss die EvtFileCleanup-Rückruffunktion des Treibers WdfIoQueuePurge aufrufen, um die Warteschlange zu bereinigen, und dann WdfObjectDelete aufrufen, um sie zu löschen.

Hinweis Das Framework erlaubt es einem Treiber nicht, seine Standard-E/A-Warteschlange oder eine E/A-Warteschlange zu löschen, die der Treiber zum Empfangen aller E/A-Anforderungen eines bestimmten Typs konfiguriert (durch Aufrufen von WdfDeviceConfigureRequestDispatching). Wenn Ihr Treiber WdfObjectDelete aufruft , um das Warteschlangenobjekt zu löschen, das eine dieser Warteschlangen darstellt, gibt WdfObjectDelete zurück, ohne das Objekt zu löschen. WdfObjectDelete bietet keine Rückgabe status. Daher meldet das Framework einen Fehler nur, wenn Sie die Überprüfung des Frameworks verwenden.