コード例 #1
0
 public RawDiskItemData(string name, string rawPath, RawDiskItemType type, long length)
 {
     Name    = name;
     RawPath = rawPath;
     Type    = type;
     Length  = length;
 }
コード例 #2
0
        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);
        }