Exemple #1
0
        private static void Dump(IVdsVdProvider provider)
        {
            // Query for the vdisks
            IEnumVdsObject diskEnum;

            provider.QueryVDisks(out diskEnum);
            Console.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);
                Console.WriteLine("-> VDisk Id=" + vdiskProperties.Id);
                Console.WriteLine("-> VDisk Device Name=" + vdiskProperties.pDeviceName);
                Console.WriteLine("-> VDisk Path=" + vdiskProperties.pPath);
                // Get the associated disk
                IVdsDisk disk;
                provider.GetDiskFromVDisk(vDisk, out disk);
                // Get the disk properties
                VDS_DISK_PROP diskProperties;
                disk.GetProperties(out diskProperties);
                Console.WriteLine("-> Disk Name=" + diskProperties.pwszName);
                Console.WriteLine("-> Disk Friendly=" + diskProperties.pwszFriendlyName);
            }
        }
        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.)");
                    }
                }
            }
        }
Exemple #3
0
        private static List <string> GetAllPaths(IVdsVdProvider provider)
        {
            List <string> paths = new List <string>(4);

            // Query for the vdisks
            IEnumVdsObject diskEnum;

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

            // Iterate
            for (int i = 0; i < 12; i++)
            {
                uint   fetched;
                object unknown;
                diskEnum.Next(1, out unknown, out fetched);

                if (fetched == 0)
                {
                    break; //no more info
                }
                // Cast to the required type
                IVdsVDisk vDisk = (IVdsVDisk)unknown;

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

                Debug.WriteLine("-> VDisk Id=" + vdiskProperties.Id);
                Debug.WriteLine("-> VDisk Device Name=" + vdiskProperties.pDeviceName);
                Debug.WriteLine("-> VDisk Path=" + vdiskProperties.pPath);

                if (paths.IndexOf(vdiskProperties.pPath) < 0)
                {
                    paths.Add(vdiskProperties.pPath);
                }

                //// Get the associated disk
                //IVdsDisk disk;
                //provider.GetDiskFromVDisk(vDisk, out disk);

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

                //Debug.WriteLine("-> Disk Name=" + diskProperties.pwszName);
                //Debug.WriteLine("-> Disk Friendly=" + diskProperties.pwszFriendlyName);
            }

            return(paths);
        }
Exemple #4
0
        private static void Dump(IVdsVdProvider provider, Dictionary <string, string> mounted)
        {
            // Query for the vdisks
            IEnumVdsObject diskEnum;

            provider.QueryVDisks(out diskEnum);
            DebugConsole.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);

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

                // Get the associated disk
                Microsoft.Storage.Vds.Interop.IVdsDisk disk;
                provider.GetDiskFromVDisk(vDisk, out disk);

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

                DebugConsole.WriteLine("-> Disk Name=" + diskProperties.Name); // **
                DebugConsole.WriteLine("-> Disk Friendly=" + diskProperties.FriendlyName);

                if (diskProperties.FriendlyName.Equals("Msft Virtual Disk SCSI Disk Device"))
                {
                    mounted.Add(vdiskProperties.pPath, diskProperties.Name);
                }
            }
        }
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));
            }
        }