Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Pomocí těchto pravidel ověřte, že ovladač správně používá DDI služby KMDF.
V této části
| Téma | Popis |
|---|---|
Pravidlo BufAfterReqCompletedIoctl určuje, že v rámci funkce zpětného volání EvtIoDeviceControl nelze přistupovat k vyrovnávací paměti V/V požadavku poté, co je dokončen. |
|
Pravidlo BufAfterReqCompletedIntIoctl určuje, že po dokončení požadavku nelze získat přístup k jeho vyrovnávací paměti (pouze uvnitř funkce zpětného volání EvtIoInternalDeviceControl ). Vyrovnávací paměť se načte voláním WdfRequestRetrieveOutputBuffer nebo WdfRequestRetrieveUnsafeUserOutputBuffer nebo WdfRequestRetrieveInputBuffer nebo WdfRequestRetrieveUnsafeUserInputBuffer. |
|
Pravidlo BufAfterReqCompletedIntIoctlA ověřuje, že po dokončení požadavku není k jeho vyrovnávací paměti možné přistupovat (pouze při zpětném volání EvtIoInternalDeviceControl). Vyrovnávací paměť byla načtena voláním WdfRequestRetrieveInputBuffer nebo WdfRequestRetrieveOutputBuffer nebo WdfRequestRetrieveUnsafeUserInputBuffer nebo WdfRequestRetrieveUnsafeUserOutputBuffer. |
|
Pravidlo BufAfterReqCompletedIoctlA určuje, že v rámci funkce zpětného volání EvtIoDeviceControl nelze přistupovat k vyrovnávací paměti získané z I/O operace po dokončení této operace. |
|
Pravidlo BufAfterReqCompletedRead určuje, že v rámci funkce zpětného volání EvtIoRead nelze po dokončení V/V požadavku načíst vyrovnávací paměť vstupně-výstupních požadavků. Existují 14 DDI, které slouží jako možné metody přístupu k vyrovnávací paměti. |
|
Pravidlo BufAfterReqCompletedReadA určuje, že v rámci funkce zpětného volání EvtIoRead nelze po dokončení V/V požadavku přistupovat k vyrovnávací paměti. Existují 14 DDI, které slouží jako možné metody přístupu k vyrovnávací paměti. |
|
Pravidlo BufAfterReqCompletedWrite specifikuje, že v rámci funkce zpětného volání EvtIoWrite nelze přistupovat k vyrovnávací paměti V/V po dokončení V/V požadavku. |
|
Pravidlo BufAfterReqCompletedWriteA určuje, že v rámci funkce zpětného volání EvtIoWrite nelze přistupovat k vyrovnávací paměti V/V požadavku po jeho dokončení. |
|
Pravidlo ChildDeviceInitApi určuje, že u podřízeného zařízení musí být framework metody inicializace objektu zařízení zavolány předtím, než ovladač zavolá metodu WdfDeviceCreate pro podřízený objekt zařízení. |
|
Pravidlo ControDeviceDeleted určuje, že pokud ovladač PnP vytvoří řídicí objekt zařízení, musí tento objekt být odstraněn v některé z funkcí zpětného volání pro čištění, a to před uvolněním ovladače. |
|
Pravidlo ControlDeviceInitAPI určuje, že WdfControlDeviceInitAllocate a všechny ostatní inicializační DDI objektů zařízení, které nastaví strukturu WDFDEVICE_INIT pro řídicí zařízení, musí být zavolány před WdfDeviceCreate pro řídicí zařízení. |
|
Pravidlo CtlDeviceFinishInitDeviceAdd určuje, že pokud ovladač vytvoří řídicí objekt zařízení ve funkci zpětného volání EvtDriverDeviceAdd, musí po vytvoření zařízení a před ukončením funkce zpětného volání EvtDriverDeviceAdd volat WdfControlFinishInitializing. Toto pravidlo se nevztahuje na ovladače jiného typu než PnP. |
|
Pravidlo CtlDeviceFinishInitDrEntry určuje, že pokud ovladač vytvoří řídicí objekt zařízení ve funkci zpětného volání DriverEntry , musí zavolat WdfControlFinishInitializing po vytvoření zařízení a před ukončením z funkce zpětného volání EvtDriverDeviceAdd . Toto pravidlo se nevztahuje na ovladače jiného typu než PnP. |
|
Pravidlo DeviceCreateFail určuje, že EVT_WDF_DRIVER_DEVICE_ADD vrátí stav chyby, když volání WdfDeviceCreate selže. |
|
Pravidlo DeviceInitAllocate určuje, že pro zařízení PDO nebo řídicí objekt zařízení musí být metody inicializace objektů zařízení WdfPdoInitAllocate nebo WdfControlDeviceInitAllocate zavolány předtím, než ovladač zavolá WdfDeviceCreate. |
|
Pro zařízení FDO musí být zavolány metody inicializace FDO a metody inicializace objektů zařízení architektury před voláním metody WdfDeviceCreate pro objekt zařízení ovladače. |
|
Pravidlo DoubleDeviceInitFree určuje, že ovladače by neměly uvolnit strukturu inicializace zařízení dvakrát. |
|
Pravidlo DriverCreate určuje, že ovladač používající rozhraní KMDF (Kernel Mode Driver Framework) musí volat metodu WdfDriverCreate k vytvoření objektu ovladače architektury z jeho rutiny DriverEntry . |
|
Pravidlo InitFreeDeviceCallback určuje, že ovladač musí volat WdfDeviceInitFree , pokud ovladač při inicializaci nového objektu zařízení rozhraní dojde k chybě, a pokud ovladač obdržel strukturu WDFDEVICE_INIT z volání WdfControlDeviceInitAllocate. |
|
Pravidlo InitFreeDeviceCreate určuje, že ovladač musí volat WdfDeviceInitFree místo WdfDeviceCreate , pokud dojde k chybě v některé z metod inicializace objektu zařízení a pokud ovladač obdržel strukturu WDFDEVICE_INIT z volání WdfControlDeviceInitAllocate. |
|
Pravidlo InitFreeDeviceCreateType2 určuje, že ovladač nesmí volat WdfDeviceCreate po volání WdfDeviceInitFree. |
|
Pravidlo InitFreeDeviceCreateType4 určuje, že ovladač musí volat WdfDeviceInitFree , pokud ovladač zaznamená chybu při volání WdfDeviceCreate a pokud ovladač obdržel strukturu WDFDEVICE_INIT z volání WdfControlDeviceInitAllocate. |
|
Pravidlo InitFreeNull určuje, že DDI přijímající PWDFDEVICE_INIT jako parametr nelze volat pomocí ukazatele NULL na strukturu WDFDEVICE_INIT . |
|
Pravidlo MdlAfterReqCompletedIntIoctl určuje, že v rámci funkce zpětného volání EvtIoInternalDeviceControl nelze po dokončení V/V požadavku získat přístup k seznamu popisovačů paměti (MDL). |
|
Pravidlo MdlAfterReqCompletedIntIoctlA určuje, že v rámci funkce zpětného volání EvtIoInternalDeviceControl nelze po dokončení V/V požadavku získat přístup k seznamu popisovačů paměti (MDL). |
|
Pravidlo MdlAfterReqCompletedIoctl určuje, že v rámci funkce zpětného volání EvtIoDeviceControl nelze po dokončení V/V požadavku získat přístup k seznamu popisovačů paměti (MDL). |
|
Pravidlo MdlAfterReqCompletedIoctlA určuje, že v rámci funkce zpětného volání EvtIoDeviceControl nelze po dokončení V/V požadavku získat přístup k seznamu popisovačů paměti (MDL). |
|
Pravidlo MdlAfterReqCompletedRead určuje, že v rámci funkce zpětného volání EvtIoRead nelze získat přístup k objektu popisovače paměti (MDL) po dokončení V/V požadavku. |
|
Pravidlo MdlAfterReqCompletedReadA určuje, že v rámci funkce zpětného volání EvtIoRead nelze získat přístup k objektu popisovače paměti (MDL) po dokončení V/V požadavku. |
|
Pravidlo MdlAfterReqCompletedWrite určuje, že v rámci funkce zpětného volání EvtIoWrite nelze získat přístup k objektu popisovače paměti (MDL) po dokončení V/V požadavku. |
|
Pravidlo MdlAfterReqCompletedWriteA určuje, že v rámci funkce zpětného volání EvtIoWrite nelze získat přístup k objektu popisovače paměti (MDL) po dokončení V/V požadavku. |
|
Pravidlo MemAfterReqCompletedIntIoctl určuje, že v rámci funkce zpětného volání EvtIoInternalDeviceControl nelze po dokončení V/V požadavku přistupovat k paměťovému objektu architektury. |
|
Pravidlo MemAfterReqCompletedIntIoctlA určuje, že v rámci funkce zpětného volání EvtIoInternalDeviceControl nelze přistupovat k objektu paměti rámce po dokončení V/V požadavku. |
|
Pravidlo MemAfterReqCompletedIoctl určuje, že po dokončení V/V požadavku nelze v rámci funkce zpětného volání EvtIoDeviceControl přistupovat k objektu paměti architektury. |
|
Pravidlo MemAfterReqCompletedIoctlA určuje, že v rámci funkce zpětného volání EvtIoDeviceControl nelze přistupovat k paměťovému objektu prostředí po dokončení V/V požadavku. |
|
Pravidlo MemAfterReqCompletedRead určuje, že v rámci funkce zpětného volání EvtIoRead nelze získat přístup k objektu paměti architektury po dokončení V/V požadavku. |
|
Pravidlo MemAfterReqCompletedReadA určuje, že v rámci funkce zpětného volání EvtIoRead nelze získat přístup k objektu paměti architektury po dokončení V/V požadavku. |
|
Pravidlo MemAfterReqCompletedWrite určuje, že v rámci funkce zpětného volání EvtIoWrite nelze objekt paměti architektury získat přístup po dokončení V/V požadavku. |
|
Pravidlo MemAfterReqCompletedWriteA určuje, že v rámci funkce zpětného volání EvtIoWrite nelze získat přístup k objektu paměti architektury po dokončení V/V požadavku. |
|
Pravidlo NullCheck ověřuje, zda hodnota NULL uvnitř kódu ovladače není později dereferencována. Toto pravidlo hlásí vadu, pokud je splněná některé z těchto podmínek:
V případě porušení pravidel NullCheck jsou v podokně stromu trasování zvýrazněny nejrelevantnější příkazy kódu. Další informace o práci s výstupem sestavy naleznete v tématu Static Driver Verifier Report a Understanding the Trace Viewer. |
|
Pravidlo PdoDeviceInitAPI určuje, že WdfPdoInitAllocate a všechny ostatní DDI pro inicializaci zařízení, které nastavují strukturu WDFDEVICE_INIT pro fyzický objekt zařízení (PDO), musí být volány před voláním ovladačem WdfDeviceCreate pro PDO. |
|
Pravidlo PdoInitFreeDeviceCallback určuje, že ovladač musí volat WdfDeviceInitFree , pokud dojde k chybě při volání jakékoli funkce inicializace objektu zařízení rozhraní. |
|
Pravidlo PdoInitFreeDeviceCreate určuje, že ovladač musí volat WdfDeviceInitFree místo WdfDeviceCreate , pokud dojde k chybě v některé z inicializačních funkcí zařízení a pokud ovladač obdržel strukturu WDFDEVICE_INIT z volání WdfPdoInitAllocate. |
|
Pravidlo PdoInitFreeDeviceCreateType2 určuje, že ovladač nesmí volat WdfDeviceCreate po volání WdfDeviceInitFree. |
|
Pravidlo PdoInitFreeDeviceCreateType4 určuje, že ovladač musí volat WdfDeviceInitFree , pokud dojde k chybě, když ovladač volá WdfDeviceCreate. |
|
Pravidlo ControlDeviceInitAllocate určuje, že pro objekt řídicího zařízení musí ovladač volat metodu inicializace objektu zařízení frameworku WdfControlDeviceInitAllocate předtím, než ovladač volá WdfDeviceCreate. |
|
Pravidlo InputBufferAPI určuje, že správné identifikátory DDI pro načtení vyrovnávací paměti se používají ve funkci zpětného volání EvtIoRead. V rámci funkce zpětného volání EvtIoRead nelze pro načtení vyrovnávací paměti volat následující DDI: |
Výběr sady pravidel využití DDI
Vyberte projekt ovladače (.vcxProj) v aplikaci Microsoft Visual Studio. V nabídce Ovladač klepněte na Spustit statický ověřovatel ovladače....
Klikněte na kartu Pravidla . V části Sady pravidel vyberte DDIUsage.
Pokud chcete vybrat výchozí sadu pravidel z okna příkazového řádku pro vývojáře sady Visual Studio, zadejte DDIUsage.sdv s možností /check . Například:
msbuild /t:sdv /p:Inputs="/check:DDIUsage.sdv" mydriver.VcxProj /p:Configuration="Win8 Release" /p:Platform=Win32Další informace naleznete v tématu Použití statického ověřovače ovladačů k nalezení vad v ovladačích a příkazy MSBuild (Statický ověřovač ovladačů).