我目前正在使用 FindFirstFile、FindNextFile API 递归地遍历目录以根据给定条件搜索文件。我注意到“dir /s”命令比我的程序提供更好的性能。我尝试检查进程监视器中的事件,看起来 cmd.exe/dir 命令正在直接查询磁盘设备驱动程序。有什么方法可以实现与 DeviceIOControl() 类似的事情吗?我对设备驱动程序很陌生,尽管对编程并不陌生。附加 procmon 输出以供参考:
问候,
我目前正在使用 FindFirstFile、FindNextFile API 递归地遍历目录以根据给定条件搜索文件。我注意到“dir /s”命令比我的程序提供更好的性能。我尝试检查进程监视器中的事件,看起来 cmd.exe/dir 命令正在直接查询磁盘设备驱动程序。有什么方法可以实现与 DeviceIOControl() 类似的事情吗?我对设备驱动程序很陌生,尽管对编程并不陌生。附加 procmon 输出以供参考:
问候,
使用FindFirstFile
和FindNextFile
。这就是API,DeviceIOControl
直接使用要么是一团糟,要么是不可能的(不确切知道)。
您是否尝试过FindFirstFileEx
它的FIND_FIRST_EX_LARGE_FETCH
标志和FindExInfoBasic
信息级别?
“dir /s”正在使用 FindFirst/Next。它不会做任何特殊的魔法来枚举文件。
QueryDirectory 似乎是 Procmon 公开 FindFirst/Next 从文件系统获取数据的方式。
您可以直接调用ZwQueryDirectoryFile。进一步深入到驱动程序级别将需要发送一堆 IRP,这可能是一种矫枉过正。
分析您的应用程序,您的瓶颈可能在其他地方。其中一些选项就像拿出霰弹枪射击苍蝇......
-斯科特