低レベル(SCSI)ストレージフィルタードライバーを開発しています。ドライバーは読み取りIOをインターセプトし、データを小さなチャンクで他の場所に書き込みます。まれに、ドライバーによって読み取られたデータが破損している場合があります。ドライバーの流れは次のようになります。
- IRPとMDLを受け取る
- IoBuildPartialMdl()関数を使用してドライバーIRPおよびMDLをビルドします。
- 元のIRPを送信し、応答を待ちます。
- 「カスタム」ビルドMDLを使用してドライバーIRPを送信する
- 応答を待ち、上位層に応答します。
ステップ4で時々、データが破損します。すべてのデータが破損しているわけではなく、通常、少し前にこのデータに対して個別のIO要求が発生したことを言う必要があります。ここで何が起こっているのですか?MDLを間違って使用していますか?