Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Verwenden Sie diese Regeln, um sicherzustellen, dass Ihr Treiber die KMDF-DDIs korrekt und ordnungsgemäß verwendet.
In diesem Abschnitt
| Thema | BESCHREIBUNG |
|---|---|
Die BufAfterReqCompletedIoctl-Regel gibt an, dass innerhalb der Rückruffunktion EvtIoDeviceControl der abgerufene E/A-Anforderungspuffer nicht mehr zugegriffen werden kann, nachdem die E/A-Anforderung abgeschlossen wurde. |
|
Die BufAfterReqCompletedIntIoctl-Regel gibt an, dass nach Abschluss einer Anforderung nicht auf den Puffer zugegriffen werden kann (nur innerhalb der Rückruffunktion EvtIoInternalDeviceControl ). Der Puffer wird abgerufen, indem WdfRequestRetrieveOutputBuffer oder WdfRequestRetrieveUnsafeUserOutputBuffer oder WdfRequestRetrieveInputBuffer oder WdfRequestRetrieveUnsafeUserInputBuffer aufgerufen wird. |
|
Die BufAfterReqCompletedIntIoctlA-Regel überprüft, ob nach Abschluss einer Anforderung nicht auf den Puffer zugegriffen werden kann (nur innerhalb des EvtIoInternalDeviceControl-Rückrufs ). Der Puffer wurde durch Aufrufen von WdfRequestRetrieveInputBuffer oder WdfRequestRetrieveOutputBuffer oder WdfRequestRetrieveUnsafeUserInputBuffer oder WdfRequestRetrieveUnsafeUserOutputBuffer abgerufen. |
|
Die BufAfterReqCompletedIoctlA-Regel gibt an, dass innerhalb der Rückruffunktion EvtIoDeviceControl der abgerufene E/A-Anforderungspuffer nach Abschluss der E/A-Anforderung nicht mehr zugegriffen werden kann. |
|
Die BufAfterReqCompletedRead-Regel gibt an, dass innerhalb der EvtIoRead-Rückruffunktion der abgerufene E/A-Anforderungspuffer nicht mehr zugegriffen werden kann, nachdem die E/A-Anforderung abgeschlossen wurde. Es gibt 14 DDIs, die als mögliche Pufferzugriffsmethoden dienen. |
|
Die BufAfterReqCompletedReadA-Regel gibt an, dass innerhalb der EvtIoRead-Rückruffunktion der abgerufene E/A-Anforderungspuffer nach Abschluss der E/A-Anforderung nicht mehr zugegriffen werden kann. Es gibt 14 DDIs, die als mögliche Pufferzugriffsmethoden dienen. |
|
Die BufAfterReqCompletedWrite-Regel gibt an, dass innerhalb der EvtIoWrite-Rückruffunktion der abgerufene E/A-Anforderungspuffer nach Abschluss der E/A-Anforderung nicht mehr zugegriffen werden kann. |
|
Die BufAfterReqCompletedWriteA-Regel gibt an, dass innerhalb der EvtIoWrite-Rückruffunktion der abgerufene E/A-Anforderungspuffer nach Abschluss der E/A-Anforderung nicht mehr zugegriffen werden kann. |
|
Die ChildDeviceInitApi-Regel gibt an, dass die Initialisierungsmethoden des Framework-Geräteobjekts für ein untergeordnetes Gerät aufgerufen werden müssen, bevor der Treiber die WdfDeviceCreate-Methode für das untergeordnete Geräteobjekt aufruft. |
|
Die Regel ControDeviceDeleted legt fest, dass ein PnP-Treiber, wenn er ein Kontrollgeräteobjekt erstellt, dieses in einer der Bereinigungsrückruffunktionen löschen muss, bevor der Treiber entladen wird. |
|
Die ControlDeviceInitAPI-Regel gibt an, dass WdfControlDeviceInitAllocate und alle anderen DDIs für die Geräteobjektinitialisierung, die eine WDFDEVICE_INIT Struktur für das Steuerelementgerät einrichten, aufgerufen werden müssen, bevor WdfDeviceCreate für das Steuerelementgerät aufgerufen werden muss. |
|
Die CtlDeviceFinishInitDeviceAdd-Regel gibt an, dass, wenn ein Treiber ein Kontrollgeräteobjekt in einer EvtDriverDeviceAdd-Rückruffunktion erstellt, er WdfControlFinishInitializing aufrufen muss, nachdem das Gerät erstellt wurde und bevor er die EvtDriverDeviceAdd-Rückruffunktion beendet. Diese Regel gilt nicht für Nicht-PnP-Treiber. |
|
Die CtlDeviceFinishInitDrEntry-Regel gibt an, dass, wenn ein Treiber ein Kontrollgerätobjekt in einer DriverEntry-Rückruffunktion erstellt, WdfControlFinishInitializing aufgerufen werden muss, nachdem das Gerät erstellt wurde und bevor die EvtDriverDeviceAdd-Rückruffunktion beendet wird. Diese Regel gilt nicht für Nicht-PnP-Treiber. |
|
Die DeviceCreateFail-Regel gibt an, dass EVT_WDF_DRIVER_DEVICE_ADD einen Fehlerstatus zurückgibt, wenn der Aufruf von WdfDeviceCreate fehlschlägt. |
|
Die DeviceInitAllocate-Regel gibt an, dass für ein PDO-Gerät oder ein Steuerelementgerätobjekt die Framework-Objektobjektinitialisierungsmethoden WdfPdoInitAllocate oder WdfControlDeviceInitAllocate aufgerufen werden müssen, bevor der Treiber WdfDeviceCreate aufruft. |
|
Für ein FDO-Gerät müssen die Framework-Objektobjektinitialisierungsmethoden und die Framework-FDO-Initialisierungsmethoden aufgerufen werden, bevor der Treiber die WdfDeviceCreate-Methode für das Geräteobjekt aufruft. |
|
Die DoubleDeviceInitFree-Regel gibt an, dass Treiber nicht zweimal die Geräteinitialisierungsstruktur freigeben sollen. |
|
Die DriverCreate-Regel gibt an, dass ein Treiber, der Kernelmodus-Treiberframework (KMDF) verwendet, die WdfDriverCreate-Methode aufrufen muss, um ein Frameworktreiberobjekt aus seiner DriverEntry-Routine zu erstellen. |
|
Die InitFreeDeviceCallback-Regel gibt an, dass ein Treiber WdfDeviceInitFree aufrufen muss, wenn beim Initialisieren eines neuen Framework-Geräteobjekts ein Fehler auftritt und der Treiber die WDFDEVICE_INIT Struktur von einem Aufruf von WdfControlDeviceInitAllocate empfangen hat. |
|
Die InitFreeDeviceCreate-Regel gibt an, dass ein Treiber WdfDeviceInitFree anstelle von WdfDeviceCreate aufrufen muss, wenn ein Fehler in einer der Geräteobjektinitialisierungsmethoden auftritt und wenn der Treiber die WDFDEVICE_INIT Struktur von einem Aufruf von WdfControlDeviceInitAllocate empfangen hat. |
|
Die InitFreeDeviceCreateType2-Regel gibt an, dass ein Treiber WdfDeviceCreate nach dem Aufrufen von WdfDeviceInitFree nicht aufrufen darf. |
|
Die InitFreeDeviceCreateType4-Regel gibt an, dass ein Treiber WdfDeviceInitFree aufrufen muss, wenn beim Aufrufen von WdfDeviceCreate ein Fehler auftritt und der Treiber die WDFDEVICE_INIT Struktur von einem Aufruf von WdfControlDeviceInitAllocate empfangen hat. |
|
Die InitFreeNull-Regel gibt an, dass DDIs, die PWDFDEVICE_INIT empfangen, als Parameter nicht mithilfe eines NULL-Zeigers auf eine WDFDEVICE_INIT-Struktur aufgerufen werden können. |
|
Die MdlAfterReqCompletedIntIoctl-Regel gibt an, dass innerhalb der EvtIoInternalDeviceControl-Rückruffunktion nicht auf die Speicherdeskriptorliste (MDL) zugegriffen werden kann, nachdem die E/A-Anforderung abgeschlossen wurde. |
|
Die MdlAfterReqCompletedIntIoctlA-Regel gibt an, dass innerhalb der EvtIoInternalDeviceControl-Rückruffunktion nicht auf die Speicherdeskriptorliste (MDL) zugegriffen werden kann, nachdem die E/A-Anforderung abgeschlossen wurde. |
|
Die MdlAfterReqCompletedIoctl-Regel gibt an, dass innerhalb der EvtIoDeviceControl-Rückruffunktion nicht auf die Speicherdeskriptorliste (MDL) zugegriffen werden kann, nachdem die E/A-Anforderung abgeschlossen wurde. |
|
Die MdlAfterReqCompletedIoctlA-Regel gibt an, dass innerhalb der EvtIoDeviceControl-Rückruffunktion nicht auf die Speicherdeskriptorliste (MDL) zugegriffen werden kann, nachdem die E/A-Anforderung abgeschlossen wurde. |
|
Die MdlAfterReqCompletedRead-Regel gibt an, dass innerhalb der EvtIoRead-Rückruffunktion nicht auf das abgerufene MDL-Objekt (Memory Descriptor List) zugegriffen werden kann, nachdem die E/A-Anforderung abgeschlossen wurde. |
|
Die MdlAfterReqCompletedReadA-Regel gibt an, dass innerhalb der EvtIoRead-Rückruffunktion das abgerufene MDL-Objekt (Memory Descriptor List) nach Abschluss der E/A-Anforderung nicht mehr zugegriffen werden kann. |
|
Die MdlAfterReqCompletedWrite-Regel gibt an, dass innerhalb der EvtIoWrite-Rückruffunktion auf das abgerufene MDL-Objekt (Memory Descriptor List) nicht zugegriffen werden kann, nachdem die E/A-Anforderung abgeschlossen wurde. |
|
Die MdlAfterReqCompletedWriteA-Regel gibt an, dass innerhalb der EvtIoWrite-Rückruffunktion das abgerufene MDL-Objekt (Memory Descriptor List) nach Abschluss der E/A-Anforderung nicht mehr zugegriffen werden kann. |
|
Die MemAfterReqCompletedIntIoctl-Regel gibt an, dass innerhalb der Rückruffunktion EvtIoInternalDeviceControl nicht auf das Framework-Speicherobjekt zugegriffen werden kann, nachdem die E/A-Anforderung abgeschlossen wurde. |
|
Die MemAfterReqCompletedIntIoctlA-Regel gibt an, dass innerhalb der EvtIoInternalDeviceControl-Rückruffunktion nicht auf das Framework-Speicherobjekt zugegriffen werden kann, nachdem die E/A-Anforderung abgeschlossen wurde. |
|
Die MemAfterReqCompletedIoctl-Regel gibt an, dass innerhalb der Rückruffunktion EvtIoDeviceControl nicht auf das Framework-Speicherobjekt zugegriffen werden kann, nachdem die E/A-Anforderung abgeschlossen wurde. |
|
Die MemAfterReqCompletedIoctlA-Regel gibt an, dass innerhalb der Rückruffunktion EvtIoDeviceControl nicht auf das Framework-Speicherobjekt zugegriffen werden kann, nachdem die E/A-Anforderung abgeschlossen wurde. |
|
Die MemAfterReqCompletedRead-Regel gibt an, dass innerhalb der EvtIoRead-Rückruffunktion nicht auf das Framework-Speicherobjekt zugegriffen werden kann, nachdem die E/A-Anforderung abgeschlossen wurde. |
|
Die MemAfterReqCompletedReadA-Regel gibt an, dass innerhalb der EvtIoRead-Rückruffunktion nicht auf das Framework-Speicherobjekt zugegriffen werden kann, nachdem die E/A-Anforderung abgeschlossen wurde. |
|
Die MemAfterReqCompletedWrite-Regel gibt an, dass innerhalb der EvtIoWrite-Rückruffunktion nicht auf das Framework-Speicherobjekt zugegriffen werden kann, nachdem die E/A-Anforderung abgeschlossen wurde. |
|
Die MemAfterReqCompletedWriteA-Regel gibt an, dass innerhalb der EvtIoWrite-Rückruffunktion nicht auf das Framework-Speicherobjekt zugegriffen werden kann, nachdem die E/A-Anforderung abgeschlossen wurde. |
|
Die NullCheck-Regel überprüft, ob ein NULL-Wert im Treibercode später im Treiber nicht abgeleitet wird. Diese Regel meldet einen Fehler, wenn eine dieser Bedingungen zutrifft:
Bei NullCheck-Regelverstößen werden die relevantesten Codeanweisungen im Ablaufverfolgungs-Ansichtsbereich hervorgehoben. Weitere Informationen zum Arbeiten mit der Berichtsausgabe finden Sie im Bericht "Static Driver Verifier Report" und "Understanding the Trace Viewer". |
|
Die PdoDeviceInitAPI-Regel gibt an, dass WdfPdoInitAllocate und alle anderen Geräteobjektinitialisierungs-DDIs, die eine WDFDEVICE_INIT Struktur für das physische Geräteobjekt (PDO) einrichten, aufgerufen werden müssen, bevor der Treiber WdfDeviceCreate für die PDO aufruft. |
|
Die PdoInitFreeDeviceCallback-Regel gibt an, dass der Treiber WdfDeviceInitFree aufrufen muss, wenn ein Fehler auftritt, wenn der Treiber eine Framework-Objektobjektinitialisierungsfunktion aufruft. |
|
Die PdoInitFreeDeviceCreate-Regel gibt an, dass ein Treiber WdfDeviceInitFree anstelle von WdfDeviceCreate aufrufen muss, wenn ein Fehler in einer der Initialisierungsfunktionen des Geräteobjekts auftritt und wenn der Treiber die WDFDEVICE_INIT Struktur von einem Aufruf von WdfPdoInitAllocate empfangen hat. |
|
Die PdoInitFreeDeviceCreateType2-Regel gibt an, dass ein Treiber WdfDeviceCreate nach dem Aufrufen von WdfDeviceInitFree nicht aufrufen darf. |
|
Die PdoInitFreeDeviceCreateType4-Regel gibt an, dass der Treiber WdfDeviceInitFree aufrufen muss, wenn ein Fehler auftritt, wenn der Treiber WdfDeviceCreate aufruft. |
|
Die ControlDeviceInitAllocate-Regel gibt an, dass der Treiber für ein Steuerelementgerätobjekt die Framework-Device Object Initialization-Methode WdfControlDeviceInitAllocate aufrufen muss, bevor der Treiber WdfDeviceCreate aufruft. |
|
Die InputBufferAPI-Regel gibt an, dass die richtigen DDIs für den Pufferabruf in der EvtIoRead-Rückruffunktionverwendet werden. Innerhalb der EvtIoRead-Rückruffunktion können die folgenden DDIs nicht für den Pufferabruf aufgerufen werden: |
So wählen Sie den DDI-Verwendungsregelsatz 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ätze" die Option "DDIUsage" aus.
Um den Standardregelsatz aus einem Visual Studio-Entwickler-Eingabeaufforderungsfenster auszuwählen, geben Sie DDIUsage.sdv mit der Option "/check " an. Beispiel:
msbuild /t:sdv /p:Inputs="/check:DDIUsage.sdv" mydriver.VcxProj /p:Configuration="Win8 Release" /p:Platform=Win32Weitere Informationen finden Sie unter Verwendung von Static Driver Verifier zur Fehlererkennung in Treibern und Befehle für Static Driver Verifier (MSBuild).