Beispiel #1
0
 public ServiceLoader()
 {
     if (Globals.IsMockVdsAvailable)
     {
         this.serviceLoader = this.GetMockVdsServiceLoader();
     }
     if (this.serviceLoader == null)
     {
         this.serviceLoader         = (IVdsServiceLoader) new VdsServiceLoaderClass();
         Globals.IsMockVdsAvailable = false;
     }
     base.ComUnknown = this.serviceLoader;
 }
Beispiel #2
0
        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();
        }
Beispiel #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");
        }
Beispiel #4
0
 public override void InitializeComInterfaces()
 {
     base.InitializeComInterfaces();
     try
     {
         if (this.serviceLoader == null)
         {
             this.serviceLoader = InteropHelpers.QueryInterface <IVdsServiceLoader>(base.ComUnknown);
         }
     }
     catch (Exception exception)
     {
         if (VdsException.IsFatalException(exception))
         {
             throw;
         }
         throw new VdsException("QueryInterface for IVdsServiceLoader failed.", exception);
     }
 }
Beispiel #5
0
        private IVdsServiceLoader GetMockVdsServiceLoader()
        {
            IVdsServiceLoader mockObject = null;
            Assembly          assembly   = null;

            try
            {
                assembly = Assembly.Load("Microsoft.Storage.Vds.TestModel, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35");
            }
            catch (Exception exception)
            {
                if (VdsException.IsFatalException(exception))
                {
                    throw;
                }
            }
            Type type = null;

            if (assembly != null)
            {
                type = assembly.GetType("Microsoft.Storage.Vds.TestModel.TmVdsLoader", false);
            }
            if (type != null)
            {
                try
                {
                    IMockObject obj3 = type.InvokeMember("GetInstance", BindingFlags.InvokeMethod, null, null, new object[0], CultureInfo.InvariantCulture) as IMockObject;
                    if (obj3 != null)
                    {
                        mockObject = obj3.GetMockObject() as IVdsServiceLoader;
                    }
                }
                catch (Exception exception2)
                {
                    if (VdsException.IsFatalException(exception2))
                    {
                        throw;
                    }
                }
            }
            return(mockObject);
        }
Beispiel #6
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();
        }
Beispiel #7
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));
            }
        }