實際 I/O 逾時比 User-Mode Driver Framework 2.0 中指定的值短 10 倍

本文可協助您解決實際 I/O 逾時比 User-Mode Driver Framework 2.0 中指定值短 10 倍的問題。

原始產品版本:Windows 8.1、Windows Server 2012 R2、Windows 10、Windows 10 IoT 企業版 v1507、Windows Driver Kit 8.1、Windows Driver Kit 10
原始 KB 編號: 4512989

徵狀

假設您的驅動程式在 Windows 作業系統中使用 User-Mode Driver Framework (UMDF) 2.0 版。 您會注意到 I/O 作業的逾時值比指定的值短 10 倍。

例如,如果您如下所示呼叫 WdfIoTargetSendWriteSynchronously 函式,寫入要求預期會在 10 毫秒後發生逾時。 不過,逾時會在 1 毫秒之後發生。

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

原因

發生此問題的原因是 UMDF 2.0 中的逾時計算不正確。

解決方案

問題已在 Windows 10 1511 版中修正。 如果您的驅動程式使用早於 Windows 10 1511 版的系統,您可以將逾時值增加 10 個係數。