コード例 #1
0
ファイル: LaurentEtiemble.cs プロジェクト: radtek/vhddirector
        private static void Dump(IVdsVdProvider provider, Dictionary <string, string> mounted)
        {
            // Query for the vdisks
            IEnumVdsObject diskEnum;

            provider.QueryVDisks(out diskEnum);
            RotateWaitThreaded.WriteLine("Got VDisks");

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

                if (fetched == 0)
                {
                    break;
                }

                // Cast to the required type
                IVdsVDisk vDisk = (IVdsVDisk)unknown;

                // Get the vdisk properties
                VDS_VDISK_PROPERTIES vdiskProperties;
                vDisk.GetProperties(out vdiskProperties);

                RotateWaitThreaded.WriteLine("VDisk Id=" + vdiskProperties.Id);
                RotateWaitThreaded.WriteLine("VDisk Device Name=" + vdiskProperties.pDeviceName);
                RotateWaitThreaded.WriteLine("VDisk Path=" + vdiskProperties.pPath); // **

                // Get the associated disk

                Microsoft.Storage.Vds.Interop.IVdsDisk disk;
                try
                {
                    provider.GetDiskFromVDisk(vDisk, out disk);

                    // Get the disk properties
                    DiskProperties diskProperties;
                    disk.GetProperties(out diskProperties);

                    RotateWaitThreaded.WriteLine("Disk Name=" + diskProperties.Name); // **
                    RotateWaitThreaded.WriteLine("Disk Friendly=" + diskProperties.FriendlyName);

                    if (diskProperties.FriendlyName.Equals("Msft Virtual Disk SCSI Disk Device"))
                    {
                        mounted.Add(vdiskProperties.pPath, diskProperties.Name);
                    }
                }
                catch (COMException ex)
                {
                    if (ex.Message == "Exception from HRESULT: 0x80042405") //
                    {
                        RotateWaitThreaded.WriteLine("VDS_E_OBJECT_NOT_FOUND (The specified object was not found.)");
                    }
                }
            }
        }
コード例 #2
0
ファイル: LaurentEtiemble.cs プロジェクト: radtek/vhddirector
        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();
        }