Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Użyj tych reguł, aby sprawdzić, czy sterownik poprawnie ukończy lub anuluje pakiety żądań we/wy (IRP).
W tym dziale
| Temat | Opis |
|---|---|
Reguła ChangeQueueState określa, że sterownik WDF nie próbuje zmienić stanu kolejki z równoczesnych wątków ani nie wywołuje po kolei zmieniających stan funkcji DDI w obrębie tego samego wątku. Funkcje wywołania zwrotnego zmiany stanu kolejki to WdfIoQueueStop, WdfIoQueueStopSynchronously, WdfIoQueuePurge, WdfIoQueuePurgeSynchronously, WdfIoQueueDrain, WdfIoQueueDrainSynchronously, WdfIoQueueStopAndPurge i WdfIoQueueStopAndPurgeSynchronously. Jeśli te identyfikatory DDI są wywoływane, gdy zmiana stanu kolejki jest już w toku, może to spowodować awarię komputera lub jego brak reakcji. |
|
Reguła CompleteCanceledReq określa, że jeśli żądanie zostało już anulowane, żądanie nie jest już prawidłowe i sterownik nie powinien go ukończyć. Podczas gdy sterownik usuwa status żądania, które zostało wcześniej oznaczone jako możliwe do anulowania, musi sprawdzić, czy żądanie nie zostało jeszcze anulowane. Jeśli sterownik nie dokona tego sprawdzenia, sterownik może ukończyć żądanie, które zostało zwolnione. |
|
Reguła DoubleCompletion określa, że sterowniki nie mogą dwukrotnie ukończyć żądania we/wy. Następujące metody nie powinny być wywoływane dwa razy pod rząd dla tego samego żądania: WdfRequestComplete, WdfRequestCompleteWithInformation, WdfRequestCompleteWithPriorityBoost. |
|
Reguła DoubleCompletionLocal określa, że sterowniki nie mogą dwukrotnie ukończyć żądania we/wy. |
|
Reguła EvtIoStopCancel określa, że w funkcji wywołania zwrotnego EvtIoStop sterownik wywołuje jedną z następujących metod dla żądań we/wy, które nie można anulować. |
|
Reguła EvtIoStopCompleteOrStopAck określa, że w funkcji wywołania zwrotnego EvtIoStop sterownik wywołuje jedną z następujących metod dla każdego żądania I/O przedstawionego przez konstrukcję. Jeśli nie zostanie to zrobione, sterownik może zablokować systemowi wejście do innego niższego stanu zasilania. |
|
Reguła EvtSurpriseRemoveNoSuspendQueue określa, że sterowniki WDF nie powinny opróżniać, zatrzymywać ani czyścić kolejki z funkcji wywołania zwrotnego EvtDeviceSurpriseRemoval, zamiast tego należy używać wcześniej zarządzanych funkcji wywołania zwrotnego we/wy. Funkcja wywołania zwrotnego EvtDeviceSurpriseRemoval nie jest zsynchronizowana ze ścieżką wyłączania zasilania. |
|
Reguła FileObjectConfigured określa, że wywołanie metody WdfRequestGetFileObject jest poprzedzone wywołaniem obiektu WdfDeviceInitSetFileObjectConfig. |
|
Reguła InternalIoctlReqs określa, że wewnętrzne żądania IOCTL nie są przekazywane do nieodpowiednich interfejsów sterowników urządzeń KMDF (DDIs). |
|
Reguła InvalidReqAccess określa, że żądania nie są dostępne po zakończeniu lub anulowaniu. Ta reguła może nakładać się na inne reguły, takie jak reguły, które sprawdzają pod kątem podwójnego ukończenia, lub reguły sprawdzające, czy żądania zostały oznaczone jako anulowane dwa razy. |
|
Reguła InvalidReqAccessLocal określa, że żądania utworzone lokalnie nie są dostępne po zakończeniu lub anulowaniu. Ta reguła może nakładać się na inne reguły, takie jak reguły, które sprawdzają pod kątem podwójnego ukończenia, lub reguły sprawdzające, czy żądania zostały oznaczone jako anulowane dwa razy. |
|
Reguła IoctlReqs określa, że żądania IOCTL nie mogą być przekazywane do nieodpowiednich interfejsów żądań KMDF ani interfejsów wysyłania sterowników urządzeń (DDIs). |
|
Reguła MarkCancOnCancReqLocal określa, że metoda WdfRequestMarkCancelable nie może być wywoływana dwa razy z rzędu w tym samym żądaniu we/wy. |
|
Reguła NoIoQueuePurgeSynchronously sprawdza, czy sterowniki WDF nie wywołują funkcji WdfIoQueueStopSynchronously, WdfIoQueueDrainSynchronously, WdfIoQueueStopAndPurgeSynchronously lub WdfIoQueuePurgeSynchronously z następujących funkcji wywołań zwrotnych zdarzeń obiektu kolejki EvtIO: |
|
Reguła OutputBufferAPI określa, że odpowiednie DDI do wywoływania bufora są używane w funkcji callback EvtIoWrite. W ramach funkcji wywołania zwrotnego EvtIoWrite, następujące DDI nie mogą być wywoływane do pobierania buforu: |
|
Reguła ReadReqs określa, że żądania odczytu nie są przekazywane do nieodpowiednich metod kmDF. |
|
Reguła ReqCompletionRoutine określa, że należy ustawić procedurę uzupełniania przed wysłaniem żądania do obiektu docelowego we/wy. |
|
Reguła ReqDelete określa, że żądania utworzone przez sterownik nie są przekazywane do funkcji WdfRequestCompleteXxx . Zamiast tego żądanie powinno zostać usunięte po zakończeniu. |
|
Reguła ReqIsCancOnCancReq określa, że metodę WdfRequestIsCanceled można wywołać tylko na żądanie, które nie jest oznaczone jako możliwe do anulowania. |
|
Reguła ReqMarkCancelableSend określa, że żądania przekazywane przez sterownik nie są oznaczone jako anulowalne przez wywołanie elementu WdfRequestMarkCancelable. |
|
Reguła DeferredRequestCompleted określa, że dla sterownika bez filtra każde żądanie przedstawione do domyślnej kolejki I/O sterownika musi zostać ukończone, chyba że zostanie ono odroczone lub przekazane, albo jeżeli wywołana jest funkcja WdfRequestStopAcknowledge. |
|
Reguła RequestFormattedValid określa, że sterownik formatuje wszystkie żądania, z wyjątkiem żądania WDF_REQUEST_SEND_OPTION_SEND_AND_FORGET, zanim wyśle je do celu we/wy. |
|
Reguła RequestGetStatusValid określająca, że element WdfRequestGetStatus powinien być wywoływany dla żądania w jednej z następujących sytuacji:
|
|
Reguła RequestSendAndForgetNoFormatting sprawdza, czy sterownik nie formatuje żądania przy użyciu funkcji formatowania celów I/O przed wysłaniem go do celu I/O z opcją wysyłki WDF_REQUEST_SEND_OPTION_SEND_AND_FORGET. |
|
Reguła RequestSendAndForgetNoFormatting2 sprawdza, czy sterownik nie formatuje żądania za pomocą funkcji formatowania celów we/wy przed jego wysłaniem do celu we/wy z opcją WDF_REQUEST_SEND_OPTION_SEND_AND_FORGET. |
|
Reguła StopAckWithinEvtIoStop określa, że funkcja WdfRequestStopAcknowledge jest wywoływana tylko z poziomu funkcji wywołania zwrotnego EvtIoStop. |
|
Reguła WdfIoQueueFindRequestFailed określa, że funkcja WdfIoQueueRetrieveFoundRequest lub WdfObjectDereference powinna być wywoływana tylko po zwracaniu wartości WdfIoQueueFindRequestFailed STATUS_SUCCESS. |
|
Reguła WdfIoQueueRetrieveFoundRequest określa, że metoda WdfIoQueueRetrieveFoundRequest jest wywoływana tylko po wywołaniu metody WdfIoQueueFindRequest i zwracaniu STATUS_SUCCESS i nie wywołano metody WdfObjectDereference w tym samym żądaniu. |
|
Reguła WdfIoQueueRetrieveNextRequest określa, że WdfIoQueueRetrieveNextRequest nie jest wywoływany po wywołaniu WdfIoQueueFindRequest. |
|
Reguła WriteReqs określa, że żądanie zapisu nie jest przekazywane do nieodpowiednich metod KMDF. |
Aby wybrać zestaw reguł RequestProcessing
Wybierz projekt sterownika (.vcxProj) w programie Microsoft Visual Studio. W menu sterowników kliknij Uruchom Weryfikator Sterowników Statycznych….
Kliknij kartę Reguły . W obszarze Zestawy reguł wybierz pozycję RequestProcessing.
Aby wybrać domyślny zestaw reguł w oknie wiersza polecenia dla deweloperów programu Visual Studio, określ RequestProcessing.sdv opcją /check. Na przykład:
msbuild /t:sdv /p:Inputs="/check:RequestProcessing.sdv" mydriver.VcxProj /p:Configuration="Win8 Release" /p:Platform=Win32Aby uzyskać więcej informacji, zobacz Użycie Static Driver Verifier do Znalezienia Defektów w Sterownikach oraz Polecenia Static Driver Verifier (MSBuild).