キャンセル ルーチンの登録
デバイス・ドライバーに StartIo ルーチンがある場合、そのディスパッチルーチンは Cancel ルーチンを IoStartPacketにそのアドレスを入力として指定することで登録できます。
ドライバーに StartIo ルーチンがない場合、ディスパッチ ルーチンは、他のドライバー ルーチンによる処理のために IRP をキューに入れる前に、次の操作を行う必要があります。
IoAcquireCancelSpinLock を呼び出します。
IoSetCancelRoutine を呼び出します。この操作には、入力 IRP とドライバーが提供する Cancel ルーチンのエントリポイントを使用します。
IoReleaseCancelSpinLock を呼び出 します。
スピン ロックのキャンセルの詳細については、「システムのスピン ロックのキャンセルの使用」を参照してください。
I/O マネージャーによるデバイス キューを使用せず、専用の IRP キューを管理するドライバーは、IoSetCancelRoutine を呼び出すときにキャンセル スピン ロックを取得する必要はありません。 ただし、これらのドライバーは、 Cancel ルーチンが既に開始されているかどうかを判断するために IoSetCancelRoutine が返す Cancel ルーチン ポインターをチェックする必要があります。