次の方法で共有


IoSetCancelRoutine 関数 (wdm.h)

IoSetCancelRoutine ルーチンは、特定の IRP が取り消された場合に呼び出されるドライバー指定のキャンセル ルーチンを設定します。

構文

PDRIVER_CANCEL IoSetCancelRoutine(
  [in] PIRP           Irp,
  [in] PDRIVER_CANCEL CancelRoutine
);

パラメーター

[in] Irp

取り消し可能な状態に配置または削除される IRP へのポインター。

[in] CancelRoutine

指定した IRP が 取り消 された場合に呼び出される呼び出し元が指定した Cancel ルーチンのエントリ ポイントを指定します。指定された IRP が取り消し可能な状態から削除されている場合は NULL です 。 このルーチンは、次のように宣言されます。

VOID
(*PDRIVER_CANCEL)(
    IN PDEVICE_OBJECT DeviceObject,
    IN PIRP Irp
    );

戻り値

IoSetCancelRoutineIrp-CancelRoutine> の前の値返します。 Cancel ルーチンが以前に設定されていない場合、または IRP の取り消しが既に進行中の場合、IoSetCancelRoutineNULL を返します。

注釈

このルーチンは、IRP で現在設定されている キャンセル ルーチンを無効にすることができます。

ドライバーは、デバイス オブジェクトで I/O マネージャーが指定したデバイス キューを使用する場合、このルーチンを呼び出すときにシステムキャンセル スピン ロックを保持する必要があります。 ドライバーは、IoAcquireCancelSpinLock を呼び出した後、IoReleaseCancelSpinLock使用してキャンセル スピン ロックを解放するまで IRQL = DISPATCH_LEVELで実行されます。

ドライバーが IRP の独自のキューを管理する場合、ドライバーは、このルーチンを呼び出すときにキャンセル スピン ロックを保持する必要はありません。 IoSetCancelRoutine は、インターロックされた交換組み込みを使用して 、Cancel ルーチンのアドレスをアトミック操作として設定します。 キャンセル スピン ロックの使用を減らすと、ドライバーのパフォーマンスとシステムの全体的なパフォーマンスが向上します。

ドライバー のキャンセル ルーチンは、IRQL = DISPATCH_LEVELで呼び出され、キャンセル スピン ロックが保持されます。 Cancel ルーチンは、コントロールを返す前に、キャンセル スピン ロックを解放する必要があります。

要件

要件
対象プラットフォーム デスクトップ
Header wdm.h (Wdm.h、Ntddk.h、Ntifs.h を含む)
Library NtosKrnl.lib
[DLL] NtosKrnl.exe
IRQL DISPATCH_LEVEL (「解説」セクションを参照)
DDI コンプライアンス規則 IrpCancelField(wdm)StartIoCancel(wdm)

こちらもご覧ください

IoAcquireCancelSpinLock

IoReleaseCancelSpinLock