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.)"); } } } }
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); }
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); } } }
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)); } }