hasherfrog
09-12-2004, 18:44
Задача уже не требует решения.
Конфигурация: Windows XP, USB-концентратор (определяется как «универсальный USB концентратор») на 4 порта, к нему цепляются 4 кард-ридера (определяются как «Запоминающее устройство для USB»). В кард-ридеры пихаем MMC-карты, виндовый проводник шустро на них реагирует, моментально открывая окошки автозапуска («Какое действие следует выполнять виндоуз?»). Теперь тоже самое нам надо определить из своей программы – как только карточку вставят, мы должны 1. узнать об этом; 2. определить букву диска. Несмотря на кажущуюся простоту, нас ждёт облом.
Решение было лобовое – отлавливаем WM_DEVICECHANGE и смотрим, что там произошло. Но оказалось, что сообщение об изменении статуса USB-устройства приходит с огромной задержкой (а иногда и вообще не приходит, например, если карточку вытащить). За это время карточку можно раз двадцать вытащить/ставить. Повторяю, виндовый проводник реагирует мгновенно.
Теоретически, траблы можно было бы списать на то, что собственно никакого изменения конфигурации не происходит, ибо диски, соответствующие USB накопителям, никуда не исчезают из системы при вытаскивании MMC (и не появляются, соответственно). Отключения-то не происходит, устройства так и числятся в «Мой компьютер», как, например, дисковод – он же там всегда есть, с дискетой или без. Но тогда бы не приходило бы вообще никаких сообщений. А так – приходят, но с огромной паузой.
В PSDK ясно написано, что
The system broadcasts a set of default device change events to all applications and services. You do not need to register to receive these default events. See the Remarks section in RegisterDeviceNotification for details.
Мысли есть?
Конфигурация: Windows XP, USB-концентратор (определяется как «универсальный USB концентратор») на 4 порта, к нему цепляются 4 кард-ридера (определяются как «Запоминающее устройство для USB»). В кард-ридеры пихаем MMC-карты, виндовый проводник шустро на них реагирует, моментально открывая окошки автозапуска («Какое действие следует выполнять виндоуз?»). Теперь тоже самое нам надо определить из своей программы – как только карточку вставят, мы должны 1. узнать об этом; 2. определить букву диска. Несмотря на кажущуюся простоту, нас ждёт облом.
Решение было лобовое – отлавливаем WM_DEVICECHANGE и смотрим, что там произошло. Но оказалось, что сообщение об изменении статуса USB-устройства приходит с огромной задержкой (а иногда и вообще не приходит, например, если карточку вытащить). За это время карточку можно раз двадцать вытащить/ставить. Повторяю, виндовый проводник реагирует мгновенно.
Теоретически, траблы можно было бы списать на то, что собственно никакого изменения конфигурации не происходит, ибо диски, соответствующие USB накопителям, никуда не исчезают из системы при вытаскивании MMC (и не появляются, соответственно). Отключения-то не происходит, устройства так и числятся в «Мой компьютер», как, например, дисковод – он же там всегда есть, с дискетой или без. Но тогда бы не приходило бы вообще никаких сообщений. А так – приходят, но с огромной паузой.
В PSDK ясно написано, что
The system broadcasts a set of default device change events to all applications and services. You do not need to register to receive these default events. See the Remarks section in RegisterDeviceNotification for details.
Мысли есть?