RequestCompleted-Regel (kmdf)
Die RequestCompleted-Regel gibt an, dass für einen Nicht-Filtertreiber jede Anforderung, die der Standard-E/A-Warteschlange des Treibers angezeigt wird, abgeschlossen werden muss, es sei denn, die Anforderung wird verzögert oder weitergeleitet, oder wenn WdfRequestStopAcknowledge aufgerufen wird.
Eine E/A-Anforderung, die der Standardwarteschlange des Treibers über eine der Warteschlangenrückruffunktionen angezeigt wird, muss abgeschlossen werden, bevor sie aus den E/A-Anforderungsrückruffunktionen beendet wird, außer in den folgenden Fällen:
Die Anforderung wurde zurückgestellt (z. B. auf einen DPC oder ein Arbeitselement). In diesem Fall können Sie die DeferredRequestCompleted-Regel verwenden.
Die Anforderung wurde an ein E/A-Ziel oder eine andere Warteschlange weitergeleitet.
Die Anforderung wurde an das Framework übermittelt (durch Aufrufen von WdfDeviceEnqueueRequest).
WdfRequestStopAcknowledge wurde aufgerufen.
Die Regel wird überprüft, wenn der Treiber die folgenden Rückruffunktionen verlässt:
EvtIoStop, EvtCleanupCallback oder EvtDestroyCallback für die Warteschlange
EvtCleanupCallback oder EvtDestroyCallback für das Dateiobjekt
EvtFileClose, EvtFileCleanup, EvtDeviceSelfManagedIoSuspend, EvtDeviceSelfManagedIoFlush, EvtDeviceSelfManagedIoCleanup, EvtDeviceShutdownNotification, EvtDeviceSurpriseRemoval, EvtCleanupCallback oder EvtDestroyCallback für das Gerät
Die E/A-Warteschlangenrückruffunktionen für die Anforderungspräsentation sind EvtIoDefault, EvtIoRead, EvtIoWrite, EvtIoDeviceControl und EvtIoInternalDeviceControl
Treibermodell: KMDF
So führen Sie einen Test durch
Beim Kompilieren: |
---|
Führen Sie Static Driver Verifier aus, und geben Sie die Regel RequestCompleted an . Gehen Sie folgendermaßen vor, um Ihren Code zu analysieren:
Weitere Informationen finden Sie unter Verwenden der statischen Treiberüberprüfung, um Fehler in Treibern zu finden. |
Gilt für:
WdfDeviceEnqueueRequestWdfDmaTransactionInitializeWdfDmaTransactionInitializeUsingRequestWdfIoTargetSendInternalIoctlOthersSynchronlyWdfIoTargetSendInternalIoctlSynchronouslyWdfIoTargetSendIoctlSynchronouslyWdfIoTargetSendReadSynchronouslyWdfIoTargetSendWriteSynchronouslyWdfRequestCompleteWdfRequestCompleteWithInformationWdfRequestCompleteWithPriorityBoostWdfRequestForwardToIoQueueWdfRequestMarkCancelableWdfRequestMarkCancelableExWdfRequestSendWdfRequestStopAcknowledgeWdfWorkItemEnqueue