Windows のネットワーク ドライブ上のファイルに同時にアクセスしようとすると、アプリケーションがフリーズする

この記事では、Windows のネットワーク ドライブ上の同じファイルにアクセスしようとしたときにアプリケーションがフリーズする問題の回避策について説明します。

適用対象: Windows 10 - すべてのエディション
元の KB 番号: 4039810

現象

次のような状況で問題が発生します。

  • サーバー上に共有フォルダーを作成し、そのフォルダーにファイルを追加します。
  • Windows 10、Windows 8.1、または Windows 7 を実行しているクライアントでは、共有フォルダーをネットワーク ドライブとしてマウントします。
  • アプリケーションに関連付けられているファイル システム ミニフィルター ドライバーを含むサード パーティのセキュリティ ソフトウェアをインストールします。
  • ミニフィルターは、%SystemRoot% パス (C ドライブなど) を保持するローカル ドライブと、作成した共有フォルダーのネットワーク ドライブの両方にアタッチされます。
  • ミニフィルターは、ネットワーク ドライブ内のファイル名を含む ( FltSendMessage 関数を使用して) メッセージをアプリケーションに送信します。
  • アプリケーションは、受信したファイル名を使用してファイルを開こうとします。
  • ミニフィルターに関連付けられていない同じコンピューター上の別のアプリケーションは、ネットワーク ドライブ上で同じファイルを同時に開こうとします。

このシナリオでは、両方のアプリケーションがフリーズします。

原因

この問題は、Windows Client-Side キャッシュ ドライバー (Csc.sys) によって保持されるリソース ロックが原因で発生します。 この問題が発生すると、Csc.sys はファイルのリソース ロックを取得し、ドライバー スタック内のその上にあるドライバーにファイルを開くよう要求します。 これにより、ファイルにアクセスしようとするすべてのアプリケーションが待機します。 これにより、ミニフィルターのスレッドは、関連付けられているアプリケーションが応答するまで待機します。

回避策

この問題が既に発生している場合は、クライアントを再起動します。

この問題を回避するには、ローカル グループ ポリシー エディター (gpedit.msc) を使用してオフライン ファイルを無効にします。 これを行うには、[コンピューターの構成]、[管理用テンプレート]、[ネットワーク\オフライン ファイル] の グループ ポリシー [オフライン ファイル機能の使用を許可または禁止する] 設定を使用します。

注:

オフライン ファイルを使用する必要がある場合は、回避策はありません。

状態

Microsoft は、これが記事の先頭に記載されている Microsoft 製品の問題であることを確認しました。

詳細情報

一般に、ファイル システムへの呼び出し間でロックを保持することは悪い考えです。 その理由は、次の開発者ブログ記事に記載されています。
ミニフィルターでの IO の発行: パート 1 - FltCreateFile

「現象」セクションで説明されているように、複数のドライブに接続されているミニフィルターを識別するには、管理コマンド プロンプトで次のコマンドを実行します。

fltmc instances -v C:

fltmc instances -v \Device\Mup