次の方法で共有


WdfRequestCancelSentRequest 関数 (wdfrequest.h)

[KMDF と UMDF に適用]

WdfRequestCancelSentRequest メソッドは、呼び出し元が以前に I/O ターゲットに送信した I/O 要求を取り消そうとします。

構文

BOOLEAN WdfRequestCancelSentRequest(
  [in] WDFREQUEST Request
);

パラメーター

[in] Request

フレームワーク要求オブジェクトへのハンドル。

戻り値

WdfRequestCancelSentRequest は、ドライバーの I/O ターゲットにキャンセル要求を正常に配信した場合に TRUE を 返します。 要求が既に完了または取り消されている場合、または I/O ターゲット ドライバーが WdfRequestMarkCancelable または WdfRequestMarkCancelableEx を呼び出していない場合、このメソッドは FALSEを返します

ドライバーが無効なオブジェクト ハンドルを提供すると、バグ チェックが発生します。

注釈

ドライバーは WdfRequestCancelSentRequest を呼び出して、 WdfRequestSend を呼び出して、以前に I/O ターゲットに送信した I/O 要求を取り消そうとすることができます。

要求が I/O ターゲットのキューにある場合、フレームワークは要求を取り消します。 フレームワークが既に I/O ターゲットのドライバーに要求を配信しており、そのドライバーが取り消しを有効にするために WdfRequestMarkCancelable または WdfRequestMarkCancelableEx を呼び出した場合、フレームワークはそのドライバーの EvtRequestCancel コールバック関数を呼び出します。 ターゲットのドライバーが WdfRequestMarkCancelable または WdfRequestMarkCancelableEx を呼び出していない場合、要求が取り消し可能にならない限り、要求は取り消されません。

ドライバーが要求の CompletionRoutine コールバック関数を登録している場合、フレームワークは要求が取り消された後にコールバック関数を呼び出します。

通常、ドライバーが WdfRequestCancelSentRequest を呼び出す場合は、要求オブジェクトの参照カウントをインクリメントする必要があります。 詳細については、「 送信済み要求の取り消しの同期」を参照してください。

要求の取り消しの詳細については、「 I/O 要求の取り消し」を参照してください。

次のコード例は、 kmdf_fx2 サンプル ドライバーのコード例です。 この例は、 EvtIoStop コールバック関数です。 このドライバーは各要求を I/O ターゲットに送信するため、デバイスが削除された場合、 EvtIoStop コールバック関数は WdfRequestCancelSentRequest を呼び出します。

VOID
OsrFxEvtIoStop(
    IN WDFQUEUE  Queue,
    IN WDFREQUEST  Request,
    IN ULONG  ActionFlags
    )
{
    UNREFERENCED_PARAMETER(Queue);

    if (ActionFlags & WdfRequestStopActionSuspend) {
        WdfRequestStopAcknowledge(Request, FALSE);
    } else if (ActionFlags & WdfRequestStopActionPurge) {
        WdfRequestCancelSentRequest(Request);
    }
    return;
}

要件

要件
対象プラットフォーム ユニバーサル
最小 KMDF バージョン 1.0
最小 UMDF バージョン 2.0
Header wdfrequest.h (Wdf.h を含む)
Library Wdf01000.sys (KMDF);WUDFx02000.dll (UMDF)
IRQL <=DISPATCH_LEVEL
DDI コンプライアンス規則 DriverCreate(kmdf)EvtIoStopCancel(kmdf)EvtIoStopCompleteOrStopAck(kmdf)InvalidReqAccess(kmdf)InvalidReqAccessLocal(kmdf)KmdfIrql(kmdf)KmdfIrql2(kmdf)、KmdfIrqlExplicit(kmdf)

こちらもご覧ください

CompletionRoutine

EvtRequestCancel

WdfRequestMarkCancelable

WdfRequestMarkCancelableEx

WdfRequestSend