次の方法で共有


ディスパッチ ルーチンから返される状態

Note

最適な信頼性とパフォーマンスを実現するには、レガシ ファイル システム フィルター ドライバーではなく、フィルター マネージャーのサポートがあるファイル システム ミニフィルター ドライバーを使用します。 レガシ ドライバーをミニフィルター ドライバーに移植するには「レガシ フィルター ドライバーの移植ガイドライン」を参照してください。

IRP を完了する場合を除き、完了ルーチンを設定しないディスパッチ ルーチンは常に、IoCallDriver によって返される NTSTATUS 値を返す必要があります。 この値が STATUS_PENDING されていない限り、IRP を完了したドライバーによって設定された Irp->IoStatus.Status の値と一致する必要があります。

作業キューに IRP をポストする可能性がある完了ルーチンを設定するディスパッチ ルーチンは、次のいずれかの操作を行う必要があります。

  • IoCallDriver によって返された NTSTATUS 値を返します。
  • 完了ルーチンがイベントを通知し、Irp->IoStatus.Status の値を返すのを待ちます。
  • 保留中の IRP をマークし、作業キューにポストし、STATUS_PENDING 返します。
  • 完了ルーチンが作業キューに IRP をポストする可能性がある場合、ディスパッチ ルーチンは保留中の IRP をマークし、STATUS_PENDING を返す必要があります。

これらの動作のうち、どれが正しい動作か、または可能な動作かは、特定の操作によって異なります。 ディレクトリ変更の通知などの一部の操作は同期できません。および一部の操作 (便宜的ロックなど) を非同期にすることはできません。

ディスパッチ ルーチンから状態を返す方法の詳細については「ディスパッチ ルーチンの制約」を参照してください。