0

低レベル(SCSI)ストレージフィルタードライバーを開発しています。ドライバーは読み取りIOをインターセプトし、データを小さなチャンクで他の場所に書き込みます。まれに、ドライバーによって読み取られたデータが破損している場合があります。ドライバーの流れは次のようになります。

  1. IRPとMDLを受け取る
  2. IoBuildPartialMdl()関数を使用してドライバーIRPおよびMDLをビルドします。
  3. 元のIRPを送信し、応答を待ちます。
  4. 「カスタム」ビルドMDLを使用してドライバーIRPを送信する
  5. 応答を待ち、上位層に応答します。

ステップ4で時々、データが破損します。すべてのデータが破損しているわけではなく、通常、少し前にこのデータに対して個別のIO要求が発生したことを言う必要があります。ここで何が起こっているのですか?MDLを間違って使用していますか?

4

1 に答える 1

0

どうやらMDLには、データが破損するギャップが含まれている可能性があります。正しい回避策は、データをコピーすることです。 http://msdn.microsoft.com/en-us/library/windows/hardware/gg463193.aspx

于 2012-10-30T12:11:20.677 に答える