C28144

警告 C28144: キャンセルルーチン内では、終了時点で、Irp->CancelIrqlのIRQLが現在のIRQLである必要があります。

追加情報

値は特定の関数によって復元する必要はありませんが、終了する前に復元する必要があります。 PREfast は、必要な値に復元されたかどうかを判断できませんでした。

ドライバーのキャンセルルーチンが終了すると、Irp->CancelIrql メンバーの値は現在の IRQL ではなくなります。 通常、このエラーは、ドライバーが IoAcquireCancelSpinLock への最新の呼び出しによって提供された IRQL を使用して IoReleaseCancelSpinLockを呼び出さない場合に発生します。

キャンセルルーチンの詳細については、IRPsのキャンセリングを参照。 この警告に特有の情報については、IRPsをキャンセする際に考慮すべき点を参照してください。

次のコード例では、この警告が表示されます。

IoReleaseCancelSpinLock(PASSIVE_LEVEL);

次のコード例では、この警告を回避します。

IoReleaseCancelSpinLock(Irp->CancelIrql);