6

我目前正在使用 FindFirstFile、FindNextFile API 递归地遍历目录以根据给定条件搜索文件。我注意到“dir /s”命令比我的程序提供更好的性能。我尝试检查进程监视器中的事件,看起来 cmd.exe/dir 命令正在直接查询磁盘设备驱动程序。有什么方法可以实现与 DeviceIOControl() 类似的事情吗?我对设备驱动程序很陌生,尽管对编程并不陌生。附加 procmon 输出以供参考:

替代文字

问候,

4

5 回答 5

3

使用FindFirstFileFindNextFile。这就是API,DeviceIOControl直接使用要么是一团糟,要么是不可能的(不确切知道)。

您是否尝试过FindFirstFileEx它的FIND_FIRST_EX_LARGE_FETCH标志和FindExInfoBasic信息级别?

于 2010-08-30T20:11:14.467 回答
2

“dir /s”正在使用 FindFirst/Next。它不会做任何特殊的魔法来枚举文件。

QueryDirectory 似乎是 Procmon 公开 FindFirst/Next 从文件系统获取数据的方式。

于 2010-08-30T20:21:54.900 回答
1

http://ntfs-search.sourceforge.net/

它运作良好。而且速度更快。
它打开一个卷,并直接解析。

但它只适用于 NTFS。

于 2010-08-30T23:09:21.947 回答
1

您可以直接调用ZwQueryDirectoryFile。进一步深入到驱动程序级别将需要发送一堆 IRP,这可能是一种矫枉过正。

于 2010-08-30T20:12:19.817 回答
1

分析您的应用程序,您的瓶颈可能在其他地方。其中一些选项就像拿出霰弹枪射击苍蝇......

-斯科特

于 2010-09-02T15:41:42.137 回答