WdfIoQueuePurge 関数 (wdfio.h)
[KMDF と UMDF に適用]
WdfIoQueuePurge メソッドを使用すると、フレームワークは I/O キューへの I/O 要求のキューを停止し、未処理の要求を取り消します。
構文
void WdfIoQueuePurge(
[in] WDFQUEUE Queue,
[in, optional] PFN_WDF_IO_QUEUE_STATE PurgeComplete,
[in, optional] WDFCONTEXT Context
);
パラメーター
[in] Queue
フレームワーク キュー オブジェクトへのハンドル。
[in, optional] PurgeComplete
ドライバー提供の EvtIoQueueState コールバック関数へのポインター。 このパラメーターは省略可能であり、 NULL にすることができます。
[in, optional] Context
フレームワークが EvtIoQueueState コールバック関数に渡すドライバー指定のコンテキスト情報への型指定されていないポインター。 このパラメーターは省略可能であり、 NULL にすることができます。
戻り値
なし
解説
ドライバーが無効なオブジェクト ハンドルを提供すると、バグ チェックが発生します。
ドライバーが WdfIoQueuePurge を呼び出した後、フレームワークは、指定されたキューへの I/O 要求の追加を停止します。 フレームワークは、ターゲット デバイスに配信されていないすべての要求を 取り消 し、それぞれに対してドライバーの CompletionRoutine コールバック関数を呼び出します。 また、フレームワークは、ターゲット デバイスに配信された要求 ( IoCancelIrp を呼び出すことによって) WDF_REQUEST_SEND_OPTION_IGNORE_TARGET_STATEマークされていない要求を取り消そうとします。
フレームワークがキューに対する追加の要求を受け取った場合、完了状態の値STATUS_INVALID_DEVICE_STATEで完了します。
ドライバーが EvtIoQueueState コールバック関数を提供する場合、ドライバーに配信されたすべての要求が完了または取り消された後、フレームワークによって呼び出されます。 コールバックが実行される IRQL を変更するには、キュー作成時に WDF_OBJECT_ATTRIBUTES で ExecutionLevel を指定します。 詳細については、EVT_WDF_IO_QUEUE_STATEの「解説」セクションを参照してください。
ドライバーは I/O キューを消去した後、 WdfIoQueueStart を呼び出してキューを再起動できます。
WdfIoQueuePurge を呼び出した後にドライバーが WdfRequestRequeue を呼び出した場合、消去が完了する前にリキュー試行が成功する可能性があります。 バージョン 1.9 以前の KMDF では、このシーケンスによってオペレーティング システムがクラッシュします。 この問題は、KMDF バージョン 1.11 以降で修正されています。
WdfIoQueuePurge メソッドの詳細については、「I/O キューの管理」を参照してください。
例
次のコード例では、I/O キューを消去し、ドライバーに配信されたすべての要求が完了または取り消されたときにコールバック関数を呼び出しません。
WdfIoQueuePurge(
ReadQueue,
WDF_NO_EVENT_CALLBACK,
WDF_NO_CONTEXT
);
要件
要件 | 値 |
---|---|
対象プラットフォーム | ユニバーサル |
最小 KMDF バージョン | 1.0 |
最小 UMDF バージョン | 2.0 |
Header | wdfio.h (Wdf.h を含む) |
Library | Wdf01000.sys (KMDF);WUDFx02000.dll (UMDF) |
IRQL | <= DISPATCH_LEVEL |
DDI コンプライアンス規則 | ChangeQueueState(kmdf), DriverCreate(kmdf), EvtSurpriseRemoveNoSuspendQueue(kmdf), KmdfIrql(kmdf), KmdfIrql2(kmdf), KmdfIrqlExplicit(kmdf), NoCancelFromEvtSurpriseRemove(kmdf) |