|
|
|||||||||||||
Как идентифицировать съемный жесткий диск24.12.2012, 15:10. Показов 6854. Ответов 10
Метки нет (Все метки)
Распознать среди других томов.
Читал через класс Win32_LogicalDisk, свойства DriveType и MediaType. Получил данные:
E - это съемный ЖД. Отделить от С:, как видите, не получилось. Еще способы? Другое свойство попробовать читать? У меня нет съемного ЖД. Сложно самому тестировать.
0
|
|||||||||||||
| 24.12.2012, 15:10 | |
|
Ответы с готовыми решениями:
10
|
|
|
|||
| 24.12.2012, 17:42 | |||
|
0
|
|||
|
|
|
| 24.12.2012, 21:54 | |
|
2
|
|
|
887 / 189 / 16
Регистрация: 18.07.2011
Сообщений: 260
|
||||||
| 25.12.2012, 12:33 | ||||||
Сообщение было отмечено как решение
Решение
Очень интересная задача.
Моё решение:
0
|
||||||
|
|
|
| 25.12.2012, 12:40 | |
|
0
|
|
|
887 / 189 / 16
Регистрация: 18.07.2011
Сообщений: 260
|
|
| 25.12.2012, 12:47 | |
|
У меня Win8.
Решение для XP дам, когда доберусь до компьютера.
0
|
|
|
|
|||||||
| 25.12.2012, 15:04 | |||||||
Сообщение было отмечено как решение
Решение )Решил заюзать DeviceIoControl, вещь та ещё! Смысл в том, что если диск возвращает DRIVE_FIXED и в то же время подключение по USB, то можно однозначно сказать, что это внешний диск. На форме Text1, в котором буква диска именно так = "С:" и кнопка.
1
|
|||||||
|
|
|||||||||||||||||
| 25.12.2012, 15:48 [ТС] | |||||||||||||||||
|
dzug, не будет. Это и есть DriveType.
Не по теме: К тому же в коде на дописан отлов ошибок и обход сообщения "Устройство не готово" по свойству isReady. Уточняющие ответы: - Вы пишете, что у Вас нет съемного ЖД. Тогда каким образом Вы протестировали из таблицы? Практическая значимость - тема берет начало отсюда: Запись презентаций на 300 носитетелей . Результаты теста (табличка) дал тов.Beren. - Что конкретно подразумевается под съемным диском? только жесткие? Да. Остальные можно различать по критериям: DriveType = 2 и Имя диска = A: или B: - значит дисковод. DriveType = 2 - значит flash-drive. B - конечно можно назначить и ЖД, но тогда DriveType будет = 3. Вот собственно DriveType Enum:
- По каким интерфейсам предполагается подключение? USB. Лично у меня материнская плата ASUS P8P67, которая имеет опцию ~ "Разрешить отключение ЖД..." Любой SATA-диск отображается в системном лотке как "Устройство, готовое к извлечению" (там же где и флешки). По сути такой ЖД становиться тоже съемным. Позволю себе позже расширить эту тему до определения и таких случаев. - Распознать когда? При подключении, или когда уже подключено? Уже дал ответ выше. Код крутится циклом. Как только устройство подключено, на него должен скопироваться файл, проверка контрольной суммы, отключение ус-ва. А вообще, в каком контексте (зачем) задан этот вопрос? - Каковы вообще исходные данные: буквы томов, или все-таки устройства? (на у-ве может быть несколько томов) Да, может. Код должен найти их все. На какой записывать... первый по физической разметке. Как его найти - другой вопрос. Давайте не в этой теме.
0
|
|||||||||||||||||
|
Телекомпания ВИD
1364 / 115 / 19
Регистрация: 14.10.2012
Сообщений: 100
|
||||||||
| 26.12.2012, 13:45 | ||||||||
Сообщение было отмечено как решение
Решение
Осталось мне внести свою скромную лепту.
Вношу с задержкой, поскольку пришлось ждать тестирования на чужом съемном HDD. И потом, мне не нравится выкладывать непроверенные решения. Но еще до тестирования у меня возникли мысли относительно данной проблемы, и мне бы не хотелось, чтобы они пропали зря. Могут кому-то пригодиться, ведь абсолютно идентичные задачи встречаются редко. При тестировании использовались операционные системы Windows XP. 1. Способ через WMI. Метод ненадежный, да и выводит не всегда (критика WMI описана здесь: Получение информации о процессоре, накопителях и материнской плате в среде Access 2007). Пример использования WMI:
а) MediaDescription (более точное определение физ. устройства; зависит от параметра MediaType) б) MediaType (тип физического устройства; существует 66 значений данного параметра, нужными являются: 15-Winchester Removable Disk и 29-Hard Disk). в) Model (наименование модели диска) г) Removable (является ли устройство съемным без необходимости выключения питания) д) SerialNumber (серийный номер) При тестировании, к сожалению, определился только параметр SerialNumber. И определяется, судя по всему, только для IDE-накопителей, SATA-не распознает. Параметр MediaType оказался бы очень полезным. Для Win32_DiskDrive - подходящие параметры: а) Model (наименование модели диска) б) InterfaceType (тип интерфейса подключения дискового устройства; возможные значения: SCSI, HDC, IDE, USB, 1394) в) PNPDeviceID (идентификационный параметр диска, получаемый с помощью Plug and Play; при невозможности получения наименования модели и серийного номера следует использовать обработку этого параметра, либо напрямую читать и обрабатывать данное значение из реестра (см. ниже)) Все три параметра корректно определялись при цестировании. Существует еще один полезный параметр г): г) MediaType (тип дискового устройства; для Windows Server 2003, Windows XP, Windows 2000, и Windows NT 4.0 возможные значения: Removable media, Fixed hard disk, Unknown; начиная с Windows Vista возможные значения: External hard disk media, Removable media other than floppy, Fixed hard disk media, Format is unknown). д) SerialNumber (серийный номер; параметр не поддерживается на системах Windows Server 2003, Windows XP, Windows 2000, и Windows NT 4.0) Тестирование показало, что для системного и съемного дисков параметр MediaType = "Fixed hard disk media" одинаков на Windows XP. За отсутствием систем Vista/7 проверить параметр на них не удалось. Вывод: для решения поставленной задачи достаточно детектировать параметр Win32_DiskDrive => InterfaceType, поскольку съемные диски чаще всего подключаются через USB. Для съемного диска он показал - "USB", для системного - "IDE". Альтернатива - проверять, заняты ли USB-порты, и если да, то чем (USB-накопитель, HDD и т.д.). 2. Способ через реестр. В ветви HKEY_LOCAL_MACHINE\SYSTEM\CurrentControl Set\Enum\ для каждого интерфейса есть свой подраздел, например, IDE или USBSTOR. Поэтому параметры можно брать напрямую отсюда, что немного увеличивает быстродействие (по сравнению с WMI). Кроме того, к WMI могут быть применены политики безопасности, либо эта служба может быть вообще отключена. Согласно небольшому исследованию, системные диски прописываются, как правило в подраздел IDE, а внешние HDD, подключаемые через USB - в подраздел USBSTOR, как и флеш-накопители. 3. Преимущества использования WMI и считывания из реестра: простота использования в скриптах. Недостатки: в общем случае - недостаточное быстродействие WMI по сравнению с иными способами; для новых устройств должно пройти достаточное вреся, пока они установятся на ПК, а все необходимые параметры запишутся в реестр (к ответу на вопрос 4. Поэтому существуют и другие способы считывания параметров, например: а) Использование метода прямого физического доступа к диску с правами администратора; -> (съемный HDD не определился) б) чтение с использованием SCSI по обходному пути; опознание: вместо "\\.\PhysicalDrive" используется контроллер "\\.\Scsi", административные права не требуются. -> (съемный HDD не определился) в) использование метода прямого физического доступа с минимальными правами; опознание: в CreateFile вместо "GENERIC_READ | GENERIC_WRITE" используется параметр "0" -> (определились параметры обоих физических дисков, оба - "fixed") г) чтение параметров SMART; -> (определился только системный диск) В указанных случаях определялись основные атрибуты физических дисков, такие как модель, серийный номер и т.д.; тип интерфейса подключения не являлся определяемым параметром (оcновной интерфейс - IDE). 5. Результаты тестирования решения от Pro_grammer: Диск является DRIVE_REMOVABLE , подключен по Резерв (Floppy, пустой, с дискетой) Диск является DRIVE_FIXED, подключен по Ata (системный HDD) Диск является DRIVE_FIXED, подключен по Usb (съемный HDD) Диск является DRIVE_CDROM, подключен по Atapi (физический CD-ROM, пустой и непустой) Диск является DRIVE_CDROM, подключен по Scsi (виртуальный CD-ROM, пустой и непустой) Диск является DRIVE_REMOVABLE , подключен по Usb (флеш-накопитель, присутствует) Диск является DRIVE_REMOVABLE , подключен по (флеш-накопитель, отсутствует) 6. Win32_LogicalDisk => DriveType и MediaType не определяют, является ли HDD внешним, т.к. это логический уровень. DriveType - определяет тип логического диска. MediaType - определяет точный тип носителя логического диска. Существует 22 значения данного параметра (0-неизвестный формат; 11-съемный носитель, отличный от дискеты (Removable media other than floppy); 12-фиксированный жесткий диск (Fixed hard disk media); остальные значения относятся к различным форматам гибких дисков Floppy). 7. Следует учитывать, что на физическом устройстве может быть несколько томов. Алгоритм 1 - по внешнему физическому устройству HDD определяются "внешние" тома. Алгоритм 2 - соответственно, наоборот. Алгоритм 3 (возможно применим к практической значимости) - внутренние диски уже заранее заданы на конкретной системе либо определены, все остальные будут являться внешними. Определять можно, например, так. На любой Windows-системе всегда есть системный том (%SYSTEMDRIVE%). По нему следует найти сам физический диск и интерфейс, по которому он подключен. Все остальные интерфейсы автоматически могут считаться "внешними". Вычислять остальные "внутренние" тома не имеет смысла, так как могут использоваться несколько физических "внутренних" дисков (с данными). Сравнение производить по типу интерфейса. Выяснить соответствие между физическими и логическими дисками помогут следующие параметры: а) Win32_PhysicalMedia => Tag б) Win32_DiskDrivePhysicalMedia => Antecedent, Dependent в) Win32_DiskDriveToDiskPartition => Antecedent, Dependent г) Win32_LogicalDiskToPartition => Antecedent, Dependent Если все-же нужно получить все DeviceID, вот пример для IDE: Win32_IDEControllerDevice => Dependent 8. Тонкий момент. RAID-конфигурации с несколькими дисками хоть и не часто, но встречаются. А RAID не всегда может выдавать серийники и другие параметры своих нескольких дисков... Редко, но возможна ситуация, когда на некоторых современных ПК IDE вообще не используется, а вмеcто этого системный диск подключен по интерфейсу USB. Внешний HDD в этом случае может подключаться через I/O USB (не следует отождествлять понятия "разъем" и "гнездо расширения"). 9. Решение от gimntut. Подтверждаю: под Windows XP ничего не возвращает. Решения для Windows XP пока нет. В ветви MountPoints2 прописывается информация о бывших и существующих локальных, сетевых и съемных дисках, а именно - точки монтирования, причем диски обозначаются как буквами, так и идентификаторами. При открытии диска ОС смотрит, какой программой его открыть (параметр BaseClass со значением по умолчанию: Drive). Ветка может использоваться и вредоносным ПО. Не всегда существует под-ветка CPC. Помимо MountPoints2, информация о накопителях прописывается и в другие ветви реестра.
4
|
||||||||
| 26.12.2012, 13:45 | |
|
Помогаю со студенческими работами здесь
11
Как установить Debian на съемный жесткий диск? Съемный жесткий диск TS500GSJ25M TRANSCEND не видит компьютер,как узнать сгорел ли он?! Вынуть данные (жесткий съемный диск или CD диск)
Съемный жесткий диск Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
|
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога
Финальные проекты на Си и на C++:
hello-sdl3-c. zip
hello-sdl3-cpp. zip
Результат:
|
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога
MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
|
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд.
Даже если у вас. . .
|
|
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает
монорепозиторий в котором находятся все исходники.
При создании нового решения, мы просто добавляем нужные проекты
и имеем. . .
|
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение:
В этой книге («Подход, основанный на вариантах использования») Ивар утверждает,
что архитектура программного обеспечения — это
структуры,. . .
|
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога
Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
|
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога
Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip
На первой гифке отладочные линии отключены, а на второй включены:. . .
|