Как определить подключение флеш карт

Обсуждения по программированию для ОС Windows безотносительно используемого языка программирования. Windows NT, Win32, Windows API, ядро и драйверы.
ger_kar
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1957
Зарегистрирован: 19.05.2011 (Чт) 19:23
Откуда: Кыргызстан, Иссык-Куль, г. Каракол

Как определить подключение флеш карт

Сообщение ger_kar » 14.04.2012 (Сб) 10:29

Существует ли вообще такой способ, что-бы определить момент подключения флеш карточек во встроенный картридер ?
Если картридер внешний и подключается вместе с флешкой, то все ОК, такое подключение можно выявить либо обрабатывая оконное сообщение WM_DEVICECHANGE, либо подписавшись на событие WMI. Т.е. система реагирует на подключение контролера к шине USB, но если контролер не подключать/отключать, как например в случае со встроенным картридером, а только вставить карточку, то событие WM_DEVICECHANGE не возникает.
На просторах интернета эта тема поднимается, но единственное решение, которое предлагается в этом случае довольно корявое - опрос в цикле или по таймеру всех дисков подключенных к системе и реагировать на изменение их состава. Но этот способ если опрашивать часто будет жрать уйму ресурсов, а если интервал будет большим, то нужный момент можно просто прозевать. Может такого нормального способа вообще не существует, но все таки я пока питаю надежду, а вдруг...
Бороться и искать, найти и перепрятать

ger_kar
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1957
Зарегистрирован: 19.05.2011 (Чт) 19:23
Откуда: Кыргызстан, Иссык-Куль, г. Каракол

Re: Как определить подключение флеш карт

Сообщение ger_kar » 19.04.2012 (Чт) 15:44

Да видимо проблема не разрешимая штатным образом, а извращений тоже как-то не очень хочется...
Бороться и искать, найти и перепрятать

Qwertiy
Доктор VB наук
Доктор VB наук
 
Сообщения: 2753
Зарегистрирован: 26.06.2011 (Вс) 21:26

Сообщение Qwertiy » 20.04.2012 (Пт) 7:50

Посмотри USB Safely Remove. Думаю, она как-то определяет.

ark
Бывалый
Бывалый
 
Сообщения: 216
Зарегистрирован: 18.07.2011 (Пн) 0:57

Re: Как определить подключение флеш карт

Сообщение ark » 20.08.2012 (Пн) 7:19

Подпишись на изменение ветки реестра HKLM\System\MountedDevices и по изменению проверяй.

ger_kar
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1957
Зарегистрирован: 19.05.2011 (Чт) 19:23
Откуда: Кыргызстан, Иссык-Куль, г. Каракол

Re: Как определить подключение флеш карт

Сообщение ger_kar » 20.08.2012 (Пн) 8:31

Идея интересная, попробую. Хотя набор дисков в таких случаях остается неизменным и меняется только состояние есть/нет носитель, как у CD/DVD привода.
Qwertiy писал(а):Посмотри USB Safely Remove. Думаю, она как-то определяет

Никак она не определяет :(
Бороться и искать, найти и перепрятать

iGrok
Артефакт VBStreets
Артефакт VBStreets
 
Сообщения: 4272
Зарегистрирован: 10.05.2007 (Чт) 16:11
Откуда: Сетевое сознание

Re: Как определить подключение флеш карт

Сообщение iGrok » 20.08.2012 (Пн) 16:01

А автозапуск при этом срабатывает?
label:
cli
jmp label

ger_kar
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1957
Зарегистрирован: 19.05.2011 (Чт) 19:23
Откуда: Кыргызстан, Иссык-Куль, г. Каракол

Re: Как определить подключение флеш карт

Сообщение ger_kar » 20.08.2012 (Пн) 18:20

Нет не срабатывает (у меня по крайней мере) , и само состояние меняется в консоли управления дисками, только после ручного обновления.
И состав HKLM\System\MountedDevices если смотреть вручную в Regedite при вставке/удалении флешки никак не изменяется.
Бороться и искать, найти и перепрятать

ark
Бывалый
Бывалый
 
Сообщения: 216
Зарегистрирован: 18.07.2011 (Пн) 0:57

Re: Как определить подключение флеш карт

Сообщение ark » 21.08.2012 (Вт) 2:59

ger_kar писал(а): Хотя набор дисков в таких случаях остается неизменным
Я навскидку ветку прописал. Возьми RegMon от SysInternals или что-то подобное и посмотри - там наверняка что-то меняется, если не в MountedDevices, то в HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum

ark
Бывалый
Бывалый
 
Сообщения: 216
Зарегистрирован: 18.07.2011 (Пн) 0:57

Re: Как определить подключение флеш карт

Сообщение ark » 21.08.2012 (Вт) 3:48

ЗЫ. Не знаю, как с картридерами, но если USB выдернуть просто-так, то в MountedDevices она остается. Проверяется наличие в HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\DeviceClasses\{53f56307-b6bf-11d0-94f2-00a0c91efb8b} '( {...} - это DEVINTERFACE_DISK). В нем есть ключики вида ##?#USBSTOR#Disk&Ven_ADATA........ или ##?#IDE#DiskST3160215AS - это SymbolicLinks на диски. Так вот, если устройство физически есть, в подключах этих линков присутствует "Control", если нет, то только "#" Вот пример (для XP, на Висте/7 немного по другому)
USBInfo.zip
USB info из реестра
(31.08 Кб) Скачиваний: 328

В MountedDevices также хранятся SymLink'и. Хотя там DataType REG_BINARY, на самом деле это строка в юникоде (кроме HDD - для HDD это серийник)
Т.е сценарий может выглядеть так
1. Подписаться на HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\DeviceClasses\{...}'(DEVINTERFACE_DISK или DEVINTERFACE_VOLUME)
2. При изменении - Прочитать MountedDevices, запомнить буквы НЕ HDD и НЕ USB
3. Пробежаться по DeviceClasses\{53f56307 - сравнить с #2
4. Проверить наличие подключа "Control" - если есть - значит подключен

ger_kar
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1957
Зарегистрирован: 19.05.2011 (Чт) 19:23
Откуда: Кыргызстан, Иссык-Куль, г. Каракол

Re: Как определить подключение флеш карт

Сообщение ger_kar » 21.08.2012 (Вт) 7:59

Спасибо, буду разбираться, но чуть погодя, сейчас другим сильно занят :)
Бороться и искать, найти и перепрятать

Vega251
Начинающий
Начинающий
 
Сообщения: 1
Зарегистрирован: 20.09.2012 (Чт) 10:20
Откуда: Ростов-на-Дону

Re: Как определить подключение флеш карт

Сообщение Vega251 » 20.09.2012 (Чт) 10:26

Спасибо, буду разбираться, но чуть погодя, сейчас другим сильно занят :)

У вас получилось?

ger_kar
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1957
Зарегистрирован: 19.05.2011 (Чт) 19:23
Откуда: Кыргызстан, Иссык-Куль, г. Каракол

Re: Как определить подключение флеш карт

Сообщение ger_kar » 20.09.2012 (Чт) 10:33

Vega251 писал(а):У вас получилось?
Еще не пробовал, времени пока нет. Закончу проект над которым работаю, тогда и поэкспериментирую. После чего отпишусь о результатах
Бороться и искать, найти и перепрятать


Вернуться в Windows-программирование

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 8

    TopList