ドライバー フレームワーク 2.0 で指定された値よりも実際の I/O User-Mode 10 倍短い
この記事では、実際の I/O タイムアウトが User-Mode Driver Framework 2.0 で指定された値よりも 10 倍短いという問題の解決に役立ちます。
元の製品バージョン: Windows 8.1、Windows Server 2012 R2、Windows 10、Windows 10 IoT Enterprise v1507、Windows Driver Kit 8.1、Windows Driver Kit 10
元の KB 番号: 4512989
現象
ドライバーが Windows オペレーティング システムUser-Modeドライバー フレームワーク (UMDF) バージョン 2.0 を使っている場合を想定します。 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 のタイム アウト計算が正しくないため、この問題が発生します。
解決方法
この問題は、Windows 10 バージョン 1511 で修正されています。 ドライバーが Windows 10 バージョン 1511 より前のシステムを使っている場合は、タイム アウト値を 10 の係数で増やします。