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
);
戻り値
IoSetCancelRoutine は、Irp-CancelRoutine> の前の値を返します。 Cancel ルーチンが以前に設定されていない場合、または IRP の取り消しが既に進行中の場合、IoSetCancelRoutine は NULL を返します。
注釈
このルーチンは、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) |