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