Udostępnij przez


Różnorodny zestaw reguł (NDIS)

Użyj tych reguł, aby sprawdzić, czy sterownik prawidłowo spełnia ogólny zestaw wymagań dotyczących prawidłowej obsługi czasomierzy, operacji wstrzymywania, kluczy, ciągów i powiązań.

W tym dziale

Temat Opis

CancelTimerObject

Reguła CancelTimerObject określa, że NdisSetTimerObject i NdisCancelTimerObject są wywoływane naprzemiennie. Ostatecznym celem jest upewnienie się, że wszystkie czasomierze są anulowane w momencie zakończenia MiniportHaltEx.

MiniportPause_Return

Reguła MiniportPause_Return określa, że funkcja wywołania zwrotnego MiniportPause powinna zwracać tylko NDIS_STATUS_SUCCESS, jeśli operacja wstrzymania została ukończona, lub NDIS_STATUS_PENDING, jeśli sterownik miniportu jest w stanie wstrzymania. Każdy inny zwrócony stan jest nieprawidłowy.

NdisOpenConfigurationEx

Ta reguła sprawdza, czy NdisOpenConfigurationEx i NdisCloseConfiguration są wywoływane na przemian. Ostatecznym celem jest upewnienie się, że uchwyty konfiguracji są zamknięte, gdy MiniportHaltEx kończy działanie.

NdisQueryBindInstanceName

NdisQueryBindInstanceName przydziela pamięć dla ciągu, który określa przyjazną nazwę. Po zakończeniu korzystania z tej pamięci obiekt wywołujący musi wywołać funkcję NdisFreeMemory , aby zwolnić pamięć.

NdisReEnumerateProtocolBindings

Sterowniki protokołów nie mogą wywoływać funkcji NdisReEnumerateProtocolBindings z kontekstu funkcji ProtocolBindAdapterEx lub ProtocolUnbindAdapterEx . Ponadto sterowniki protokołów nie mogą wywoływać parametru NdisReEnumerateProtocolBindings z kontekstu funkcji ProtocolNetPnPEvent , jeśli parametr ProtocolBindingContextprotokołu ProtocolNetPnPEvent nie ma wartości NULL. Jednak sterowniki protokołów mogą wywoływać parametr NdisReEnumerateProtocolBindings z poziomu kontekstu parametru ProtocolNetPnPEvent , jeśli parametr ProtocolBindingContext ma wartość NULL. Wartość NULL ProtocolBindingContext wskazuje, że zdarzenie ma zastosowanie do wszystkich powiązań.

Okresowy czasomierz

Reguła PeriodicTimer określa, że wywołujący NdisCancelTimerObject musi być uruchomiony na poziomie IRQL = PASSIVE_LEVEL, jeśli wartość niezerowa została określona w parametrze MillisecondsPeriod funkcji NdisSetTimerObject. Jeśli parametr MillisecondsPeriod funkcji NdisSetTimerObject wynosił zero, wywołujący NdisCancelTimerObject mogą działać na poziomie IRQL <= DISPATCH_LEVEL.

WriteErrorLog

Reguła WriteErrorLog określa, że jeśli funkcja NdisMAllocateSharedMemory jest wywoływana w funkcji MiniportInitializeEx, sterownik powinien również wywołać NdisWriteErrorLogEntry, jeśli alokacja zakończy się niepowodzeniem.

Aby wybrać zestaw reguł Miscellaneous

  1. Wybierz projekt sterownika (.vcxProj) w programie Microsoft Visual Studio. W menu sterowników kliknij Uruchom Weryfikator Sterowników Statycznych….

  2. Kliknij kartę Reguły . W obszarze Zestawy reguł wybierz pozycję Różne.

    Aby wybrać domyślny zestaw reguł w oknie wiersza polecenia dla deweloperów programu Visual Studio, określ Miscellaneous.sdv z opcją /check. Przykład:

    msbuild /t:sdv /p:Inputs="/check:Miscellaneous.sdv" mydriver.VcxProj /p:Configuration="Win8 Release" /p:Platform=Win32
    

    Aby uzyskać więcej informacji, zobacz Użycie Static Driver Verifier do Znalezienia Defektów w Sterownikach oraz Polecenia Static Driver Verifier (MSBuild).