|
0 / 0 / 1
Регистрация: 16.10.2011
Сообщений: 53
|
|||||||||||
Точка монтирования USB диска SetupAPI30.10.2013, 16:59. Показов 12595. Ответов 38
Метки нет (Все метки)
Вообщем есть DeviceID которое получено через SetupAPI с помощью :
1.
2. Далее я смог получить с помощью этого http://msdn.microsoft.com/en-u... s.85).aspx в итоге получаю что-то вроде
Скорее всего камень предкновения это Volume name: \\?\Volume{4c1b02c1-d990-11dc-99ae-806e6f6e6963}\ но неясно как куда и зачем)))
0
|
|||||||||||
| 30.10.2013, 16:59 | |
|
Ответы с готовыми решениями:
38
Перехват события монтирования диска
|
|
Ушел с форума
|
||
| 07.11.2013, 12:02 | ||
|
Может, правильнее сравнивать не сами ссылки, а объекты, на которые они указывают ? Объект можно найти с помощью QueryDosDevice, ну или посмотреть в WinObj (Sysinternals). Отпишитесь по результатам. Тема интересная, а воспроизвести такое поведение, как в Вашем случае, у меня не на чем.
0
|
||
|
0 / 0 / 1
Регистрация: 16.10.2011
Сообщений: 53
|
||||||||||||
| 07.11.2013, 12:30 [ТС] | ||||||||||||
![]() Ну я как подумал решить эту проблему. 1. Приходит событие подключения съемного диска DBT_DEVTYP_VOLUME 2. Из него я извлекаю букву диска (Е: или F: например) 3. Отправляю букву в функцию с MOUNTMNGR там идет перебор всех подключенных дисков и если в строке buffer типа (\DosDevices\A есть совпадение с нашей буквой то возвращается символьная ссылка устройства (\??\****#*****#{***})
4.1 Если у нас 7 то мы ничего не делаем а просто извлекаем информацию об этом устройстве с помощью SetupDiGetClassDevs (указывая Enumerate = DeviceInstanseID) SetupDiEnumDeviceInfo SetupDiGetDeviceRegistryProperty Ну мне достаточно Friendlyname, Class, Enumeratorname 4.2 А вот если у нас ХР тогда мы заведомо знаем что полученное в функции это USBSTOR#RemovableMedia#******#{***} и тогда отправляем эту символьную ссылку в функцию которая находит DeviceInstanceID родителя этого RemovableMedia (при помощи SetupDiGetClassDevs SetupDiEnumDeviceInterfaces SetupDiGetDeviceInterfaceDetail ) И в итоге получаю DeviceInstanceID который возвращаю в функцию которая на шаге(4.1) !!Но вот неизвестно будет ли такая штука работать с переносными HDD которые определяются как логические диски. Будет ли приходить событие DBT_DEVTYP_VOLUME при их подключении или нет. *Для тех устройств которые уже подключены до запуска программы еще не думал как реализовать. PS что за объекты? это \Device\HarddiskVolume1 ? я думаю от них некуда шагать. функция поиска строки в подстроке)
0
|
||||||||||||
|
Ушел с форума
|
|||
| 07.11.2013, 13:28 | |||
|
получаются идентичными. Кстати, диспетчер оборудования ведь как-то умеет определять тома дисков. На досуге посмотрю каким-нибудь API Monitor-ом, как он это делает. Что-то мне подсказывает, что все должно быть проще, через IOCTL-запросы к девайсам, разрешение символьных ссылок и прочую простую логику. Способ, который Вы привели, возможно и рабочий, но уж больно он заумный для такой стандартной операции. Одна получена из SetupDiGetDeviceInterfaceDetail, вторая у mount manager-а. Их нужно сравнить. На Win7 они (для данного конкретного случая) одинаковы, а на WinXP разные (опять же, я рассматриваю эту ситуацию как некий специальный случай, что она не обязана повторяться на других дисках). Теперь вызовем на обеих ссылках QueryDosDevice и получим имя устройства, на которое они указывают. И вот полученные имена уже можно сравнивать. Повторяю, это лишь предположение, так как проверить мне не на чем.
0
|
|||
|
0 / 0 / 1
Регистрация: 16.10.2011
Сообщений: 53
|
||
| 07.11.2013, 16:37 [ТС] | ||
|
А у вас на ХР когда флешку вставляете появляется в диспетчере как у меня отдельный раздел с RemovableMedia?
0
|
||
|
Ушел с форума
|
|
| 07.11.2013, 16:56 | |
|
0
|
|
|
0 / 0 / 1
Регистрация: 16.10.2011
Сообщений: 53
|
||
| 07.11.2013, 17:01 [ТС] | ||
|
0
|
||
|
Ушел с форума
|
|
| 07.11.2013, 17:26 | |
|
VMWare и под Windows позволяет прокидывать устройства, насколько я знаю.
Но я пользуюсь Hyper-V на 2008-ом серваке, там этой возможности нет. А вживую видел XP где-то год назад ![]() Так что результаты изысканий в этой теме очень интересуют. Я позже покопаю диспетчер устройств, если удастся что-то найти - отпишусь.
0
|
|
|
0 / 0 / 1
Регистрация: 16.10.2011
Сообщений: 53
|
|
| 07.11.2013, 18:55 [ТС] | |
|
Испытал DBT_DEVTYPE_VOLUME событие приходит кстати во всех случая появления нового диска
1. Флешка 2. Внешний жесткий диск 3. Флешка-модем монтирующаяся как CD-привод!!
0
|
|
|
0 / 0 / 1
Регистрация: 16.10.2011
Сообщений: 53
|
|
| 08.11.2013, 19:54 [ТС] | |
|
Вообщем поставил виртуалкой Vista, всё также как и на Windows 7
Т е никаких RemovableMedia так что получается это специфика Windows XP (то что появляется эта дополнительная ветка в Диспетчере устройств) Ну придется находить родителя RemovableMedia немного муторно но будет точно работать)
0
|
|
|
Ушел с форума
|
||
| 08.11.2013, 20:05 | ||
|
обе символьные ссылки, которые получаются на XP...
0
|
||
|
0 / 0 / 1
Регистрация: 16.10.2011
Сообщений: 53
|
|
| 08.11.2013, 20:21 [ТС] | |
|
Скорее всего я непонимаю что куда кормить))
Вот структура DWORD WINAPI QueryDosDevice( _In_opt_ LPCTSTR lpDeviceName, - это у нас буква диска C: E: D: _Out_ LPTSTR lpTargetPath, - это чтото вроде \Device\CdRom _In_ DWORD ucchMax - чтото вроде кол-ва символов );
0
|
|
|
Ушел с форума
|
||
| 08.11.2013, 20:52 | ||
|
Первый параметр - символьная ссылка.
На XP у Вас получаются две ссылки:
0
|
||
|
0 / 0 / 1
Регистрация: 16.10.2011
Сообщений: 53
|
||
| 08.11.2013, 21:22 [ТС] | ||
|
DWORD i = QueryDosDevice(device1,device2,sizeof(de vice2)); чтото типа того ? на выходных попробую)
0
|
||
|
Ушел с форума
|
|||||||
| 08.11.2013, 21:34 | |||||||
|
Грубо говоря:
P.S. Удачных выходных !
0
|
|||||||
|
0 / 0 / 1
Регистрация: 16.10.2011
Сообщений: 53
|
|||||||
| 10.11.2013, 12:56 [ТС] | |||||||
|
ничего не возвращает (пробывал и с %ls) тоже пусто. А теперь появилась еще проблема как узнать по букве диска что это именно съемный диск? С сетевыми понятно.
Но проблема в чем 1. Флоппик определяется как Removable 2. Переносной HDD на 500гб определяется как Fixed
0
|
|||||||
|
Ушел с форума
|
|||
| 10.11.2013, 16:36 | |||
|
Сначала одну ссылку скормить в QueryDosDevice, затем вторую. И сравнить полученные значения.
0
|
|||
|
Maniac
|
|
| 11.11.2013, 17:04 | |
|
1
|
|
|
0 / 0 / 1
Регистрация: 16.10.2011
Сообщений: 53
|
||||||||||||
| 23.11.2013, 11:25 [ТС] | ||||||||||||
0
|
||||||||||||
|
Ушел с форума
|
||||||
| 23.11.2013, 11:41 | ||||||
|
WinDDK 7600.1, /inc/api/cfgmgr32.h
0
|
||||||
| 23.11.2013, 11:41 | |
|
Помогаю со студенческими работами здесь
39
Работа с эндпоинтами устройств USB и setupapi Ошибка монтирования образа диска на VirtualBox Программа для монтирования образа диска (iso) Как изменить флаги монтирования по умолчанию для usb-носителей? Python linux нужно написать программу для монтирования и размонтирования usb Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Как я обхитрил таблицу Word
Alexander-7 21.03.2026
Когда мигает курсор у внешнего края таблицы, и нам надо перейти на новую строку, а при нажатии Enter создается новый ряд таблицы с ячейками, то мы вместо нервных нажатий Энтеров мы пишем любые буквы. . .
|
Krabik - рыболовный бот для WoW 3.3.5a
AmbA 21.03.2026
без регистрации и смс.
Это не торговля, приложение не содержит рекламы. Выполняет свою непосредственную задачу - автоматизацию рыбалки в WoW - и ничего более. Однако если админы будут против -. . .
|
Программный отбор значений справочника
Maks 21.03.2026
Установка программного отбора значений справочника "Сотрудники" из модуля формы документа.
В качестве фильтра для отбора служит предопределенное значение перечислений.
Процедура. . .
|
Переходник USB-CAN-GPIO
Eddy_Em 20.03.2026
Достаточно давно на работе возникла необходимость в переходнике CAN-USB с гальваноразвязкой, оный и был разработан. Однако, все меня терзала совесть, что аж 48-ногий МК используется так тупо: просто. . .
|
|
Оттенки серого
Argus19 18.03.2026
Оттенки серого
Нашёл в интернете 3 прекрасных модуля:
Модуль класса открытия диалога открытия/ сохранения файла на Win32 API;
Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
|
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога
Финальные проекты на Си и на C++:
finish-rectangles-sdl3-c. zip
finish-rectangles-sdl3-cpp. zip
|
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие.
Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
|
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ВВЕДЕНИЕ
Выполняя задание на управление насосной группой заполнения резервуара,. . .
|