次の方法で共有


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 コールバック関数内からこのメソッドを呼び出す必要があります。

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

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

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

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

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

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

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

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

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

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
ヘッダー wudfddi.h (Wudfddi.h を含む)
DLL WUDFx.dll

関連項目

IQueueCallbackIoResume::OnIoResume

IQueueCallbackIoStop::OnIoStop

IWDFIoRequest2