Freigeben über


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

ChangeQueueState

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.

CompleteCanceledReq

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.

DoubleCompletion

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.

DoubleCompletionLocal

Die DoubleCompletionLocal-Regel gibt an, dass Treiber eine E/A-Anforderung nicht zweimal ausführen dürfen.

EvtIoStopCancel

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.

EvtIoStopCompleteOrStopAck

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.

EvtSurpriseRemoveNoSuspendQueue

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.

FileObjectConfigured

Die FileObjectConfigured-Regel gibt an, dass einem Aufruf der WdfRequestGetFileObject-Methode ein Aufruf von WdfDeviceInitSetFileObjectConfig vorangestellt ist.

InternalIoctlReqs

Die InternalIoctlReqs-Regel gibt an, dass interne IOCTL-Anforderungen nicht an ungeeignete KMDF-DDIs (Request-Send Device Driver Interfaces) übergeben werden.

InvalidReqAccess

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.

InvalidReqAccessLocal

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.

IoctlReqs

Die IoctlReqs-Regel gibt an, dass IOCTL-Anforderungen nicht an ungeeignete KMDF-Anforderungen oder Sendegerätetreiberschnittstellen (DDIs) übergeben werden dürfen.

MarkCancOnCancReqLocal

Die MarkCancOnCancReqLocal-Regel gibt an, dass die WdfRequestMarkCancelable-Methode nicht zwei aufeinanderfolgende Male für dieselbe E/A-Anforderung aufgerufen werden kann.

NoIoQueuePurgeSynchronly

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:

OutputBufferAPI

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:

ReadReqs

Die ReadReqs-Regel gibt an, dass Leseanforderungen nicht an ungeeignete KMDF-Methoden übergeben werden.

ReqCompletionRoutine

Die ReqCompletionRoutine-Regel gibt an, dass eine Vervollständigungsroutine festgelegt werden muss, bevor eine Anforderung an ein E/A-Ziel gesendet wird.

ReqDelete

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.

ReqIsCancOnCancReq

Die ReqIsCancOnCancReq-Regel gibt an, dass die WdfRequestIsCanceled-Methode nur für eine Anforderung aufgerufen werden kann, die nicht als abbruchfähig gekennzeichnet ist.

ReqMarkCancelableSend

Die ReqMarkCancelableSend-Regel gibt an, dass vom Treiber weitergeleitete Anforderungen nicht als abbruchfähig gekennzeichnet werden, indem WdfRequestMarkCancelable aufgerufen wird.

RequestCompleted

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.

RequestFormattedValid

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.

RequestGetStatusValid

Die RequestGetStatusValid-Regel , die angibt, dass WdfRequestGetStatus für eine Anforderung in einer der folgenden Situationen aufgerufen werden soll:

  • Wenn WdfRequestSend einen Fehler zurückgibt.
  • Wenn die Anforderung mit WDF_REQUEST_SEND_OPTION_SYNCHRONOUS gesendet wurde.

RequestSendAndForgetNoFormatting

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.

RequestSendAndForgetNoFormatting2

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.

StopAckWithinEvtIoStop

Die StopAckWithinEvtIoStop-Regel gibt an, dass die WdfRequestStopAcknowledge-Funktion nur aus der EvtIoStop-Rückruffunktion aufgerufen wird.

WdfIoQueueFindRequestFailed

Die WdfIoQueueFindRequestFailed-Regel gibt an, dass WdfIoQueueRetrieveFoundRequest oder WdfObjectDereference nur aufgerufen werden soll, nachdem WdfIoQueueFindRequestFailed STATUS_SUCCESS zurückgibt.

WdfIoQueueRetrieveFoundRequest

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.

WdfIoQueueRetrieveNextRequest

Die WdfIoQueueRetrieveNextRequest-Regel gibt an, dass WdfIoQueueRetrieveNextRequest nach dem Aufruf von WdfIoQueueFindRequest nicht aufgerufen wird.

WriteReqs

Die WriteReqs-Regel gibt an, dass eine Schreibanforderung nicht an ungeeignete KMDF-Methoden übergeben wird.

So wählen Sie den RequestProcessing-Regelsatz aus

  1. Wählen Sie Ihr Treiberprojekt (.vcxProj) in Microsoft Visual Studio aus. Klicken Sie im Menü Treiber auf Statische Treiberüberprüfung starten....

  2. 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).