| using System.Text; |
| using FastSeek.Core.Mft; |
|
|
| namespace FastSeek.Core.Utils; |
|
|
| public static class Drives |
| { |
| public static List<NtfsDrive> GetNtfsDrives() |
| { |
| var drives = new List<NtfsDrive>(); |
| 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); |
| } |
| } |
|
|