ファイルをオープンしているプロセスの特定方法について

Last Update: feedback 共有

本記事は、マイクロソフト社員によって公開されております。

こんにちは、Windows サポートチームの三浦です。
本日はファイルをオープンしてるプロセスの特定方法について紹介させていただきます。

handle.exe について

Windows OS では、アプリケーションなどがファイルを開く際、ファイル ハンドルと呼ばれる一意の識別子を生成し、そのハンドルを使用してファイルの参照や操作を行う仕組みとなっております。
そのため、ファイル ハンドルに関する情報を確認することで、ファイルをオープンしてるプロセスを特定できる場合がございます。
ファイル ハンドルに関する情報は、handle.exe と呼ばれる Sysinternals Tool を使用して確認することが可能であり、今回は、handle.exe を使用してファイルをオープンしてるプロセスを特定する方法を紹介させていただきます。

handle.exe のダウンロード リンクや使用可能なオプションは、こちらのサイト からご確認ください。

handle.exe の使用方法について

handle.exe はコマンド ライン用のツールであり、管理者権限のコマンド プロンプトから handle.exe (64bit 版は handle64.exe) を実行することで、システム内のプロセスが使用しているファイル ハンドルの情報を出力することが可能です。

    // 出力例

D:\Tools>handle64.exe

Nthandle v4.11 - Handle viewer
Copyright (C) 1997-2017 Mark Russinovich
Sysinternals - www.sysinternals.com


System pid: 4 <unable to open process>
7C: File (R–) C:\Windows\bootstat.dat
<省略>


MyApp.exe pid: 2105 contoso\testuser
1550: File (—) C:\test.txt
1554: File (RW-) C:\test2.txt
155C: File (RWD) C:\test3.txt
<省略>

// 下記のようにテキストにリダイレクトすることも可能です

1
handle64.exe > C:\temp\handle.txt

各ファイル ハンドルに関する情報は、プロセスごとに “——-“ で区切られたセクション単位で出力されます。
セクションの初めにはプロセス名と PID (プロセス ID) が出力され、その下に対象のプロセスが使用しているハンドル情報が出力されます。

上記出力例の場合は、System プロセスが C:\Windows\bootstat.dat を、MyApp.exe が C:\test.txt、C:\test2.txt、C:\test3.txt のファイル ハンドルを使用している (ファイルをオープンしている) ことを示します。

また、( ) 内には共有モードが記録されます。
共有モードについて詳しくは こちらの弊社公開情報 をご参照いただきたく存じますが、 出力結果内の表記はそれぞれ下記を表します。

・R → FILE_SHARE_READ (後続のプロセスによる読み込み操作を許可します)
・W → FILE_SHARE_WRITE (後続のプロセスによる書き込み操作を許可します)
・D → FILE_SHARE_DELETE (後続のプロセスによる削除操作を許可します)

例として、上記出力例の C:\test.txt の共有モードは (—) であり、いずれの共有モードも指定されていないため、ハンドルがクローズされるまで、後続のプロセスによるファイル操作は実行できません。
一方、C:\test2.txt は (RW-) であり、FILE_SHARE_READ/FILE_SHARE_WRITE が指定されているため、後続のプロセスによる読み取り/書き込み操作は可能ですが、FILE_SHARE_DELETE が指定されていないため、後続のプロセスによる削除操作は実行できません。
C:\test3.txt に関しては、すべての共有モードが指定されているため、後続のプロセスによる読み取り/書き込み/削除操作が可能です。

特定のファイルに対する書き込みや削除が “別のプロセスが使用中です” などのエラーで失敗する事象の調査を行う場合は、handle.exe の出力を元に、ファイルをオープンしているプロセスを確認したり、指定されている共有モードから対象の操作が許可されているかなどを確認することで原因を特定できる場合がございますので、ご活用をいただけますと幸いでございます。

留意点について

カーネル モードのドライバーの処理など、処理によっては handle.exe でハンドル情報を捕捉できない場合がございます。
“別のプロセスが使用中です” などのエラーでファイル操作が失敗するにもかかわらず、handle.exe による出力に対象のハンドル情報が出力されない場合は、その他に有効な調査手法を検討する必要がございますので、必要に応じて弊社サポートへのお問い合わせをご検討いただけますと幸いです。

また、handle.exe は Sysinternals として無償提供されているツールとなり、本ツールに対するテクニカル サポートは提供されておりません。
Sysinternals のライセンスに関して詳しくは、Sysinternals Licensing FAQ をご参照ください。


いかがでしたでしょうか。本投稿が少しでも皆様のお役に立てば幸いです。 本情報の内容(添付文書、リンク先などを含む)は、作成日時でのものであり、予告なく変更される場合があります。