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ě dokončí nebo zruší pakety požadavků na vstupně-výstupní operace (IRP).
V této části
| Téma | Popis |
|---|---|
Pravidlo ChangeQueueState určuje, že se ovladač WDF nepokusí změnit stav fronty ze souběžných vláken ani nevolá DDI měnící stav postupně z jednoho vlákna. Funkce zpětného volání změny stavu fronty jsou WdfIoQueueStop, WdfIoQueueStopSynchronously, WdfIoQueuePurge, WdfIoQueuePurgeSynchronously, WdfIoQueueDrain, WdfIoQueueDrainSynchronously, WdfIoQueueStopAndPurge a WdfIoQueueStopAndPurgeSynchronously. Pokud jsou tyto DDI volány, když již probíhá změna stavu fronty, může to způsobit chybové ukončení počítače nebo jeho nereagování. |
|
Pravidlo CompleteCanceledReq určuje, že pokud již byl požadavek zrušen, požadavek již není platný a ovladač by ho neměl dokončit. Při znovu označení žádosti, která byla dříve označena jako zrušitelná, musí ovladač zkontrolovat, že žádost ještě nebyla zrušena. Pokud ovladač tuto kontrolu neprovede, může ovladač dokončit žádost, která byla uvolněna. |
|
Pravidlo DoubleCompletion určuje, že ovladače nesmí dokončit vstupně-výstupní požadavek dvakrát. Následující metody by neměly být volána dvakrát v řádku pro stejný požadavek: WdfRequestComplete, WdfRequestCompleteWithInformation, WdfRequestCompleteWithPriorityBoost. |
|
Pravidlo DoubleCompletionLocal určuje, že ovladače nesmí dokončit vstupně-výstupní požadavek dvakrát. |
|
Pravidlo EvtIoStopCancel určuje, že v rámci funkce zpětného volání EvtIoStop ovladač volá jednu z následujících metod pro vstupně-výstupní požadavky, které nelze zrušit. |
|
Pravidlo EvtIoStopCompleteOrStopAck určuje, že v rámci funkce zpětného volání EvtIoStop ovladač volá jednu z následujících metod pro každý vstupně-výstupní požadavek, který je prezentován rozhraním. Pokud to neuděláte, ovladač může systému zablokovat vstup do jiného nižšího stavu napájení. |
|
Pravidlo EvtSurpriseRemoveNoSuspendQueue určuje, že ovladače WDF by neměly vypustit, zastavit nebo vyprázdnit frontu pomocí funkce zpětného volání EvtDeviceSurpriseRemoval. Místo toho by se měly používat zpětné volací funkce V/V, které jsou řízeny samostatně. Funkce zpětného volání EvtDeviceSurpriseRemoval není synchronizovaná s cestou vypínání. |
|
Pravidlo FileObjectConfigured určuje, že volání metody WdfRequestGetFileObject předchází volání WdfDeviceInitSetFileObjectConfig. |
|
Pravidlo InternalIoctlReqs určuje, že interní požadavky IOCTL nejsou předány nevhodným rozhraním pro odesílání požadavků ovladačů zařízení (DDI) používaných KMDF. |
|
Pravidlo InvalidReqAccess určuje, že po dokončení nebo zrušení nebudou požadavky přístupné. Toto pravidlo se může překrývat s jinými pravidly, jako jsou pravidla, která kontrolují dvojité dokončení, nebo pravidla, která kontrolují požadavky označené dvakrát jako stornovatelné. |
|
Pravidlo InvalidReqAccessLocal určuje, že po dokončení nebo zrušení nejsou místně vytvořené požadavky přístupné. Toto pravidlo se může překrývat s jinými pravidly, například s pravidly, která kontrolují dvojí dokončení, nebo s pravidly, která kontrolují, zda nebyly požadavky dvakrát označeny jako zrušitelné. |
|
Pravidlo IoctlReqs určuje, že požadavky IOCTL nesmí být předány nevhodným požadavkům KMDF nebo odesílat rozhraní ovladačů zařízení (DDI). |
|
Pravidlo MarkCancOnCancReqLocal určuje, že metoda WdfRequestMarkCancelable nemůže být volána dvakrát po sobě na stejném V/V požadavku. |
|
Pravidlo NoIoQueuePurgeSynchronously ověřuje, že ovladače WDF nevolají funkce WdfIoQueueStopSynchronously, WdfIoQueueDrainSynchronously, WdfIoQueueStopAndPurgeSynchronously nebo WdfIoQueuePurgeSynchronously z následujících objektových funkcí zpětného volání události fronty EvtIO: |
|
Pravidlo OutputBufferAPI určuje, že správné identifikátory DDI pro načítání vyrovnávací paměti se používají ve funkci zpětného volání EvtIoWrite . V rámci funkce zpětného volání EvtIoWrite nelze pro načtení obsahu vyrovnávací paměti volat následující DDIs: |
|
Pravidlo ReadReqs určuje, že požadavky na čtení nejsou předány nevhodným metodám KMDF. |
|
Pravidlo ReqCompletionRoutine určuje, že rutina dokončení musí být nastavena před odesláním požadavku do V/V cíle. |
|
Pravidlo ReqDelete určuje, že žádosti vytvořené ovladačem nejsou předány funkcím WdfRequestCompleteXxx . Místo toho by se žádost měla po dokončení odstranit. |
|
Pravidlo ReqIsCancOnCancReq určuje, že metodu WdfRequestIsCanceled lze volat pouze v požadavku, který není označen jako stornoovatelný. |
|
Pravidlo ReqMarkCancelableSend určuje, že požadavky předávané ovladačem nejsou označené jako stornoovatelné voláním WdfRequestMarkCancelable. |
|
Pravidlo DeferredRequestCompleted určuje, že pro nefiltrovaný ovladač musí být každý požadavek předaný výchozí vstupně-výstupní frontě ovladače dokončen, pokud není žádost odložena nebo předána, nebo pokud je volána WdfRequestStopAcknowledge . |
|
Pravidlo RequestFormattedValid určuje, že ovladač formátuje všechny požadavky s výjimkou požadavku WDF_REQUEST_SEND_OPTION_SEND_AND_FORGET před jejich odesláním do V/V cíle. |
|
Pravidlo RequestGetStatusValid, které specifikuje, že funkce WdfRequestGetStatus by měla být volána pro požadavek v jedné z následujících situací:
|
|
Pravidlo RequestSendAndForgetNoFormatting ověřuje, že ovladač neformátuje požadavek pomocí funkcí formátování I/O cíle před odesláním do cíli I/O s možností odeslání WDF_REQUEST_SEND_OPTION_SEND_AND_FORGET. |
|
Pravidlo RequestSendAndForgetNoFormatting2 ověřuje, že ovladač neformátuje žádost pomocí funkce formátování vstupně-výstupního cíle před jejím odesláním do vstupně-výstupního cíle s možností WDF_REQUEST_SEND_OPTION_SEND_AND_FORGET. |
|
Pravidlo StopAckWithinEvtIoStop určuje, že funkce WdfRequestStopAcknowledge je volána pouze z evtIoStop callback function. |
|
Pravidlo WdfIoQueueFindRequestFailed určuje, že WdfIoQueueRetrieveFoundRequest nebo WdfObjectDereference by mělo být volána pouze poté, co WdfIoQueueFindRequestFailed vrátí STATUS_SUCCESS. |
|
Pravidlo WdfIoQueueRetrieveFoundRequest určuje, že WdfIoQueueRetrieveFoundRequest metoda je volána pouze poté, co WdfIoQueueFindRequest je volán a vrácen STATUS_SUCCESS a žádný WdfObjectDereference se volá na stejném požadavku. |
|
Pravidlo WdfIoQueueRetrieveNextRequest určuje, že WdfIoQueueRetrieveNextRequest není volán po zavolání WdfIoQueueFindRequest . |
|
Pravidlo WriteReqs určuje, že požadavek na zápis není předán nevhodným metodám KMDF. |
Výběr sady pravidel RequestProcessing
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 RequestProcessing.
Pokud chcete vybrat výchozí sadu pravidel z okna příkazového řádku vývojáře sady Visual Studio, zadejte RequestProcessing.sdv s možností /check . Například:
msbuild /t:sdv /p:Inputs="/check:RequestProcessing.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čů).