次の方法で共有


WdfIoQueueDrainSynchronously 関数 (wdfio.h)

[KMDF と UMDF に適用]

WdfIoQueueDrainSynchronously メソッドを使用すると、フレームワークは I/O キューへの I/O 要求のキューを停止し、既にキューに登録されている要求の配信と処理を許可します。 メソッドは、すべての要求が完了または取り消された後に を返します。

構文

void WdfIoQueueDrainSynchronously(
  [in] WDFQUEUE Queue
);

パラメーター

[in] Queue

フレームワーク キュー オブジェクトへのハンドル。

戻り値

なし

解説

ドライバーが無効なオブジェクト ハンドルを提供すると、バグ チェックが発生します。

ドライバーが WdfIoQueueDrainSynchronousously を呼び出した後、フレームワークは指定されたキューへの I/O 要求の追加を停止します。 フレームワークがキューに対する追加の要求を受け取った場合、完了状態の値STATUS_INVALID_DEVICE_STATEで完了します。

ドライバーは、WdfIoQueueDrainSynchronously への呼び出しが返される前に、WdfIoQueuePurgeWdfIoQueueStart などのキューの状態を変更する別のメソッドを呼び出さないでください。

ベスト プラクティスとして、キューの保留中の I/O 要求がタイムリーに完了すると確信している場合にのみ 、WdfIoQueueDrainSynchronously を呼び出す必要があります。 それ以外の場合 は、WdfIoQueuePurgeSynchronously を使用します。 詳細については、「 I/O キューの管理」を参照してください。

ドライバーは、I/O キューをドレインした後、 WdfIoQueueStart を呼び出すことによってキューを再起動できます。

イベント コールバック関数が関連付けられているキューに関係なく、次のキュー オブジェクト イベント コールバック関数から WdfIoQueueDrainSynchronously を呼び出さないでください。

EvtIoDefaultEvtIoDeviceControlEvtIoInternalDeviceControlEvtIoReadEvtIoWrite

次のコード例では、I/O キューをドレインします。

WdfIoQueueDrainSynchronously(queue);

要件

要件
対象プラットフォーム ユニバーサル
最小 KMDF バージョン 1.0
最小 UMDF バージョン 2.0
Header wdfio.h (Wdf.h を含む)
Library Wdf01000.sys (KMDF);WUDFx02000.dll (UMDF)
IRQL PASSIVE_LEVEL
DDI コンプライアンス規則 ChangeQueueState(kmdf)DriverCreate(kmdf)EvtSurpriseRemoveNoSuspendQueue(kmdf)KmdfIrql(kmdf)KmdfIrql2(kmdf)、KmdfIrqlExplicit(kmdf)、 NoCancelFromEvtSurpriseRemove(kmdf)

こちらもご覧ください

WdfIoQueueDrain