RequestProcessing Rule Set (KMDF)
Verwenden Sie diese Regeln, um zu überprüfen, ob Ihr Treiber E/A-Anforderungspakete (IRP) ordnungsgemäß abschließt oder abbricht.
In diesem Abschnitt
Thema | BESCHREIBUNG |
---|---|
Die ChangeQueueState-Regel gibt an, dass der WDF-Treiber nicht versucht, den Zustand der Warteschlange aus gleichzeitigen Threads zu ändern, oder nicht den Zustand aufruft, der DDIs nacheinander innerhalb desselben Threads ändert. Rückruffunktionen zur Änderung des Warteschlangenzustands sind WdfIoQueueStop, WdfIoQueueStopSynchronously, WdfIoQueuePurge,WdfIoQueuePurgeSynchronously, WdfIoQueueDrain, WdfIoQueueDrainSynchronously, WdfIoQueueStopAndPurge und WdfIoQueueStopAndPurgeSynchronously. Wenn diese DDIs aufgerufen werden, wenn bereits eine Änderung des Warteschlangenstatus ausgeführt wird, führt dies dazu, dass ein Computer abstürzt oder nicht mehr reagiert. |
|
Die CompleteCanceledReq-Regel gibt an, dass die Anforderung nicht mehr gültig ist und der Treiber sie nicht abschließen sollte, wenn die Anforderung bereits abgebrochen wurde. Während der Treiber eine Anforderung auf hebt, die zuvor als abbruchfähig gekennzeichnet war, muss er überprüfen, ob die Anforderung nicht bereits abgebrochen wurde. Wenn der Treiber diese Überprüfung nicht durchführt, führt der Treiber möglicherweise eine Anforderung aus, die freigegeben wurde. |
|
Die DoubleCompletion-Regel gibt an, dass Treiber eine E/A-Anforderung nicht zweimal ausführen dürfen. Die folgenden Methoden sollten nicht zweimal in einer Zeile für dieselbe Anforderung aufgerufen werden: WdfRequestComplete, WdfRequestCompleteWithInformation, WdfRequestCompleteWithPriorityBoost. |
|
Die DoubleCompletionLocal-Regel gibt an, dass Treiber eine E/A-Anforderung nicht zweimal ausführen dürfen. |
|
Die EvtIoStopCancel-Regel gibt an, dass der Treiber innerhalb der EvtIoStop-Rückruffunktion eine der folgenden Methoden für E/A-Anforderungen aufruft, die nicht abgebrochen werden können. |
|
Die EvtIoStopCompleteOrStopAck-Regel gibt an, dass der Treiber innerhalb der EvtIoStop-Rückruffunktion eine der folgenden Methoden für jede E/A-Anforderung aufruft, die vom Framework bereitgestellt wird. Wenn dies nicht geschieht, kann der Treiber das System daran hindern, in einen anderen leistungsärmeren Zustand zu gelangen. |
|
Die EvtSurpriseRemoveNoSuspendQueue-Regel gibt an, dass WDF-Treiber die Warteschlange nicht aus der Rückruffunktion EvtDeviceSurpriseRemoval entladen, beenden oder bereinigen dürfen, sondern stattdessen selbstverwaltete E/A-Rückruffunktionen verwendet werden sollen. Die Rückruffunktion EvtDeviceSurpriseRemoval wird nicht mit dem Powerdownpfad synchronisiert. |
|
Die FileObjectConfigured-Regel gibt an, dass einem Aufruf der WdfRequestGetFileObject-Methode ein Aufruf von WdfDeviceInitSetFileObjectConfig vorangestellt ist. |
|
Die InternalIoctlReqs-Regel gibt an, dass interne IOCTL-Anforderungen nicht an ungeeignete KMDF-DDIs (Request-Send Device Driver Interfaces) übergeben werden. |
|
Die InvalidReqAccess-Regel gibt an, dass auf Anforderungen nicht zugegriffen wird, nachdem sie abgeschlossen oder abgebrochen wurden. Diese Regel kann sich mit anderen Regeln überschneiden, z. B. Regeln, die auf doppelte Vervollständigung überprüfen, oder Regeln, die die Überprüfung auf Anforderungen überprüfen, wurden zweimal als abbruchfähig markiert. |
|
Die InvalidReqAccessLocal-Regel gibt an, dass auf lokal erstellte Anforderungen nicht zugegriffen wird, nachdem sie abgeschlossen oder abgebrochen wurden. Diese Regel kann sich mit anderen Regeln überschneiden, z. B. Regeln, die auf doppelte Vervollständigung überprüfen, oder Regeln, die die Überprüfung auf Anforderungen überprüfen, wurden zweimal als abbruchfähig markiert. |
|
Die IoctlReqs-Regel gibt an, dass IOCTL-Anforderungen nicht an ungeeignete KMDF-Anforderungen oder Sendegerätetreiberschnittstellen (DDIs) übergeben werden dürfen. |
|
Die MarkCancOnCancReqLocal-Regel gibt an, dass die WdfRequestMarkCancelable-Methode nicht zwei aufeinanderfolgende Male für dieselbe E/A-Anforderung aufgerufen werden kann. |
|
Die NoIoQueuePurgeSynchronously-Regel überprüft, ob WDF-Treiber die Funktionen WdfIoQueueStopSynchronously, WdfIoQueueDrainSynchronously, WdfIoQueueStopAndPurgeSynchronously oder WdfIoQueuePurgeSynchronously nicht aus den folgenden Rückruffunktionen des EvtIO-Warteschlangenobjekts aufrufen: |
|
Die OutputBufferAPI-Regel gibt an, dass die richtigen DDIs für den Pufferabruf in der Rückruffunktion EvtIoWrite verwendet werden. Innerhalb der EvtIoWrite-Rückruffunktion können die folgenden DDIs nicht für den Pufferabruf aufgerufen werden: |
|
Die ReadReqs-Regel gibt an, dass Leseanforderungen nicht an ungeeignete KMDF-Methoden übergeben werden. |
|
Die ReqCompletionRoutine-Regel gibt an, dass eine Vervollständigungsroutine festgelegt werden muss, bevor eine Anforderung an ein E/A-Ziel gesendet wird. |
|
Die ReqDelete-Regel gibt an, dass vom Treiber erstellte Anforderungen nicht an WdfRequestCompleteXxx-Funktionen übergeben werden. Stattdessen sollte die Anforderung nach Abschluss gelöscht werden. |
|
Die ReqIsCancOnCancReq-Regel gibt an, dass die WdfRequestIsCanceled-Methode nur für eine Anforderung aufgerufen werden kann, die nicht als abbruchfähig gekennzeichnet ist. |
|
Die ReqMarkCancelableSend-Regel gibt an, dass vom Treiber weitergeleitete Anforderungen nicht als abbruchfähig gekennzeichnet werden, indem WdfRequestMarkCancelable aufgerufen wird. |
|
Die DeferredRequestCompleted-Regel gibt an, dass für einen Nicht-Filtertreiber jede Anforderung, die an die Standard-E/A-Warteschlange des Treibers gesendet wird, abgeschlossen werden muss, es sei denn, die Anforderung wird zurückgestellt oder weitergeleitet, oder wenn WdfRequestStopAcknowledge aufgerufen wird. |
|
Die RequestFormattedValid-Regel gibt an, dass der Treiber alle Anforderungen mit Ausnahme einer WDF_REQUEST_SEND_OPTION_SEND_AND_FORGET-Anforderung formatiert, bevor er sie an ein E/A-Ziel sendet. |
|
Die RequestGetStatusValid-Regel , die angibt, dass WdfRequestGetStatus für eine Anforderung in einer der folgenden Situationen aufgerufen werden soll:
|
|
Die RequestSendAndForgetNoFormatting-Regel überprüft, ob der Treiber eine Anforderung mithilfe der E/A-Zielformatierungsfunktionen nicht formatiert, bevor sie mit der Sendeoption WDF_REQUEST_SEND_OPTION_SEND_AND_FORGET an ein E/A-Ziel gesendet wird. |
|
Die RequestSendAndForgetNoFormatting2-Regel überprüft, ob der Treiber eine Anforderung mithilfe der E/A-Zielformatierungsfunktionen nicht formatiert, bevor sie mit der Sendeoption WDF_REQUEST_SEND_OPTION_SEND_AND_FORGET an ein E/A-Ziel gesendet wird. |
|
Die StopAckWithinEvtIoStop-Regel gibt an, dass die WdfRequestStopAcknowledge-Funktion nur aus der EvtIoStop-Rückruffunktion aufgerufen wird. |
|
Die WdfIoQueueFindRequestFailed-Regel gibt an, dass WdfIoQueueRetrieveFoundRequest oder WdfObjectDereference nur aufgerufen werden soll, nachdem WdfIoQueueFindRequestFailed STATUS_SUCCESS zurückgibt. |
|
Die WdfIoQueueRetrieveFoundRequest-Regel gibt an, dass die WdfIoQueueRetrieveFoundRequest-Methode nur aufgerufen wird, nachdem WdfIoQueueFindRequest aufgerufen und STATUS_SUCCESS zurückgegeben wurde und kein WdfObjectDereference für dieselbe Anforderung aufgerufen wird. |
|
Die WdfIoQueueRetrieveNextRequest-Regel gibt an, dass WdfIoQueueRetrieveNextRequest nach dem Aufruf von WdfIoQueueFindRequest nicht aufgerufen wird. |
|
Die WriteReqs-Regel gibt an, dass eine Schreibanforderung nicht an ungeeignete KMDF-Methoden übergeben wird. |
So wählen Sie den RequestProcessing-Regelsatz aus
Wählen Sie Ihr Treiberprojekt (.vcxProj) in Microsoft Visual Studio aus. Klicken Sie im Menü Treiber auf Statische Treiberüberprüfung starten....
Klicken Sie auf die Registerkarte Regeln . Wählen Sie unter Regelsätzedie Option AnforderungVerarbeitung aus.
Um den Standardregelsatz aus einem Visual Studio-Entwicklereingabeaufforderungsfenster auszuwählen, geben Sie RequestProcessing.sdv mit der Option /check an. Beispiel:
msbuild /t:sdv /p:Inputs="/check:RequestProcessing.sdv" mydriver.VcxProj /p:Configuration="Win8 Release" /p:Platform=Win32
Weitere Informationen finden Sie unter Using Static Driver Verifier to Find Defects in Drivers and Static Driver Verifier commands (MSBuild).