次の方法で共有


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)

こちらもご覧ください

EvtIoCanceledOnQueue

EvtIoQueueState

WdfIoQueueStart

WdfIoQueueStopAndPurgeSynchronously