public RawDiskItemData(string name, string rawPath, RawDiskItemType type, long length) { Name = name; RawPath = rawPath; Type = type; Length = length; }
protected override async Task <IEnumerable <RawDiskItemData> > RescanRawDisksImplAsync(CancellationToken cancel = default) { List <RawDiskItemData> ret = new List <RawDiskItemData>(); if (Env.IsWindows) { if (Env.IsAdmin == false) { throw new CoresException("Administrator privilege is required."); } for (int i = 0; i < 100; i++) { string name = "PhysicalDrive" + i.ToString(); string rawPath = @"\\.\" + name; try { using (var handle = PalWin32FileStream.CreateFileOpenHandle(FileMode.Open, FileShare.ReadWrite, FileOptions.None, FileAccess.Read, rawPath)) { try { var geometry = await Win32ApiUtil.DiskGetDriveGeometryAsync(handle, rawPath, cancel); RawDiskItemType type = RawDiskItemType.Unknown; if (geometry.MediaType == Win32Api.Kernel32.NativeDiskType.FixedMedia) { type = RawDiskItemType.FixedMedia; } else if (geometry.MediaType == Win32Api.Kernel32.NativeDiskType.RemovableMedia) { type = RawDiskItemType.RemovableMedia; } ret.Add(new RawDiskItemData(name, rawPath, type, geometry.DiskSize)); } catch { } } } catch { } } } else { throw new PlatformNotSupportedException(); } return(ret); }