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 prawidłowo używa funkcji DDI KMDF.
W tym dziale
| Temat | Opis |
|---|---|
Reguła BufAfterReqCompletedIoctl określa, że w funkcji wywołania zwrotnego EvtIoDeviceControl nie można uzyskać dostępu do pobranego bufora żądania I/O po zakończeniu żądania we/wy. |
|
Reguła BufAfterReqCompletedIntIoctl określa, że po zakończeniu żądania nie można uzyskać dostępu do buforu (tylko wewnątrz funkcji wywołania zwrotnego EvtIoInternalDeviceControl ). Bufor jest pobierany przez wywołanie funkcji WdfRequestRetrieveOutputBuffer lub WdfRequestRetrieveUnsafeUserOutputBuffer lub WdfRequestRetrieveInputBuffer lub WdfRequestRetrieveUnsafeUserInputBuffer. |
|
Reguła BufAfterReqCompletedIntIoctlA sprawdza, czy po zakończeniu żądania nie można uzyskać dostępu do jego bufora (dotyczy to tylko wywołania zwrotnego EvtIoInternalDeviceControl). Bufor został pobrany przez wywołanie funkcji WdfRequestRetrieveInputBuffer lub WdfRequestRetrieveOutputBuffer lub WdfRequestRetrieveUnsafeUserInputBuffer lub WdfRequestRetrieveUnsafeUserOutputBuffer. |
|
Reguła BufAfterReqCompletedIoctlA określa, że w funkcji zwrotnej EvtIoDeviceControl nie można uzyskać dostępu do bufora żądania I/O po zakończeniu tego żądania. |
|
Reguła BufAfterReqCompletedRead określa, że w funkcji wywołania zwrotnego EvtIoRead nie można uzyskać dostępu do pobranego buforu żądania I/O po zakończeniu przetwarzania żądania I/O. Istnieje 14 DDIs, które służą jako potencjalne metody dostępu do bufora. |
|
Reguła BufAfterReqCompletedReadA określa, że w funkcji wywołania zwrotnego EvtIoRead nie można uzyskać dostępu do buforu żądania we/wy pobranego po zakończeniu żądania we/wy. Występuje 14 interfejsów DDI, które mogą pełnić funkcje metody dostępu do buforu. |
|
Reguła BufAfterReqCompletedWrite określa, że w funkcji callbacku EvtIoWrite nie można uzyskać dostępu do buforu żądania I/O pobranego po zakończeniu żądania. |
|
Reguła BufAfterReqCompletedWriteA określa, że w funkcji wywołania zwrotnego EvtIoWrite nie można uzyskać dostępu do buforu I/O zwracanego po zakończeniu żądania I/O. |
|
Reguła ChildDeviceInitApi określa, że dla urządzenia podrzędnego metody inicjowania obiektu urządzenia frameworku muszą być wywoływane przed tym, jak sterownik wywoła metodę WdfDeviceCreate dla obiektu urządzenia podrzędnego. |
|
Reguła ControDeviceDeleted określa, że jeśli sterownik PnP tworzy obiekt urządzenia sterującego, sterownik musi usunąć obiekt urządzenia sterującego w jednej z funkcji wywołania zwrotnego oczyszczania przed zwolnieniem sterownika. |
|
Reguła ControlDeviceInitAPI określa, że WdfControlDeviceInitAllocate i wszystkie inne identyfikatory DDI inicjowania obiektów urządzenia, które skonfigurowały strukturę WDFDEVICE_INIT dla urządzenia sterującego, muszą być wywoływane przed WdfDeviceCreate dla urządzenia sterującego. |
|
Reguła CtlDeviceFinishInitDeviceAdd precyzuje, że jeśli sterownik tworzy obiekt urządzenia sterującego w funkcji wywołania zwrotnego EvtDriverDeviceAdd, musi wywołać metodę WdfControlFinishInitializing po utworzeniu urządzenia i przed zakończeniem pracy funkcji wywołania zwrotnego EvtDriverDeviceAdd. Reguła ta nie dotyczy sterowników innych niż PnP. |
|
Reguła CtlDeviceFinishInitDrEntry określa, że jeśli sterownik tworzy obiekt urządzenia sterującego w funkcji wywołania zwrotnego DriverEntry , musi wywołać metodę WdfControlFinishInitializing po utworzeniu urządzenia i przed wyjściem z funkcji EvtDriverDeviceAdd wywołania zwrotnego. Ta reguła nie dotyczy sterowników nie-PnP. |
|
Reguła DeviceCreateFail określa, że EVT_WDF_DRIVER_DEVICE_ADD zwraca stan błędu, gdy wywołanie funkcji WdfDeviceCreate kończy się niepowodzeniem. |
|
Reguła DeviceInitAllocate określa, że dla urządzenia PDO lub obiektu urządzenia sterującego metody inicjowania obiektu urządzenia struktury WdfPdoInitAllocate lub WdfControlDeviceInitAllocate muszą być wywoływane przed wywołaniem sterownika WdfDeviceCreate. |
|
W przypadku urządzenia FDO, metody inicjalizacji obiektu urządzenia struktury oraz metody inicjalizacji FDO w ramach struktury muszą być wywoływane przed wywołaniem przez sterownik metody WdfDeviceCreate dla obiektu urządzenia. |
|
Reguła DoubleDeviceInitFree określa, że sterowniki nie powinny dwukrotnie zwalniać struktury inicjowania urządzenia. |
|
Reguła DriverCreate określa, że sterownik używający struktury sterowników trybu jądra (KMDF) musi wywołać metodę WdfDriverCreate , aby utworzyć obiekt sterownika struktury z poziomu procedury DriverEntry . |
|
Reguła InitFreeDeviceCallback określa, że sterownik musi wywołać element WdfDeviceInitFree , jeśli sterownik napotka błąd podczas inicjowania nowego obiektu urządzenia struktury, a jeśli sterownik otrzymał strukturę WDFDEVICE_INIT z wywołania do WdfControlDeviceInitAllocate. |
|
Reguła InitFreeDeviceCreate określa, że sterownik musi wywołać metodę WdfDeviceInitFree zamiast WdfDeviceCreate , jeśli wystąpi błąd w jednej z metod inicjowania obiektu urządzenia i jeśli sterownik odebrał strukturę WDFDEVICE_INIT z wywołania do WdfControlDeviceInitAllocate. |
|
Reguła InitFreeDeviceCreateType2 określa, że sterownik nie może wywoływać funkcji WdfDeviceCreate po wywołaniu elementu WdfDeviceInitFree. |
|
Reguła InitFreeDeviceCreateType4 określa, że sterownik musi wywołać metodę WdfDeviceInitFree , jeśli sterownik napotka błąd podczas wywoływania funkcji WdfDeviceCreate , a jeśli sterownik otrzymał strukturę WDFDEVICE_INIT z wywołania funkcji WdfControlDeviceInitAllocate. |
|
Reguła InitFreeNull określa, że identyfikatory DDI odbierające PWDFDEVICE_INIT jako parametr nie mogą być wywoływane przy użyciu wskaźnika NULL do struktury WDFDEVICE_INIT . |
|
Reguła MdlAfterReqCompletedIntIoctl określa, że w ramach funkcji wywołania zwrotnego EvtIoInternalDeviceControl nie można uzyskać dostępu do listy deskryptorów pamięci (MDL) po zakończeniu żądania we/wy. |
|
Reguła MdlAfterReqCompletedIntIoctlA określa, że wewnątrz funkcji EvtIoInternalDeviceControl nie można uzyskać dostępu do listy deskryptorów pamięci (MDL) po zakończeniu żądania we/wy. |
|
Reguła MdlAfterReqCompletedIoctl określa, że w funkcji wywołania zwrotnego EvtIoDeviceControl nie można uzyskać dostępu do listy deskryptorów pamięci (MDL) po zakończeniu żądania we/wy. |
|
Reguła MdlAfterReqCompletedIoctlA określa, że w funkcji wywołania zwrotnego EvtIoDeviceControl nie można uzyskać dostępu do listy deskryptorów pamięci (MDL) po zakończeniu żądania I/O. |
|
Reguła MdlAfterReqCompletedRead określa, że w funkcji wywołania zwrotnego EvtIoRead nie można uzyskać dostępu do obiektu listy deskryptorów pamięci (MDL) pobranego po zakończeniu żądania we/wy. |
|
Reguła MdlAfterReqCompletedReadA określa, że w funkcji wywołania zwrotnego EvtIoRead nie można uzyskać dostępu do obiektu MDL (listy deskryptorów pamięci) po zakończeniu żądania I/O. |
|
Reguła MdlAfterReqCompletedWrite określa, że w funkcji wywołania zwrotnego EvtIoWrite nie można uzyskać dostępu do obiektu deskryptora pamięci (MDL) pobranego po zakończeniu żądania we/wy. |
|
Reguła MdlAfterReqCompletedWriteA określa, że w funkcji zwrotnej EvtIoWrite nie można uzyskać dostępu do obiektu deskryptora pamięci (MDL) pobranego po zakończeniu żądania I/O. |
|
Reguła MemAfterReqCompletedIntIoctl określa, że w funkcji wywołania zwrotnego EvtIoInternalDeviceControl nie można uzyskać dostępu do obiektu pamięci frameworka po zakończeniu żądania I/O. |
|
Reguła MemAfterReqCompletedIntIoctlA określa, że w funkcji wywołania zwrotnego EvtIoInternalDeviceControl nie można uzyskać dostępu do obiektu pamięci frameworku po zakończeniu żądania we/wy. |
|
Reguła MemAfterReqCompletedIoctl określa, że w funkcji zwrotnej EvtIoDeviceControl nie można uzyskać dostępu do obiektu pamięci frameworka po zakończeniu żądania we/wy. |
|
Reguła MemAfterReqCompletedIoctlA określa, że w funkcji wywołania zwrotnego EvtIoDeviceControl nie można uzyskać dostępu do obiektu pamięci frameworka po zakończeniu żądania we/wy. |
|
Reguła MemAfterReqCompletedRead określa, że w funkcji wywołania zwrotnego EvtIoRead nie można uzyskać dostępu do obiektu pamięci struktury po zakończeniu żądania we/wy. |
|
Reguła MemAfterReqCompletedReadA określa, że w funkcji wywołania zwrotnego EvtIoRead nie można uzyskać dostępu do obiektu pamięci frameworku po zakończeniu żądania we/wy. |
|
Reguła MemAfterReqCompletedWrite określa, że w funkcji wywołania zwrotnego EvtIoWrite nie można uzyskać dostępu do obiektu pamięci frameworka po zakończeniu żądania we/wy. |
|
Reguła MemAfterReqCompletedWriteA określa, że w funkcji EvtIoWrite nie można uzyskać dostępu do obiektu pamięci platformy po ukończeniu żądania I/O. |
|
Reguła NullCheck weryfikuje, czy wartość NULL wewnątrz kodu sterownika nie zostanie później wyłuszona w sterowniku. Ta reguła zgłasza usterkę, jeśli jeden z tych warunków jest spełniony:
W przypadku naruszeń reguły NullCheck najistotniejsze instrukcje kodu są wyróżnione w panelu drzewa śledzenia. Aby uzyskać więcej informacji na temat pracy z danymi wyjściowymi raportu, zobacz Statyczny raport weryfikatora sterowników i Omówienie przeglądarki śledzenia. |
|
Reguła PdoDeviceInitAPI określa, że WdfPdoInitAllocate i wszystkie inne identyfikatory DDI inicjowania obiektów urządzenia, które skonfigurowały strukturę WDFDEVICE_INIT dla obiektu urządzenia fizycznego (PDO) muszą być wywoływane przed wywołaniem sterownika WdfDeviceCreate dla obiektu PDO. |
|
Reguła PdoInitFreeDeviceCallback określa, że sterownik musi wywołać WdfDeviceInitFree , jeśli wystąpi błąd, gdy sterownik wywołuje dowolną funkcję inicjowania obiektu urządzenia struktury. |
|
Reguła PdoInitFreeDeviceCreate określa, że sterownik musi wywołać metodę WdfDeviceInitFree zamiast WdfDeviceCreate , jeśli wystąpi błąd w jednej z funkcji inicjowania obiektu urządzenia, a jeśli sterownik odebrał strukturę WDFDEVICE_INIT z wywołania funkcji WdfPdoInitAllocate. |
|
Reguła PdoInitFreeDeviceCreateType2 określa, że sterownik nie może wywoływać funkcji WdfDeviceCreate po wywołaniu funkcji WdfDeviceInitFree. |
|
Reguła PdoInitFreeDeviceCreateType4 określa, że sterownik musi wywołać funkcję WdfDeviceInitFree , jeśli wystąpi błąd podczas wywoływania sterownika WdfDeviceCreate. |
|
Reguła ControlDeviceInitAllocate określa, że dla obiektu urządzenia sterującego sterownik musi wywołać metodę inicjowania obiektu urządzenia struktury WdfControlDeviceInitAllocate przed wywołaniem sterownika WdfDeviceCreate. |
|
Reguła InputBufferAPI określa, że poprawne DDI do pobierania buforu są używane w funkcji callback EvtIoRead. W funkcji EvtIoRead niedozwolone jest wywoływanie następujących DDI do pobierania buforu: |
Aby wybrać zestaw reguł użycia DDI
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ę DDIUsage.
Aby wybrać domyślny zestaw reguł w oknie wiersza polecenia dla deweloperów programu Visual Studio, określ DDIUsage.sdv z opcją /check . Przykład:
msbuild /t:sdv /p:Inputs="/check:DDIUsage.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).