Situation:
I am scanning a directory using NtQueryDirectoryFile(..., FileBothDirectoryInformation, ...)
. In addition to data returned by this call I need security data (typically returned by GetKernelObjectSecurity
) and list of alternate streams (NtQueryInformationFile(..., FileStreamInformation)
).
Problem:
To retrieve security and alternate stream info I need to open (and close) each file. In my tests it slows down the operation by factor of 3. Adding GetKernelObjectSecurity
and NtQueryInformationFile
slows it down by factor of 4 (making it 12x).
Question: Is there a better/faster way to get this information (by either opening files faster or avoiding file open altogether)?
Ideas: If target file system is local I could access it directly and (knowing NTFS/FAT/etc details extract info from raw data). But it isn't going to work for remote file systems.
Custom SMB client is the answer, it seems. Skipping Windows/NT API layer opens all doors.