using System.Text; using FastSeek.Core.Mft; namespace FastSeek.Core.Utils; public static class Drives { public static List GetNtfsDrives() { var drives = new List(); var buffer = new char[256]; var len = NativeMethods.GetLogicalDriveStrings((uint)buffer.Length, buffer); if (len == 0) return drives; var all = new string(buffer, 0, (int)len).Split('\0', StringSplitOptions.RemoveEmptyEntries); foreach (var root in all) { if (!IsNtfs(root)) continue; var letter = root[0]; drives.Add(new NtfsDrive { Letter = letter, Root = root, DevicePath = $"\\\\.\\{letter}:" }); } return drives; } private static bool IsNtfs(string root) { var fs = new char[32]; var ok = NativeMethods.GetVolumeInformation(root, null, 0, out _, out _, out _, fs, (uint)fs.Length); if (!ok) return false; var fsName = new string(fs).TrimEnd('\0'); return fsName.StartsWith("NTFS", StringComparison.OrdinalIgnoreCase); } }