マップされたドライブが現在使用されているかどうかをプログラムで確認する方法はありますか? を使用してドライブをアンマウントしようとするnet use
と、ドライブが使用されている場合、ドライブが使用中であることが通知され、さらにアクションを実行するように求められます。
ドライブが使用されなくなった場合、ドライブのマップを自動的に解除できるようにしたいと考えています。システムは Windows XP です。
マップされたドライブが現在使用されているかどうかをプログラムで確認する方法はありますか? を使用してドライブをアンマウントしようとするnet use
と、ドライブが使用されている場合、ドライブが使用中であることが通知され、さらにアクションを実行するように求められます。
ドライブが使用されなくなった場合、ドライブのマップを自動的に解除できるようにしたいと考えています。システムは Windows XP です。
これが社内アプリの場合、ローテクで簡単な解決策として、TechnetHandle
からアプリをダウンロードしてプロセスから実行することをお勧めします。その後、プロセスは結果を読み取り、ドライブごとにフィルター処理して、それらのいずれかがドライブ上にあるかどうかを確認できます。に興味があります。
のライセンス条項でHandle
実際にこの使用が許可されているかどうかは確認していませんが、最初に実行したときに表示されるので、確認することができます。
大まかに言えば、開いているすべてのファイル ハンドルを列挙し (または、開いているすべてのハンドルから、ファイル ハンドル以外のすべてを除外する)、マップされたネットワーク ドライブのデバイス名と一致するオブジェクト名を持つファイル ハンドルを探す必要があります。
多くの低レベルの Win32 API (NtQuerySystemInformation、NtQueryInformationFile、NtQueryObject など) ですが、確実に実行可能です。この道を進んでいる場合は、Windows Internalsのコピーを入手し、 MSDN と Mark Russinovich のブログを精査することをお勧めします。
リンクできるオープンソースプロジェクトがすでにそれを行っている場合を除き、ここで完全な回答を得られるタイプのものではないと思います. たとえば、Sysinternals ツールのソースは以前は無料で入手できましたが、このFileMon ソースの v4.3x バージョンのように今でも見つけることができます。