実際の I/O のタイム アウトは、ドライバー フレームワーク 2.0 で指定User-Mode 10 倍短くなります。

この記事では、実際の I/O タイムアウトがドライバー フレームワーク 2.0 で指定した値の 10 倍短いという問題を解決User-Mode役立ちます。

元の製品バージョン:  Windows 8.1、Windows Server 2012 R2、Windows 10、Windows 10 IoT Enterprise v1507、Windows ドライバー キット 8.1、Windows ドライバー キット 10
元の KB 番号:   4512989

現象

ドライバーがドライバー フレームワーク (UMDF) User-Modeバージョン 2.0 をオペレーティング システムで使用Windows想定します。 I/O 操作のタイム アウト値は、指定した値の 10 倍短くなります。

たとえば、次のように関数を呼び出した場合、書き込み要求によって 10 ミリ秒後にタイムアウトが発生 WdfIoTargetSendWriteSynchronously する可能性があります。 ただし、タイムアウトは 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 のタイム アウト計算が正しくないので発生します。

解決方法

この問題は、バージョン 1511 Windows 10で修正されています。 ドライバーがバージョン 1511 の Windows 10 より前のシステムを使用している場合は、タイム アウト値を 10 に増やします。