次の方法で共有


IWDFIoRequest2::StopAcknowledge メソッド (wudfddi.h)

[警告: UMDF 2 は UMDF の最新バージョンであり、UMDF 1 よりも優先されます。 すべての新しい UMDF ドライバーは、UMDF 2 を使用して記述する必要があります。 UMDF 1 には新機能が追加されておらず、新しいバージョンのWindows 10では UMDF 1 のサポートが制限されています。 ユニバーサル Windows ドライバーでは、UMDF 2 を使用する必要があります。 詳細については、「UMDF を使用したはじめに」を参照してください。

StopAcknowledge メソッドは、ドライバーが指定された I/O 要求の処理を停止したことをフレームワークに通知します。

構文

void StopAcknowledge(
  [in] BOOL Requeue
);

パラメーター

[in] Requeue

TRUE の場合、フレームワークが要求をキューに再キューに入れ直して、フレームワークがドライバーに再度配信するようにするブール値。 FALSE の場合、フレームワークは要求を再要求しません。 詳細については、「解説」を参照してください。

戻り値

なし

解説

ドライバーが I/O キューの IQueueCallbackIoStop::OnIoStop コールバック関数を登録する場合、キューの基になるデバイスが動作 (D0) 状態を離れると、フレームワークによって呼び出されます。 フレームワークは、キューが停止している時点でドライバーが所有するすべての I/O 要求に対して、このコールバック関数を呼び出します。 ドライバーは、次のいずれかの操作を行って、各要求の処理を完了、取り消し、または延期する必要があります。

  • ドライバーが要求を所有している場合は、 IWDFIoRequest::Complete を呼び出して要求を完了または取り消すことができます。
  • ドライバーが要求を I/O ターゲットに転送した場合は、 IWDFIoRequest::CancelSentRequest を呼び出して要求を取り消すことができます。
  • ドライバーが要求の処理を延期する場合は、 StopAcknowledge を呼び出す必要があります。
ドライバーが StopAcknowledge を呼び出す場合は、 IQueueCallbackIoStop::OnIoStop コールバック関数内からこのメソッドを呼び出す必要があります。

ドライバーが IQueueCallbackIoStop::OnIoStop コールバック関数が受け取る要求ごとに IWDFIoRequest::Complete または StopAcknowledge を呼び出さない場合、フレームワークはデバイスが動作 (D0) 状態を残すことを許可しません。 この操作によって、システムが休止状態または別の低電力状態になるのを防ぐことができます。

ドライバーの IQueueCallbackIoStop::OnIoStop コールバック関数が StopAcknowledge を呼び出すと、 Requeue パラメーターを TRUE または FALSE に設定できます。

  • RequeueTRUE に設定すると、フレームワークは要求を I/O キューに戻します。

    基になるデバイスが動作 (D0) 状態に戻ると、フレームワークはドライバーに要求を再配信します。

  • RequeueFALSE に設定すると、要求の所有権がドライバーに残ります。 ドライバーは、ハードウェア アクセスを必要とする I/O 処理の実行を停止する必要があります。

    基になるデバイスが動作 (D0) 状態に戻ると、フレームワークはドライバーの IQueueCallbackIoResume::OnIoResume コールバック関数を呼び出して、ドライバーが要求の処理を続行できるようにします。

ドライバーが以前に IWDFIoRequest::MarkCancelable を呼び出していた場合は、RequeueTRUE に設定された StopAcknowledge を呼び出す前に、IWDFIoRequest::UnmarkCancelable を呼び出す必要があります。

StopAcknowledge を呼び出す前に、ドライバーの IQueueCallbackIoStop::OnIoStop コールバック関数は、基になるデバイスへのアクセスを必要とする I/O 要求のすべての処理を停止する必要があります。これは、デバイスが低電力状態になるためです。

次のコード例は IQueueCallbackIoStop::OnIoStop コールバック関数で、受信した要求が取り消し可能かどうかを確認し、取り消し可能な場合は IWDFIoRequest::UnmarkCancelable を呼び出します。 IWDFIoRequest::UnmarkCancelable が HRESULT_FROM_WIN32(ERROR_OPERATION_ABORTED) を返す場合、ドライバーの IRequestCallbackCancel::OnCancel コールバック関数が要求を処理するため、 が返されるだけです。 それ以外の場合、この例では StopAcknowledge を呼び出し、 FALSE を 指定して、フレームワークが最終的にドライバーの IQueueCallbackIoResume::OnIoResume コールバック関数を呼び出すようにします。

void
CMyReadWriteQueue::OnIoStop(
    __in IWDFIoQueue*  pWdfQueue,
    __in IWDFIoRequest*  pWdfRequest,
    __in ULONG  ActionFlags
    )
{ HRESULT status;

    if (ActionFlags & WdfRequestStopRequestCancelable) {
        status = pWdfRequest->UnmarkCancelable();
        if (status == HRESULT_FROM_WIN32(ERROR_OPERATION_ABORTED)) {
        return;
        }
    }
    //
    // Declare an IWDFIoRequest2 interface pointer and obtain the
    // IWDFIoRequest2 interface from the IWDFIoRequest interface.
    //
    CComQIPtr<IWDFIoRequest2> r2 = pWdfRequest;

    r2->StopAcknowledge(FALSE);
}

要件

要件
サポート終了 UMDF 2.0 以降では使用できません。
対象プラットフォーム デスクトップ
最小 UMDF バージョン 1.9
Header wudfddi.h (Wudfddi.h を含む)
[DLL] WUDFx.dll

こちらもご覧ください

IQueueCallbackIoResume::OnIoResume

IQueueCallbackIoStop::OnIoStop

IWDFIoRequest2