おそらくWin32APIを使用して、C#でファイルハンドルを列挙できるかどうかを知りたいですか?これは、ウィンドウ ハンドルとプロセス ハンドルの場合は簡単に実行できますが、ファイル ハンドルの場合はできないようです。
一部の機能は によって提供されますがNtQuerySystemInformation
、これは段階的に廃止されるため、このような方法を使用することはお勧めしません。
おそらくWin32APIを使用して、C#でファイルハンドルを列挙できるかどうかを知りたいですか?これは、ウィンドウ ハンドルとプロセス ハンドルの場合は簡単に実行できますが、ファイル ハンドルの場合はできないようです。
一部の機能は によって提供されますがNtQuerySystemInformation
、これは段階的に廃止されるため、このような方法を使用することはお勧めしません。
それが可能であることはご存知のとおり、SysInternals の Handle ユーティリティがそれを行います。NtQueryInformation は段階的に廃止される予定はありません。これは、Win32 と「実際の」オペレーティング システムとの間の重要な低レベル インターフェイスです。
ただし、ハンドルの反復を可能にする NtQueryInformation 引数が文書化されることは決してありません。それだけで終わらないため、一部のマペットはそれを使用して、ロックしたくないファイルで CloseHandle() を呼び出します。これは、ハードディスクの内容を破壊する非常に良い方法です。
ハンドルを所有していたプロセスは、ハンドルが閉じられていることを知りません。おそらく、WriteFile() からの「動作しませんでした」というリターン コードを完全に無視して、書き込みを続行します。プログラムが別のハンドルを開き、以前に閉じられたものと同じ値を取得するまで、これは無害です。ここで、ガベージ (前のハンドル用) と新しいデータの混合をハンドルに書き込み始めます。書き込み先のコンテンツを完全に破壊します。ミッション クリティカルなデータベースのような場合は、バックアップ テープをスピンアップします。
これはC#の準備が整ったクラスですhttp://sourceforge.net/projects/processhacker/
sysinternal のハンドルを呼び出して結果を解析するか、ファイル システム ドライバーを作成することができます (数年かかる可能性があり、C# では実行できません) 。
ここで、C# で名前を使用してファイル ハンドルを一覧表示する実際の例を見つけました...
最後のスレッドまでスクロールして、そこにあるリンクをたどってください。コードをダウンロードすると、コメントはフランス語になります。たまたまフランス語を取っているので、ほとんどのことは理解できます。