WdfIoQueueStopAndPurge 関数 (wdfio.h)
[KMDF と UMDF に適用]
WdfIoQueueStopAndPurge メソッドは、I/O キューが新しい要求を配信できないようにし、既存の未処理の要求とドライバーが所有する取り消し可能な要求を取り消しますが、キューは新しい要求を受信して格納します。
構文
void WdfIoQueueStopAndPurge(
[in] WDFQUEUE Queue,
[in, optional] PFN_WDF_IO_QUEUE_STATE StopAndPurgeComplete,
[in, optional] WDFCONTEXT Context
);
パラメーター
[in] Queue
フレームワーク キュー オブジェクトへのハンドル。
[in, optional] StopAndPurgeComplete
ドライバー提供の EvtIoQueueState コールバック関数へのポインター。 このパラメーターは省略可能であり、NULL にすることができます。
[in, optional] Context
フレームワークが EvtIoQueueState コールバック関数に渡すドライバー提供のコンテキスト情報への型指定されていないポインター。 このパラメーターは省略可能であり、NULL にすることができます。
戻り値
なし
解説
WdfIoQueueStopAndPurge メソッドを使用すると、新しい要求をキューに追加できるようにしながら、I/O キューがドライバーに I/O 要求を配信できなくなります。
さらに、キュー内の未処理の要求と、ドライバーが所有する取り消し可能な要求 (ドライバーが完了または再キューされていないドライバーに配信された要求) を取り消します。 WdfIoQueueStopAndPurge の進行中に新しい要求が追加された場合、ドライバーが WdfIoQueueStart を呼び出すまで、これらの新しい要求は配信されません。
これに対し、 WdfIoQueueStop メソッドは、キュー内の未処理の要求やドライバー所有の取り消し可能な要求を取り消しません。
このメソッドによってフレームワークがキュー内の未処理の要求を取り消す場合、フレームワークは、ドライバーが要求した場合、そのキューに対してドライバーの EvtIoCanceledOnQueue コールバック関数を呼び出します。
ドライバーが EvtIoQueueState コールバック関数を提供する場合、ドライバーに配信されたすべての要求が完了または取り消された後、フレームワークによって呼び出されます。
WdfIoQueueStopAndPurge メソッドを使用すると、WdfIoQueueStopAndPurge というドライバーの前にキューが新しい要求を受信していない場合でも、キューは新しい要求を受信できます。 たとえば、ドライバーは WdfIoQueueDrain を呼び出す可能性があります。これにより、フレームワークはキューへの新しい I/O 要求の追加を停止します。 ドライバーの後続の WdfIoQueueStopAndPurge の呼び出しにより、フレームワークはキューへの要求の追加を再開します。
これに対し、 WdfIoQueuePurge により、フレームワークは指定されたキューへの I/O 要求の追加を停止します。
ドライバーが無効なオブジェクト ハンドルを提供すると、バグ チェックが発生します。
例
次のコード例では、指定した I/O キューを停止して消去します。 ドライバーに配信されたすべての要求が完了または取り消された後、フレームワークはドライバーの EvtIoQueueStateStopAndPurge 関数を呼び出します。
WDFCONTEXT stopandpurgeContext;
stopandpurgeContext = &myContext;
WdfIoQueueStopAndPurge(
queue,
EvtIoQueueStateStopAndPurge,
stopandpurgeContext
);
要件
要件 | 値 |
---|---|
対象プラットフォーム | ユニバーサル |
最小 KMDF バージョン | 1.11 |
最小 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), NoCancelFromEvtSurpriseRemove(kmdf) |