Wiederverwendung von Framework-Anforderungsobjekten
Um die Leistung zu verbessern, können frameworkbasierte Treiber, die viele nahezu identische asynchrone Anforderungen erstellen und an ein E/A-Ziel senden, Anforderungsobjekte wiederverwenden, anstatt für jede Anforderung ein neues Anforderungsobjekt zu erstellen. Ein Treiber kann ein Anforderungsobjekt wiederverwenden, nachdem die Anforderung abgeschlossen wurde.
Wenn ein Treiber ein Anforderungsobjekt durch Aufrufen von WdfRequestCreate oder WdfRequestCreateFromIrp erstellt hat, kann er die Anforderung durch Aufrufen von WdfRequestReuse wiederverwenden. Ein Treiber kann auch Anforderungsobjekte, die er vom Framework empfangen hat, in seinen E/A-Warteschlangen wiederverwenden, aber er kann den IRP, den das empfangene Anforderungsobjekt enthält, nicht ändern.
Wenn Sie darauf achten, Situationen zu vermeiden, die zu den in WdfRequestReuse beschriebenen nicht erfolgreichen Rückgabewerten führen, kann Ihr Treiber WdfRequestReuse aus einer CompletionRoutine-Rückruffunktion aufrufen. (Die CompletionRoutine-Rückruffunktion verfügt über einen VOID-Rückgabewert und kann daher keine Fehler melden.)
Wenn Ihr Treiber eine CompletionRoutine-Rückruffunktion für ein Anforderungsobjekt bereitstellt, das er wiederverwendet, muss der Treiber WdfRequestSetCompletionRoutine nach dem Aufruf von WdfRequestReuse aufrufen.