次の方法で共有


キャンセル ルーチンの登録

デバイス・ドライバーに StartIo ルーチンがある場合、そのディスパッチルーチンは Cancel ルーチンを IoStartPacketにそのアドレスを入力として指定することで登録できます。

ドライバーに StartIo ルーチンがない場合、ディスパッチ ルーチンは、他のドライバー ルーチンによる処理のために IRP をキューに入れる前に、次の操作を行う必要があります。

  1. IoAcquireCancelSpinLock を呼び出します。

  2. IoSetCancelRoutine を呼び出します。この操作には、入力 IRP とドライバーが提供する Cancel ルーチンのエントリポイントを使用します。

  3. IoReleaseCancelSpinLock を呼び出 します。

スピン ロックのキャンセルの詳細については、「システムのスピン ロックのキャンセルの使用」を参照してください。

I/O マネージャーによるデバイス キューを使用せず、専用の IRP キューを管理するドライバーは、IoSetCancelRoutine を呼び出すときにキャンセル スピン ロックを取得する必要はありません。 ただし、これらのドライバーは、 Cancel ルーチンが既に開始されているかどうかを判断するために IoSetCancelRoutine が返す Cancel ルーチン ポインターをチェックする必要があります。