winapifilesystemsnt-native-api

fastest way to retrieve CIFS file metadata


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.


Solution

  • Custom SMB client is the answer, it seems. Skipping Windows/NT API layer opens all doors.