2012-10-03 25 views
1

有沒有辦法讓一個進程的所有打開的文件句柄,並按打開文件的時間安排它?我們有一個項目,它需要這個 - 我們需要確定哪些文件是由Dj軟件打開的,比如Traktor或Serato。我們需要知道其順序的原因是要確定哪個文件位於第一個文件夾中,哪個位於第二個文件夾中。如何確定打開文件的順序?

目前我們使用Ntdll.dll(Winternl.h)中的Windows內部API來確定進程的所有打開文件的列表。也許這不是最好的辦法。任何建議,高度讚賞。

我們依賴於在某些操作系統版本和某些Dj軟件版本上觀察到的API行爲,即所有打開的文件列表都不會重新排列,即遵守訂單。我知道這是一種不好的做法,但在發佈之前這是客戶的「應該」功能,所以我們不得不這樣做。現在的問題是,當這些句柄有時會隨機重新排列而沒有任何特定的原因時,我們會有一個錯誤。剎住一切。我想也許在那些贏球結構中會有一個領域來獲得文件被打開的時間,但似乎沒有這樣的事情。關於這些API的文檔相當糟糕。

我想過一些代碼粘貼,但它是一個200行長的函數,它使用函數指針從DLL中間接調用,而且所有WinAPI結構都是手動重新定義的,所以很難讀取它。實際上,Winternl.h頭甚至沒有包括 - 所有的東西是手動加載過,這樣的:

GetProcAddress(GetModuleHandleA("ntdll.dll"), "NtQuerySystemInformation"); 

這真是一個跨平臺的應用程序頭痛...

附:我發佈了一個相關的問題here關於任何跨平臺或Qt的方式來獲得打開的文件句柄,也許這些東西將是有用或相關的。

+1

這看起來非常像一個XY問題:http://meta.stackexchange.com/questions/66377/what-is-the-xy-problem –

回答

1

如果只是爲了調試目的而檢查其他操作系統的行爲,則可以使用在調試模式下創建進程的技術,並截取所有dll加載事件的順序,以下是一個很好的article