Esempio n. 1
0
        public static List <USBStorageIDModel> GetStorageID()
        {
            List <USBStorageIDModel> result = null;

            try
            {
                RegistryKey usbsKey = Registry.LocalMachine.OpenSubKey(@"SYSTEM\CurrentControlSet\Services\USBSTOR\Enum", false);
                if (usbsKey != null)
                {
                    string[] usbs = usbsKey.GetValueNames();
                    if (Ls.Ok(usbs))
                    {
                        result = new List <USBStorageIDModel>();
                        foreach (var usb in usbs)
                        {
                            object valueObj = usbsKey.GetValue(usb);
                            string value    = valueObj.ToString();
                            if (int.TryParse(usb, out int index) && value.Contains("USB"))
                            {
                                result.Add(USBStorageIDModel.String2Model(value));
                            }
                        }
                    }
                }
            }
            catch { }
            return(result);
        }
Esempio n. 2
0
        public static List <USBStorageModel> GetStorage(USBStorageIDModel idModel, USBStorageVolumeModel volumeModel)
        {
            List <USBStorageModel> result = null;

            try
            {
                RegistryKey mountKey = Registry.LocalMachine.OpenSubKey(@"SYSTEM\MountedDevices", false);
                if (mountKey != null)
                {
                    string[] mounts = mountKey.GetValueNames();
                    if (Ls.Ok(mounts))
                    {
                        result = new List <USBStorageModel>();
                        foreach (var mnt in mounts)
                        {
                            if (mnt.Contains("DosDevices"))
                            {
                                object valueObj = mountKey.GetValue(mnt);
                                string value    = Encoding.Default.GetString((byte[])valueObj).Replace("\0", "");
                                if (value.Contains(volumeModel.VolumeID))
                                {
                                    result.Add(new USBStorageModel()
                                    {
                                        VID       = idModel.VID,
                                        PID       = idModel.PID,
                                        VolumeID  = volumeModel.VolumeID,
                                        StorageID = idModel.StorageID,
                                        Symbol    = mnt.Replace("\\DosDevices\\", ""),
                                    });
                                }
                            }
                        }
                    }
                }
            }
            catch { }
            return(result);
        }
Esempio n. 3
0
        public static List <USBStorageVolumeModel> GetVolumeID(USBStorageIDModel model)
        {
            List <USBStorageVolumeModel> result = null;

            try
            {
                RegistryKey idsKey = Registry.LocalMachine.OpenSubKey(@"SYSTEM\CurrentControlSet\Enum\STORAGE\Volume", false);
                if (idsKey != null)
                {
                    string[] volumes = idsKey.GetSubKeyNames();
                    if (Ls.Ok(volumes))
                    {
                        result = new List <USBStorageVolumeModel>();
                        string containerId = "", classGUID = "";
                        //查找 USBSTOR 标记的卷 中ID吻合的项
                        foreach (var v in volumes)
                        {
                            if (v.Contains("_USBSTOR#") && v.Contains(model.StorageID))
                            {
                                RegistryKey usbKey = idsKey.OpenSubKey(v);
                                string[]    infos  = usbKey.GetValueNames();
                                if (Ls.Ok(infos) && v.Length > 38)
                                {
                                    classGUID   = usbKey.GetValue("ClassGUID").ToString();
                                    containerId = usbKey.GetValue("ContainerID").ToString();
                                    result.Add(new USBStorageVolumeModel()
                                    {
                                        VolumeID    = v,
                                        ClassGUID   = classGUID,
                                        ContainerID = containerId
                                    });
                                }
                            }
                        }
                        //带着 ContainerID 查看所有卷
                        if (Str.Ok(containerId, classGUID))
                        {
                            foreach (var v in volumes)
                            {
                                if (!v.Contains("_USBSTOR#") && !v.Contains(model.StorageID))
                                {
                                    RegistryKey usbKey = idsKey.OpenSubKey(v);
                                    string[]    infos  = usbKey.GetValueNames();
                                    if (Ls.Ok(infos) && v.Length > 38)
                                    {
                                        string _class_guid   = usbKey.GetValue("ClassGUID").ToString();
                                        string _container_id = usbKey.GetValue("ContainerID").ToString();
                                        if (containerId == _container_id && classGUID == _class_guid &&
                                            !result.Any(x => x.VolumeID == v))
                                        {
                                            result.Add(new USBStorageVolumeModel()
                                            {
                                                VolumeID    = v,
                                                ClassGUID   = _class_guid,
                                                ContainerID = _container_id
                                            });
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }
            catch { }
            return(result);
        }