private HResult GetDirectoryEnumeration( Guid enumerationId, string filterFileName, bool restartScan, DirectoryEnumerationResults results) { Console.WriteLine($"GetDiretoryEnumeration: {enumerationId}, {filterFileName}"); try { ActiveEnumeration activeEnumeration = null; if (!this.activeEnumerations.TryGetValue(enumerationId, out activeEnumeration)) { return(HResult.InternalError); } if (restartScan) { activeEnumeration.RestartEnumeration(filterFileName); } else { activeEnumeration.TrySaveFilterString(filterFileName); } bool entryAdded = false; HResult result = HResult.Ok; while (activeEnumeration.IsCurrentValid) { ProjectedFileInfo fileInfo = activeEnumeration.Current; DateTime now = DateTime.UtcNow; result = results.Add( fileName: fileInfo.Name, fileSize: (ulong)(fileInfo.IsDirectory ? 0 : fileInfo.Size), isDirectory: fileInfo.IsDirectory, fileAttributes: fileInfo.IsDirectory ? (uint)FileAttributes.Directory : (uint)FileAttributes.Archive, creationTime: now, lastAccessTime: now, lastWriteTime: now, changeTime: now); if (result == HResult.Ok) { entryAdded = true; activeEnumeration.MoveNext(); } else { if (result == HResult.InsufficientBuffer) { if (entryAdded) { result = HResult.Ok; } } break; } } return(result); } catch (Win32Exception e) { return(HResultFromWin32(e.NativeErrorCode)); } catch (Exception) { return(HResult.InternalError); } }