次の方法で共有


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

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

戻り値

何一つ

備考

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

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

ユーザー モード ドライバー フレームワーク (UMDF) では、キューごとに IRequestCallbackCancel::OnCancel メソッドを 1 つだけ できます。 そのため、ドライバーが特定のキューに関連付けられている要求 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
ヘッダー wudfddi.h (Wudfddi.h を含む)
DLL WUDFx.dll

関連項目

IQueueCallbackDeviceIoControl::OnDeviceIoControl

IQueueCallbackRead::OnRead

IQueueCallbackWrite::OnWrite

IRequestCallbackCancel

IRequestCallbackCancel::OnCancel

IWDFIoRequest

IWDFIoRequest::Complete

IWDFIoRequest::ForwardToIoQueue

IWDFIoRequest::UnmarkCancelable