Freigeben über


Warnungsregelsatz (KMDF)

Verwenden Sie diese Regeln, um zu überprüfen, ob Ihr Treiber IRPs in verschiedenen Kontexten ordnungsgemäß verarbeiten kann und die von Microsoft empfohlenen bewährten Methoden befolgt.

In diesem Abschnitt

Thema BESCHREIBUNG

DeferredRequestCompleted

Die DeferredRequestCompleted-Regel gibt an, dass die Anforderung in einer Rückruffunktion abgeschlossen werden muss, wenn eine E/A-Anforderung, die an die Standard-E/A-Warteschlange eines Treibers gesendet wird, nicht in der Rückruffunktion für die verzögerte Verarbeitung abgeschlossen werden muss, es sei denn, die Anforderung wird weitergeleitet und an das Framework übermittelt, oder es sei denn, die WdfRequestStopAcknowledge-Methode wird aufgerufen.

DriverAttributeChanged

Die DriverAttributeChanged-Regel gibt an, dass ein Treiber die Ausführungsebene oder den Synchronisierungsbereich eines KMDF-Treibers nicht ändern darf.

DrvAckIoStop

Die DrvAckIoStop-Regel überprüft, ob der Treiber über ausstehende Anforderungen informiert ist, während die energieverwaltete Warteschlange heruntergefahren wird und der Treiber die ausstehenden Anforderungen entsprechend bestätigt, abschließt oder abbricht. Bei selbstverwalteten E/A-Anforderungen sollte der Treiber diese Anforderungen auch ordnungsgemäß von seiner EvtDeviceSelfManagedIoSuspend-Funktion verarbeiten. Ein Treiber, der diese Anforderungen während eines Herunterfahrens nicht verarbeitet, verursacht die Fehlerüberprüfung 0x9F: DRIVER_POWER_STATE_FAILURE.

EvtIoResumeGetParam

Die EvtIoResumeGetParam-Regel gibt an, dass WdfRequestGetParameters innerhalb der Rückruffunktion EvtIoResumeGetParam nicht aufgerufen wird.

EvtIoStopGetParam

Die EvtIoStopGetParam-Regel überprüft, ob WdfRequestGetParameters innerhalb des EvtIoStop-Rückrufs nicht aufgerufen wird.

EvtIoStopResume

Die EvtIoStopResume-Regel gibt an, dass, wenn ein Treiber eine EvtIoStop-Rückruffunktion registriert und dann WdfRequestStopAcknowledge mit dem Requeue-Parameter gleich FALSE aufruft, der Treiber eine EvtIoResume-Rückruffunktion registrieren muss. Das Framework übermittelt Anforderungen an die Rückruffunktion EvtIoResume , wenn das Gerät erneut in den D0-Zustand wechselt.

EvtSurpriseRemoveNoRequestComplete

Die EvtSurpriseRemoveNoRequestComplete-Regel gibt an, dass WDF-Treiber Anforderungen vom EvtDeviceSurpriseRemoval-Rückruf nicht abschließen sollten, sondern stattdessen selbstverwaltete E/A-Rückruffunktionen verwendet werden sollen. Der EvtDeviceSurpriseRemoval-Rückruf wird nicht mit dem Powerdownpfad synchronisiert.

FDOPowerPolicyOwnerAPI

Die FDOPowerPolicyOwnerAPI-Regel gibt an, dass die Methoden WdfDeviceInitSetPowerPolicyEventCallbacks, WdfDeviceAssignS0IdleSettings und WdfDeviceAssignSxWakeSettings nur auf den Ausführungspfaden aufgerufen werden können, bei denen der Treiber ein Energierichtlinienbesitzer ist. SDV gibt eine Warnung für diese Regel aus.

NoCancelFromEvtSurpriseRemove

Die NoCancelFromEvtSurpriseRemove-Regel gibt an, dass WDF-Treiber Anforderungen von der Rückruffunktion EvtDeviceSurpriseRemoval nicht abbrechen dürfen, sondern stattdessen selbstverwaltete E/A-Rückruffunktionen verwendet werden sollen. Die Rückruffunktion EvtDeviceSurpriseRemoval ist nicht mit dem Powerdownpfad synchronisiert.

PagedCodeAtD0

Die PagedCodeAtD0-Regel gibt an, dass ein Treiber Code nicht als auslagerungsfähig in Rückruffunktionen markieren darf, die sich im Power-up-Codepfad befinden.

ParentObjectCheck

Die ParentObjectCheck-Regel gibt an, dass der Treiber WdfMemoryCreate aufrufen soll, indem ein übergeordnetes Objekt mithilfe einer WDF_OBJECT_ATTRIBUTES-Struktur angegeben wird. Wenn der Treiber kein übergeordnetes Objekt für das Frameworkspeicherobjekt festlegt, legt das Framework den Treiber als übergeordnetes Standardobjekt fest, sodass es solange das Frameworkspeicherobjekt nicht explizit löscht, im Arbeitsspeicher verbleibt, bis das Treiberobjekt entladen wird.

ReqNotCanceledLocal

Die ReqNotCanceledLocal-Regel gibt an, dass die WdfRequestUnmarkCancelable-Methode für die E/A-Anforderung aufgerufen werden muss, wenn eine als abbruchbar markierte Anforderung in einer Standardmäßigen E/A-Rückruffunktion abgeschlossen wird. Die E/A-Anforderung muss abgeschlossen werden, es sei denn, die Anforderung wird abgebrochen, bevor sie WdfRequestUnmarkCancelable aufruft.

ReqSendFail

Die ReqSendFail-Regel gibt an, dass ein Treiber die richtige Vervollständigung status festlegen muss, wenn die WdfRequestSend-Methode möglicherweise fehlschlägt.

RequestCompletedLocal

Die RequestCompletedLocal-Regel gibt an, dass es ein Problem mit der Anforderungsvervollständigung im Code des Treibers geben kann, wenn eine E/A-Anforderung in keiner der Rückruffunktionen EvtIoDefault, EvtIoDeviceControl,EvtIoDeviceControl und WdfRequestMarkCancelable nicht für die Anforderung innerhalb der Rückruffunktion aufgerufen wurde.

RequestForUrbXrb

Wenn der Clienttreiber WdfUsbTargetDeviceCreateWithParameters aufruft und die Clientvertragsversion USBD_CLIENT_CONTRACT_VERSION_602 in der WDF_USB_DEVICE_CREATE_CONFIG-Struktur angibt (um die neuen Funktionen des USB-Treiberstapels für Windows 8 zu verwenden), würden DDIs, die intern eine URB verwenden, nur URB-Kontext verwenden, wenn eine der folgenden Voraussetzungen zutrifft:

SyncReqSend

Die SyncReqSend-Regel gibt an, dass alle synchronen Sendeanforderungen mithilfe synchron-spezifischer KMDF-Gerätetreiberschnittstellenmethoden ausgeführt werden und dass für die Methoden ein Timeoutwert ohne Zero festgelegt ist.

SyncReqSend2

Die SyncReqSend2-Regel gibt an, dass für synchrone Anforderungsvorgänge ein Timeoutwert ohne Zero festgelegt ist.

So wählen Sie den Warnungsregelsatz 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 Warnung aus.

    Um den Standardregelsatz aus einem Visual Studio-Entwicklereingabeaufforderungsfenster auszuwählen, geben Sie Warning.sdv mit der Option /check an. Beispiel:

    msbuild /t:sdv /p:Inputs="/check:Warning.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).