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_ATTRIBUTESExecutionLevel を指定します。 詳細については、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)

こちらもご覧ください

EvtIoQueueState

WdfIoQueueDrain

WdfIoQueuePurgeSynchronously