El tiempo de espera real de E/S es 10 veces más corto que el valor especificado en User-Mode Driver Framework 2.0

Este artículo le ayuda a resolver el problema en el que el tiempo de espera real de E/S es 10 veces menor que el valor especificado en User-Mode Driver Framework 2.0.

Versión original del producto:   Windows 8.1, Windows Server 2012 R2, Windows 10, Windows 10 IoT Enterprise v1507, Windows Driver Kit 8.1, Windows Driver Kit 10
Número KB original:   4512989

Síntomas

Supongamos que el controlador usa User-Mode Driver Framework (UMDF) versión 2.0 en sistemas operativos Windows. Observe que el valor de tiempo de espera de la operación de E/S es 10 veces más corto que el valor especificado.

Por ejemplo, si llama a la función de la siguiente manera, se espera que la solicitud de escritura haga que se produzca un tiempo de espera después de WdfIoTargetSendWriteSynchronously 10 milisegundos. Sin embargo, el tiempo de espera se produce después de 1 milisegundo.

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);

Causa

El problema se produce porque el cálculo de tiempo de espera en UMDF 2.0 es incorrecto.

Solución

El problema se ha corregido en Windows 10, versión 1511. Si el controlador usa un sistema anterior a Windows 10, versión 1511, puedes aumentar el valor de tiempo de espera en un factor de 10.