Exemple #1
0
        public static async Task <VdsSession> CreateAsync()
        {
            var task = VdsHelper.RunBlockingAction(() =>
            {
                var loader = new VdsServiceLoader();
                IVdsService service;
                loader.LoadService(".", out service);

                service.WaitForServiceReady();

                return(service);
            });

            return(new VdsSession(await task));
        }
Exemple #2
0
        public async Task <List <Disk> > GetDisksAsync()
        {
            if (mDisposed)
            {
                throw new ObjectDisposedException(nameof(VdsSession));
            }

            return(await VdsHelper.RunBlockingAction(() =>
            {
                var ret = new List <Disk>();

                foreach (var swProvider in VdsHelper.VdsEnumerate <IVdsSwProvider>((out IEnumVdsObject ppEnum) =>
                                                                                   mService.QueryProviders((uint)_VDS_QUERY_PROVIDER_FLAG.VDS_QUERY_SOFTWARE_PROVIDERS, out ppEnum)))
                {
                    foreach (var pack in VdsHelper.VdsEnumerate <IVdsPack>(swProvider.QueryPacks))
                    {
                        foreach (var disk in VdsHelper.VdsEnumerate <IVdsDisk>(pack.QueryDisks))
                        {
                            _VDS_DISK_PROP diskProps;
                            disk.GetProperties(out diskProps);

                            if (diskProps.dwDeviceType != FILE_DEVICE_DISK)
                            {
                                continue;
                            }
                            if (diskProps.status != _VDS_DISK_STATUS.VDS_DS_ONLINE)
                            {
                                //The disk might be ejected. Or a card reader might have no media in it.
                                continue;
                            }
                            if (diskProps.health != _VDS_HEALTH.VDS_H_HEALTHY)
                            {
                                //TODO: does it ever make sense to try to write a non-healthy drive?
                                continue;
                            }

                            //Other properties that might be usful to expose:
                            //* busType. For example, USB versus MMC
                            ret.Add(new Disk(disk, diskProps.id, diskProps.pwszName, diskProps.pwszFriendlyName, diskProps.dwMediaType == MEDIA_TYPE_RemovableMedia, checked ((long)diskProps.ullSize)));
                        }
                    }
                }

                ret.Sort();

                return ret;
            }));
        }
Exemple #3
0
        internal async Task Clean()
        {
            if (mDisposed)
            {
                throw new ObjectDisposedException(nameof(Disk));
            }

            await VdsHelper.RunActionAsync((out IVdsAsync vsdAsync) =>
            {
                var adv = mDisk as IVdsAdvancedDisk;
                if (adv == null)
                {
                    throw new InvalidOperationException("Disk does not support cleaning.");
                }
                adv.Clean(bForce: 1, bForceOEM: 1, bFullClean: 0, out vsdAsync);
            });
        }