static public Dictionary <string, string> example()
        {
            Dictionary <string, string> mounted = new Dictionary <string, string>();

            RotateWaitThreaded.WriteLine("Starting VDS...");

            // Create the service loader
            VdsServiceLoader  loaderClass = new VdsServiceLoader();
            IVdsServiceLoader loader      = (IVdsServiceLoader)loaderClass;

            RotateWaitThreaded.WriteLine("Got VDS Loader");

            // Load the service
            IVdsService service;

            loader.LoadService(null, out service);
            RotateWaitThreaded.WriteLine("Got VDS Service");

            // Wait for readyness
            service.WaitForServiceReady();
            RotateWaitThreaded.WriteLine("VDS Service is ready");

            // Query for vdisk providers
            IEnumVdsObject providerEnum;

            service.QueryProviders(VDS_QUERY_PROVIDER_FLAG.VDS_QUERY_VIRTUALDISK_PROVIDERS, out providerEnum);
            RotateWaitThreaded.WriteLine("Got VDS Providers");

            // Iterate
            while (true)
            {
                uint   fetched;
                object unknown;
                providerEnum.Next(1, out unknown, out fetched);

                if (fetched == 0)
                {
                    break;
                }

                // Cast to the required type
                IVdsVdProvider provider = (IVdsVdProvider)unknown;
                RotateWaitThreaded.WriteLine("Got VD Provider");

                Dump(provider, mounted);
            }
            return(mounted);
            // Console.ReadKey();
        }
Exemple #2
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 #3
0
        //create service before shutdown process started
        //it cannot be created during shutdown
        public VirtualDiskService()
        {
            // Create the service loader
            VdsServiceLoader  loaderClass = new VdsServiceLoader();
            IVdsServiceLoader loader      = (IVdsServiceLoader)loaderClass;

            Debug.WriteLine("Got Loader");

            // Load the service
            loader.LoadService(null, out _service);
            Debug.WriteLine("Got Service");

            // Wait for readyness
            _service.WaitForServiceReady();
            Debug.WriteLine("Service is ready");
        }
Exemple #4
0
        static void Main(string[] args)
        {
            // Create the service loader
            VdsServiceLoader  loaderClass = new VdsServiceLoader();
            IVdsServiceLoader loader      = (IVdsServiceLoader)loaderClass;

            Console.WriteLine("Got Loader");
            // Load the service
            IVdsService service;

            loader.LoadService(null, out service);
            Console.WriteLine("Got Service");
            // Wait for readyness
            service.WaitForServiceReady();
            Console.WriteLine("Service is ready");
            // Query for vdisk providers
            IEnumVdsObject providerEnum;

            service.QueryProviders(VDS_QUERY_PROVIDER_FLAG.VDS_QUERY_VIRTUALDISK_PROVIDERS, out providerEnum);
            Console.WriteLine("Got Providers");
            // Iterate
            while (true)
            {
                uint   fetched;
                object unknown;
                providerEnum.Next(1, out unknown, out fetched);
                if (fetched == 0)
                {
                    break;
                }
                // Cast to the required type
                IVdsVdProvider provider = (IVdsVdProvider)unknown;
                Console.WriteLine("Got VD Provider");
                Dump(provider);
            }
            Console.ReadKey();
        }
Exemple #5
0
        private static void DetachDrive(string path)
        {
            var device = DeviceFromPath.GetDevice(path);

            #region VDS COM

            FileInfo vhdFile = null;

            VdsServiceLoader loaderClass = new VdsServiceLoader();
            IVdsServiceLoader loader = (IVdsServiceLoader)loaderClass;

            IVdsService service;
            loader.LoadService(null, out service);

            service.WaitForServiceReady();

            IEnumVdsObject providerEnum;
            service.QueryProviders(VDS_QUERY_PROVIDER_FLAG.VDS_QUERY_VIRTUALDISK_PROVIDERS, out providerEnum);

            while (true) {
                uint fetchedProvider;
                object unknownProvider;
                providerEnum.Next(1, out unknownProvider, out fetchedProvider);

                if (fetchedProvider == 0) break;
                IVdsVdProvider provider = (IVdsVdProvider)unknownProvider;
                Console.WriteLine("Got VD Provider");

                IEnumVdsObject diskEnum;
                provider.QueryVDisks(out diskEnum);

                while (true) {
                    uint fetchedDisk;
                    object unknownDisk;
                    diskEnum.Next(1, out unknownDisk, out fetchedDisk);
                    if (fetchedDisk == 0) break;
                    IVdsVDisk vDisk = (IVdsVDisk)unknownDisk;

                    VDS_VDISK_PROPERTIES vdiskProperties;
                    vDisk.GetProperties(out vdiskProperties);

                    try {
                        IVdsDisk disk;
                        provider.GetDiskFromVDisk(vDisk, out disk);

                        VDS_DISK_PROP diskProperties;
                        disk.GetProperties(out diskProperties);

                        if (diskProperties.pwszName.Equals(device, StringComparison.OrdinalIgnoreCase)) {
                            vhdFile = new FileInfo(vdiskProperties.pPath);
                            break;
                        } else {
                            Trace.TraceError(diskProperties.pwszName + " = " + vdiskProperties.pPath);
                        }
                        Console.WriteLine("-> Disk Name=" + diskProperties.pwszName);
                        Console.WriteLine("-> Disk Friendly=" + diskProperties.pwszFriendlyName);
                    } catch (COMException) { }
                }
                if (vhdFile != null) { break; }
            }

            #endregion

            if (vhdFile != null) {
                using (var disk = new Medo.IO.VirtualDisk(vhdFile.FullName)) {
                    disk.Open(Medo.IO.VirtualDiskAccessMask.Detach);
                    disk.Detach();
                }
            } else {
                throw new FormatException(string.Format("Drive \"{0}\" is not a virtual hard disk.", path));
            }
        }
Exemple #6
0
        private static void DetachDrive(string path)
        {
            var device = DeviceFromPath.GetDevice(path);

            #region VDS COM

            FileInfo vhdFile = null;

            VdsServiceLoader  loaderClass = new VdsServiceLoader();
            IVdsServiceLoader loader      = (IVdsServiceLoader)loaderClass;

            IVdsService service;
            loader.LoadService(null, out service);

            service.WaitForServiceReady();

            IEnumVdsObject providerEnum;
            service.QueryProviders(VDS_QUERY_PROVIDER_FLAG.VDS_QUERY_VIRTUALDISK_PROVIDERS, out providerEnum);

            while (true)
            {
                uint   fetchedProvider;
                object unknownProvider;
                providerEnum.Next(1, out unknownProvider, out fetchedProvider);

                if (fetchedProvider == 0)
                {
                    break;
                }
                IVdsVdProvider provider = (IVdsVdProvider)unknownProvider;
                Console.WriteLine("Got VD Provider");

                IEnumVdsObject diskEnum;
                provider.QueryVDisks(out diskEnum);

                while (true)
                {
                    uint   fetchedDisk;
                    object unknownDisk;
                    diskEnum.Next(1, out unknownDisk, out fetchedDisk);
                    if (fetchedDisk == 0)
                    {
                        break;
                    }
                    IVdsVDisk vDisk = (IVdsVDisk)unknownDisk;

                    VDS_VDISK_PROPERTIES vdiskProperties;
                    vDisk.GetProperties(out vdiskProperties);

                    try {
                        IVdsDisk disk;
                        provider.GetDiskFromVDisk(vDisk, out disk);

                        VDS_DISK_PROP diskProperties;
                        disk.GetProperties(out diskProperties);

                        if (diskProperties.pwszName.Equals(device, StringComparison.OrdinalIgnoreCase))
                        {
                            vhdFile = new FileInfo(vdiskProperties.pPath);
                            break;
                        }
                        else
                        {
                            Trace.TraceError(diskProperties.pwszName + " = " + vdiskProperties.pPath);
                        }
                        Console.WriteLine("-> Disk Name=" + diskProperties.pwszName);
                        Console.WriteLine("-> Disk Friendly=" + diskProperties.pwszFriendlyName);
                    } catch (COMException) { }
                }
                if (vhdFile != null)
                {
                    break;
                }
            }

            #endregion

            if (vhdFile != null)
            {
                using (var disk = new Medo.IO.VirtualDisk(vhdFile.FullName)) {
                    disk.Open(Medo.IO.VirtualDiskAccessMask.Detach);
                    disk.Detach();
                }
            }
            else
            {
                throw new FormatException(string.Format("Drive \"{0}\" is not a virtual hard disk.", path));
            }
        }