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