Rzeczywisty limit czasu operacji we/wy jest 10 razy krótszy niż określona wartość w User-Mode Driver Framework 2.0

Ten artykuł ułatwia rozwiązanie problemu, w którym rzeczywisty limit czasu we/wy jest 10 razy krótszy niż określona wartość w User-Mode Driver Framework 2.0.

Oryginalna wersja produktu: Windows 8.1, Windows Server 2012 R2, Windows 10, Windows 10 IoT Enterprise v1507, Windows Driver Kit 8.1, Windows Driver Kit 10
Oryginalny numer KB: 4512989

Symptomy

Załóżmy, że sterownik używa User-Mode Driver Framework (UMDF) w wersji 2.0 w systemach operacyjnych Windows. Zauważysz, że wartość limitu czasu operacji we/wy jest 10 razy krótsza niż określona wartość.

Jeśli na przykład wywołasz funkcję WdfIoTargetSendWriteSynchronously w następujący sposób, oczekuje się, że żądanie zapisu spowoduje przekroczenie limitu czasu po upływie 10 milisekund. Jednak limit czasu występuje po 1 milisekundach.

WDF_REQUEST_SEND_OPTIONS reqOptions; 
WDF_REQUEST_SEND_OPTIONS_INIT(&reqOptions, WDF_REQUEST_SEND_OPTION_TIMEOUT); // We specify 10 milliseconds as a timeout. WDF_REQUEST_SEND_OPTIONS_SET_TIMEOUT(&reqOptions, WDF_REL_TIMEOUT_IN_MS(10));
WdfIoTargetSendWriteSynchronously(ioTarget, request, &memDescr, NULL, & reqOptions, &bytesWritten);

Przyczyna

Problem występuje, ponieważ obliczanie limitu czasu w UMDF 2.0 jest nieprawidłowe.

Rozwiązanie

Problem został rozwiązany w Windows 10, wersja 1511. Jeśli sterownik używa systemu starszego niż Windows 10, wersja 1511, możesz zwiększyć wartość limitu czasu o współczynnik 10.