我目前使用FindFirstFile,FindNextFile API遞歸迭代通過目錄搜索基於給定條件的文件。我注意到「dir/s」命令比我的程序有更好的性能。我嘗試檢查進程監視器中的事件,它看起來像cmd.exe/dir命令直接查詢磁盤設備驅動程序。有沒有什麼辦法可以實現與DeviceIOControl()類似的功能?我對設備驅動程序很陌生,但對編程並不陌生。附加將procmon輸出以供參考:有沒有辦法直接查詢文件系統設備驅動程序以列出目錄中的文件?
問候,
我目前使用FindFirstFile,FindNextFile API遞歸迭代通過目錄搜索基於給定條件的文件。我注意到「dir/s」命令比我的程序有更好的性能。我嘗試檢查進程監視器中的事件,它看起來像cmd.exe/dir命令直接查詢磁盤設備驅動程序。有沒有什麼辦法可以實現與DeviceIOControl()類似的功能?我對設備驅動程序很陌生,但對編程並不陌生。附加將procmon輸出以供參考:有沒有辦法直接查詢文件系統設備驅動程序以列出目錄中的文件?
問候,
您可以直接撥打ZwQueryDirectoryFile。進一步深入到驅動程序級別需要發送一堆IRP,並可能是一個矯枉過正的問題。
它是用戶模式下的NtQueryDirectoryFile,而且你真的不應該使用這些低級別的nt-api函數......) – Christopher 2010-08-30 20:18:32
:))這是相同的(在不同的名字下)。 來自MSDN: NtQueryDirectoryFile和ZwQueryDirectoryFile是相同Windows本機系統服務例程的兩個版本。有關此例程的更多信息,請參閱ZwQueryDirectoryFile。 因此,從我提供的鏈接開始閱讀文檔是有意義的。點擊一下,你知道...... – 2010-08-30 20:39:40
Mayevski'EldoS:是否可以從用戶模式程序調用內核模式API?我的意思是不是Zwxxx應該只用於驅動程序?(我對驅動程序編程非常陌生)。 – ivymike 2010-08-30 20:57:26
使用FindFirstFile
和FindNextFile
。這是API,直接使用DeviceIOControl
要麼是一團糟,要麼不可能(不完全知道)。
您是否試過FindFirstFileEx
以及它的FIND_FIRST_EX_LARGE_FETCH
標誌和FindExInfoBasic
信息等級?
我確實嘗試過。但沒有太多明顯的改進:(。 – ivymike 2010-08-30 20:49:52
「dir/s」正在使用FindFirst/Next。它沒有任何特殊的魔法來枚舉文件。
QueryDirectory似乎是Procmon公開FindFirst/Next如何從文件系統獲取其數據的方式。
謝謝本傑明。這看起來很有趣。 – ivymike 2010-08-31 05:17:38
描述你的應用程序,你的瓶頸很可能會在其他地方。一些選項都喜歡拿出獵槍射擊一隻蒼蠅......
斯科特
有一些緩存在DIR/S – 2010-08-30 19:19:45
回事這可能是真實的(是你能基礎上,推斷它屏幕截圖?),因爲我搜索了幾次相同的「* .mp3」。但即使是第一次,速度也很快。也只是爲了確保我嘗試了幾次隨機搜索的文件,我還沒有訪問過一段時間。似乎很少關注。 – ivymike 2010-08-30 19:28:22
此外,是否有任何隱藏的API稱爲QueryDirectory(),不通過標準庫公開?我知道ReadFile()是標準的,但無法在任何地方找到QueryDirectory()。 – ivymike 2010-08-30 19:31:42