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