首页
社区
课程
招聘
[旧帖] 请教一个NtQueryDirectoryFile的问题 0.00雪花
发表于: 2011-1-18 16:09 3504

[旧帖] 请教一个NtQueryDirectoryFile的问题 0.00雪花

2011-1-18 16:09
3504
使用NtQueryDirectoryFile可以模拟FindFirstFile/FindNextFile来遍历某个文件夹下的文件,该函数有一个参数FileMask可以指定需要遍历的文件,如下的FileMask="a*.txt",说明遍历文件夹下所有以a开头的txt文件:

UNICODE_STRING FileMask;
RtlInitUnicodeString(FileMask, L"a*.txt");


// 模拟FindFirstFile
NtQueryDirectoryFile (FileHandle, NULL, NULL, NULL, &IoSB, FileInformation, Length, 
FileBothDirectoryInformation, 1, FileMask, 0 );


// 模拟FindNextFile
NtQueryDirectoryFile (FileHandle, NULL, NULL, NULL, &IoSB, FileInformation, Length, 
FileBothDirectoryInformation, 0, 0, 0 );


遍历的伪代码如下:
NTSTATUS status = NtQueryDirectoryFile (FileHandle, NULL, NULL, NULL, &IoSB, FileInformation, Length, 
FileBothDirectoryInformation, 1, FileMask, 0 );
while ( status != STATUS_NO_MORE_FILES )
{
    status = NtQueryDirectoryFile (FileHandle, NULL, NULL, NULL, &IoSB, FileInformation, Length, 
FileBothDirectoryInformation, 0, 0, 0 );
}


这里有一个问题我一直不能理解,下面的NtQueryDirectoryFile函数并没有指定FileMask参数,他是如何知道接下来要找形如"a*.txt"的文件的呢?是系统内部使用了什么全局变量,还是FileHandle参数中包含了FileMask的信息?

还望高手解答,不胜感激!

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 0
支持
分享
最新回复 (0)
游客
登录 | 注册 方可回帖
返回
//