Пример #1
0
        // Expects a CIM_USBDevice object
        // http://msdn.microsoft.com/en-us/library/aa388649%28v=vs.85%29.aspx
        internal UsbDevice(ManagementObject o)
        {
            Uuid      = o.Str("DeviceID");
            UsbDevice = this;

            // Parse the vendor and product IDs out; best way I could find; patches welcome
            VendorId  = Int32.Parse(Uuid.Substring(Uuid.IndexOf("VID_") + 4, 4), NumberStyles.HexNumber);
            ProductId = Int32.Parse(Uuid.Substring(Uuid.IndexOf("PID_") + 4, 4), NumberStyles.HexNumber);
        }
Пример #2
0
        // Expects a Win32_DiskDrive object
        // http://msdn.microsoft.com/en-us/library/aa394132%28v=VS.85%29.aspx
        internal Volume(ManagementObject o)
        {
            if (o.ClassPath.ClassName != "Win32_DiskDrive")
            {
                throw new ArgumentException(o.ClassPath.ClassName, "o");
            }

            Uuid = o.Str("PNPDeviceID");
            Name = o.Str("Caption");

            // Get USB vendor/product ids from the associated CIM_USBDevice
            // This way of associating them (via a substring of the PNPDeviceID) is quite a hack; patches welcome
            var match = regex.Match(Uuid);

            if (match.Success)
            {
                string query = String.Format("SELECT * FROM CIM_USBDevice WHERE DeviceID LIKE '%{0}'", match.Groups[1].Captures[0].Value);
                UsbDevice = HardwareManager.Query(query).Select(u => new UsbDevice(u)).FirstOrDefault();
            }

            // Get MountPoint and more from the associated LogicalDisk
            // FIXME this assumes one partition for the device
            foreach (ManagementObject partition in o.GetRelated("Win32_DiskPartition"))
            {
                foreach (ManagementObject disk in partition.GetRelated("Win32_LogicalDisk"))
                {
                    //IsMounted = (bool)ld.GetPropertyValue ("Automount") == true;
                    //IsReadOnly = (ushort) ld.GetPropertyValue ("Access") == 1;
                    MountPoint = disk.Str("Name") + "/";
                    FileSystem = disk.Str("FileSystem");
                    Capacity   = (ulong)disk.GetPropertyValue("Size");
                    Available  = (long)(ulong)disk.GetPropertyValue("FreeSpace");
                    return;
                }
            }
        }