次の方法で共有


IWDFIoRequest::MarkCancelable メソッド (wudfddi.h)

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

MarkCancelable メソッドを使用すると、I/O 要求の取り消しが可能になります。

構文

void MarkCancelable(
  [in] IRequestCallbackCancel *pCancelCallback
);

パラメーター

[in] pCancelCallback

I/O 要求の後にフレームワークが呼び出すメソッドが取り消される IRequestCallbackCancel インターフェイスへのポインター。

戻り値

なし

解説

ドライバーが IQueueCallbackRead::OnRead、IQueueCallbackWrite::OnWrite、または IQueueCallbackDeviceIoControl::OnDeviceIoControl イベント コールバック関数への入力として I/O 要求を受け取った後、ドライバーは MarkCancelable メソッドを呼び出して要求の取り消しを有効にすることができます。 その後、ドライバーは IWDFIoRequest::UnmarkCancelable メソッドを呼び出して、要求の取り消しを無効にすることができます。

ドライバーが MarkCancelable を呼び出す前に、ドライバーは IRequestCallbackCancel::OnCancel メソッドを実装する 必要があります。

ユーザー モード ドライバー フレームワーク (UMDF) では、キューごとに 1 つの IRequestCallbackCancel::OnCancel メソッドのみを使用できます。 そのため、ドライバーが特定のキューに関連付けられている要求に対して MarkCancelable を呼び出して、フレームワークがこれらの要求を取り消せるようにする場合、ドライバーは同じ要求コールバック オブジェクトの IRequestCallbackCancel インターフェイスへのポインターを渡す必要があります。 その後、各要求を取り消すために、フレームワークは、この要求コールバック オブジェクトの IRequestCallbackCancel::OnCancel メソッドの呼び出しで、要求の IWDFIoRequest インターフェイスへのポインターを渡します。

ドライバーは、IRequestCallbackCancel::OnCancel メソッドまたは通常の I/O 完了パスから、IWDFIoRequest::Complete を呼び出す必要があります。

ドライバーが MarkCancelable を呼び出して取り消しを有効にした後、ドライバーが UnmarkCancelable を呼び出して取り消しを無効にしない限り、ドライバーが要求オブジェクトを所有している間、要求は取り消し可能なままになります。

ドライバーが IWDFIoRequest::ForwardToIoQueue メソッドを呼び出して要求を別のキューに転送する場合、次の規則が適用されます。

  • ドライバーが要求を別のキューに転送するときに、I/O 要求の取り消しを有効にすることはできません。

    通常、ドライバーは MarkCancelable を呼び出して 、IWDFIoRequest::ForwardToIoQueue を呼び出す前に要求の取り消しを有効にしないでください。 または、ドライバーは要求を取り消し可能にすることができます。 ただし、ドライバーは、IWDFIoRequest::ForwardToIoQueue を呼び出す前に要求の取り消しを無効にするには、UnmarkCancelable を呼び出す必要があります。

  • 要求が 2 番目のキューにある間、フレームワークは要求を所有し、ドライバーに通知せずに取り消すことができます。
  • フレームワークが 2 番目のキューからの要求をデキューし、ドライバーに要求を配信した後、ドライバーは MarkCancelable を呼び出してキャンセルを有効にすることができます。

次のコード例では、フレームワークで取り消すことができるように要求を設定します。

    //
    // The QueryInteraface should not fail.
    //
    (VOID)this->QueryInterface(_uuidof(IRequestCallbackCancel),
                               (PVOID *)&cancelCallback);

    pWdfRequest->MarkCancelable(cancelCallback);

要件

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

こちらもご覧ください

IQueueCallbackDeviceIoControl::OnDeviceIoControl

IQueueCallbackRead::OnRead

IQueueCallbackWrite::OnWrite

IRequestCallbackCancel

IRequestCallbackCancel::OnCancel

IWDFIoRequest

IWDFIoRequest::Complete

IWDFIoRequest::ForwardToIoQueue

IWDFIoRequest::UnmarkCancelable