この記事では、Windows のネットワーク ドライブ上の同じファイルにアクセスしようとするとアプリケーションがフリーズする問題の回避策について説明します。
適用対象: Windows 10 - すべてのエディション
元の KB 番号: 4039810
現象
以下のシナリオについて考えてみます。
- サーバー上に共有フォルダーを作成し、そのフォルダーにファイルを追加します。
- Windows 10、Windows 8.1、または Windows 7 を実行しているクライアントでは、共有フォルダーをネットワーク ドライブとしてマウントします。
- アプリケーションに関連付けられているファイル システム ミニフィルター ドライバーを含むサードパーティのセキュリティ ソフトウェアをインストールします。
- ミニフィルターは、%SystemRoot% パス (C ドライブなど) を保持するローカル ドライブと、作成した共有フォルダーのネットワーク ドライブの両方にアタッチされます。
- ミニフィルターは、ネットワーク ドライブ内のファイル名を含む ( FltSendMessage 関数を使用して) メッセージをアプリケーションに送信します。
- アプリケーションは、受信したファイル名を使用してファイルを開こうとします。
- ミニフィルターに関連付けられていない同じコンピューター上の別のアプリケーションは、ネットワーク ドライブ上の同じファイルを同時に開こうとします。
このシナリオでは、両方のアプリケーションがフリーズします。
原因
この問題は、Windows クライアント側キャッシュ ドライバー (Csc.sys) によって保持されているリソース ロックが原因で発生します。 この問題が発生すると、Csc.sysはファイルのリソース ロックを取得し、その上にあるドライバーをドライバー スタックに要求してファイルを開きます。 これにより、ファイルへのアクセスを試みるすべてのアプリケーションが待機します。 これにより、ミニフィルターのスレッドは、関連付けられているアプリケーションが応答するのを待機します。
回避策
この問題が既に発生している場合は、クライアントを再起動します。
この問題を回避するには、ローカル グループ ポリシー エディター (gpedit.msc) を使用してオフライン ファイルを無効にします。 これを行うには、Computer Configuration\Administrative Templates\Network\Offline Files の Allow を使用するか、オフライン ファイル機能の使用を禁止します。
Note
Offline Filesを使用する必要がある場合は、回避策はありません。
状態
Microsoft は、この記事の冒頭に記載されている Microsoft 製品の問題であることを確認しました。
その他の情報
一般に、ファイル システムへの呼び出し間でロックを保持することは悪い考えです。 その理由は、次の開発者ブログ記事に記載されています。
ミニフィルターでの IO の発行: パート 1 - FltCreateFile
「現象」セクションの説明に従って複数のドライブに接続されているミニフィルターを識別するには、管理コマンド プロンプトで次のコマンドを実行します。
fltmc instances -v C:
fltmc instances -v \Device\Mup