Delen via


Regelset RequestProcessing (KMDF)

Gebruik deze regels om te controleren of uw stuurprogramma I/O-aanvraagpakketten (IRP) correct voltooit of annuleert.

In deze sectie

Onderwerp Beschrijving

ChangeQueueState

De regel ChangeQueueState geeft aan dat het WDF-stuurprogramma niet probeert de status van de wachtrij te wijzigen van gelijktijdige threads of dat de status van het wijzigen van DDIs's niet na elkaar wordt aangeroepen vanuit dezelfde thread. Callbackfuncties voor wachtrijstatussen zijn WdfIoQueueStop, WdfIoQueueStopSynchronously, WdfIoQueuePurge, WdfIoQueuePurgeSynchronously, WdfIoQueueDrain, WdfIoQueueDrainSynchronously, WdfIoQueueStopAndPurge en WdfIoQueueStopAndPurgeSynchronously. Als deze DDIS's worden aangeroepen wanneer er al een statuswijziging in de wachtrij wordt uitgevoerd, zal dit ertoe leiden dat een computer vastloopt of niet meer reageert.

VoltooideGeannuleerdeAanvraag

De regel CompleteCanceledReq geeft aan dat als de aanvraag al is geannuleerd, de aanvraag niet meer geldig is en het stuurprogramma deze niet mag voltooien. Terwijl het stuurprogramma een aanvraag verwijdert die eerder is gemarkeerd als geannuleerd, moet het controleren of de aanvraag nog niet is geannuleerd. Als het stuurprogramma deze controle niet doet, kan het stuurprogramma een aanvraag voltooien die is vrijgemaakt.

DoubleCompletion

De DoubleCompletion-regel geeft aan dat stuurprogramma's een I/O-aanvraag niet twee keer moeten voltooien. De volgende methoden mogen niet tweemaal in een rij worden aangeroepen voor dezelfde aanvraag: WdfRequestComplete, WdfRequestCompleteWithInformation, WdfRequestCompleteWithPriorityBoost.

DoubleCompletionLocal

De DoubleCompletionLocal-regel geeft aan dat stuurprogramma's geen I/O-aanvraag twee keer mogen voltooien.

EvtIoStopCancel

De regel EvtIoStopCancel geeft aan dat het stuurprogramma binnen de functie EvtIoStop callback een van de volgende methoden aanroept voor I/O-aanvragen die niet kunnen worden geannuleerd.

EvtIoStopCompleteOrStopAck

De regel EvtIoStopCompleteOrStopAck geeft aan dat het stuurprogramma binnen de functie EvtIoStop callback een van de volgende methoden aanroept voor elke I/O-aanvraag die wordt gepresenteerd door het framework. Als dit niet gebeurt, kan het stuurprogramma verhinderen dat het systeem een andere lagere energiestatus invoert.

EvtSurpriseRemoveNoSuspendQueue

De regel EvtSurpriseRemoveNoSuspendQueue geeft aan dat WDF-stuurprogramma's de wachtrij niet mogen afhandelen, stoppen of leegmaken via de EvtDeviceSurpriseRemoval callbackfunctie, maar in plaats daarvan gebruik moeten maken van zelfbeheerde I/O callbackfuncties. De callback-functie EvtDeviceSurpriseRemoval wordt niet gesynchroniseerd met het uitschakeltraject.

BestandObjectGeconfigureerd

De fileObjectConfigured-regel geeft aan dat een aanroep naar de methode WdfRequestGetFileObject wordt voorafgegaan door een aanroep naar WdfDeviceInitSetFileObjectConfig.

InternalIoctlReqs

De regel InternalIoctlReqs geeft aan dat interne IOCTL-aanvragen niet worden doorgegeven aan ongepaste INTERFACES voor KMDF-aanvragen verzenden van apparaatstuurprogramma's (DDIs).

InvalidReqAccess

De regel InvalidReqAccess geeft aan dat aanvragen niet worden geopend nadat ze zijn voltooid of geannuleerd. Deze regel kan overlappen met andere regels, zoals regels die controleren op dubbele voltooiing of regels die controleren op aanvragen, zijn twee keer gemarkeerd als geannuleerd.

InvalidReqAccessLocal

De regel InvalidReqAccessLocal geeft aan dat lokaal gemaakte aanvragen niet worden geopend nadat ze zijn voltooid of geannuleerd. Deze regel kan overlappen met andere regels, zoals regels die controleren op dubbele voltooiing of regels die controleren op aanvragen, zijn twee keer gemarkeerd als geannuleerd.

IoctlReqs

De regel IoctlReqs geeft aan dat IOCTL-aanvragen niet mogen worden doorgegeven aan ongepaste KMDF-verzoek- of stuurprogrammainterfaces (DDIs) voor apparaten.

MarkCancOnCancReqLocal

De MarkCancOnCancReqLocal-regel geeft aan dat de methode WdfRequestMarkCancelable niet twee opeenvolgende keren kan worden aangeroepen voor dezelfde I/O-aanvraag.

NoIoQueuePurgeSynchronly

De regel NoIoQueuePurgeSynchronously controleert of WDF-stuurprogramma's de WdfIoQueueStopSynchronously, WdfIoQueueDrainSynchronously, WdfIoQueueStopAndPurgeSynchronously, of WdfIoQueuePurgeSynchronously functies niet aanroepen vanuit de volgende EvtIO-queue object event-callbackfuncties:

OutputBufferAPI

De OutputBufferAPI-regel geeft aan dat de juiste DDIs's voor het ophalen van buffers worden gebruikt in de functie EvtIoWrite callback. Binnen de callback-functie EvtIoWrite kunnen de volgende DDI's niet worden aangeroepen voor het ophalen van buffers:

ReadReqs

De regel ReadReqs geeft aan dat leesaanvragen niet worden doorgegeven aan ongepaste KMDF-methoden.

ReqCompletionRoutine

De regel ReqCompletionRoutine geeft aan dat een voltooiingsroutine moet worden ingesteld voordat een aanvraag naar een I/O-doel wordt verzonden.

ReqDelete

De regel ReqDelete geeft aan dat door het stuurprogramma gemaakte aanvragen niet worden doorgegeven aan WdfRequestCompleteXxx-functies . In plaats daarvan moet de aanvraag na voltooiing worden verwijderd.

ReqIsCancOnCancReq

De reqIsCancOnCancReq-regel geeft aan dat de methode WdfRequestIsCanceled alleen kan worden aangeroepen op een aanvraag die niet is gemarkeerd als geannuleerd.

ReqMarkCancelableSend

De regel ReqMarkCancelableSend geeft aan dat aanvragen die door het stuurprogramma worden doorgestuurd, niet zijn gemarkeerd als geannuleerd door WdfRequestMarkCancelable aan te roepen.

RequestCompleted

De regel DeferredRequestCompleted geeft aan dat voor een niet-filterstuurprogramma elke aanvraag die wordt gepresenteerd aan de standaard I/O-wachtrij van het stuurprogramma moet worden voltooid, tenzij de aanvraag wordt uitgesteld of doorgestuurd, of als WdfRequestStopAcknowledge wordt aangeroepen.

AanvraagGeformatteerdGeldig

De regel RequestFormattedValid geeft aan dat het stuurprogramma alle aanvragen formatteert, met uitzondering van een WDF_REQUEST_SEND_OPTION_SEND_AND_FORGET aanvraag, voordat deze naar een I/O-doel wordt verzonden.

RequestGetStatusValid

De requestGetStatusValid-regel die aangeeft dat WdfRequestGetStatus moet worden aangeroepen voor een aanvraag in een van de volgende situaties:

  • Wanneer WdfRequestSend een fout retourneert.
  • Wanneer de aanvraag is verzonden met WDF_REQUEST_SEND_OPTION_SYNCHRONOUS.

RequestSendAndForgetNoFormatting

Met de regel RequestSendAndForgetNoFormatting wordt gecontroleerd of het stuurprogramma een aanvraag niet formatteert met de I/O-doelopmaakfuncties voordat deze wordt verzonden naar een I/O-doel met de verzendoptie WDF_REQUEST_SEND_OPTION_SEND_AND_FORGET.

RequestSendAndForgetNoFormatting2

De regel RequestSendAndForgetNoFormatting2 controleert of het stuurprogramma geen verzoek formatteert met behulp van de I/O-target opmaakfuncties voordat het naar een I/O-doel wordt verzonden met de optie WDF_REQUEST_SEND_OPTION_SEND_AND_FORGET.

StopAckWithinEvtIoStop

De StopAckWithinEvtIoStop-regel geeft aan dat de functie WdfRequestStopAcknowledge alleen wordt aangeroepen vanuit de functie EvtIoStop callback.

WdfIoQueueFindRequestFailed

De regel WdfIoQueueFindRequestFailed geeft aan dat WdfIoQueueRetrieveFoundRequest of WdfObjectDereference alleen moet worden aangeroepen nadat WdfIoQueueFindRequestFailed STATUS_SUCCESS retourneert .

WdfIoQueueRetrieveFoundRequest

De WdfIoQueueRetrieveFoundRequest-regel geeft aan dat de methode WdfIoQueueRetrieveFoundRequest alleen wordt aangeroepen nadat WdfIoQueueFindRequest wordt aangeroepen en geretourneerd STATUS_SUCCESS en er geen WdfObjectDereference wordt aangeroepen voor dezelfde aanvraag.

WdfIoQueueRetrieveNextRequest

De WdfIoQueueRetrieveNextRequest-regel geeft aan dat WdfIoQueueRetrieveNextRequest niet wordt aangeroepen nadat WdfIoQueueFindRequest is aangeroepen.

WriteReqs

De regel WriteReqs geeft aan dat een schrijfaanvraag niet wordt doorgegeven aan ongepaste KMDF-methoden.

De regelset RequestProcessing selecteren

  1. Selecteer uw stuurprogrammaproject (.vcxProj) in Microsoft Visual Studio. Klik in het Stuurprogramma menu op Statische stuurprogrammaverificatie starten….

  2. Klik op het tabblad Regels . Selecteer onder Regelsetsde optie RequestProcessing.

    Als u de standaardregelset wilt selecteren in een opdrachtpromptvenster voor Visual Studio-ontwikkelaars, geeft u RequestProcessing.sdv op met de optie /check . Voorbeeld:

    msbuild /t:sdv /p:Inputs="/check:RequestProcessing.sdv" mydriver.VcxProj /p:Configuration="Win8 Release" /p:Platform=Win32
    

    Voor meer informatie, zie Static Driver Verifier gebruiken om defecten te vinden in stuurprogramma's en Static Driver Verifier-opdrachten (MSBuild).