プロセスで開かれているすべてのファイル ハンドルを取得し、ファイルが開かれた時間で並べ替える方法はありますか? まさにこれを必要とするプロジェクトがあります。Traktor や Serato などの Dj ソフトウェアによって開かれるファイルを特定する必要があります。その順序を知る必要がある理由は、どのファイルが最初のデッキにあり、どのファイルが 2 番目のデッキにあるかを判断するためです。
現在、Ntdll.dll (Winternl.h) の Windows 内部 API を使用して、プロセスで開かれているすべてのファイルのリストを特定しています。たぶん、それは最善の方法ではありません。どんな提案でも大歓迎です。
特定の OS バージョンと特定の Dj ソフトウェア バージョンで観察された API の動作に依存しました。これは、プロセス用に開かれたすべてのファイルのリストが再配置されない、つまり順序を守るというものでした。それが悪い習慣であることは承知していますが、リリース直前に顧客から「あるべき」機能だったので、そうしなければなりませんでした。問題は、これらのハンドルが特定の原因なしにランダムに再配置される場合があるというバグがあることです。それがすべてにブレーキをかけます。ファイルが開かれた時間を取得するために、それらの win 構造体にフィールドがあるのではないかと思いましたが、そのようなものはないようです。その API に関するドキュメントは非常に悪いです。
コードの貼り付けも考えたのですが、200行の関数で関数ポインタを使ったdllからの間接呼び出しを使っていたり、WinAPIの構造体をすべて手作業で再定義していたりするので非常に読みにくいです。実際には、Winternl.h ヘッダーも含まれていません。次のように、すべてのものも手動でロードされます。
GetProcAddress( GetModuleHandleA("ntdll.dll"), "NtQuerySystemInformation" );
クロスプラットフォームアプリケーションにとっては本当に頭痛の種です...
PSクロスプラットフォームまたは Qt で開いているファイル ハンドルを取得する方法について、関連する質問をここに投稿しました。