Поделиться через


Типы событий устройства

Чтобы определить тип события устройства при обработке сообщения WM_DEVICECHANGE, изучите параметр wParam. Значение wParam определяет значение данных, относящихся к событиям, в параметре lParam. Как правило, данные, относящиеся к событию, идентифицируют устройство и предоставляют дополнительные сведения о событии. Формат этих данных зависит от типа устройства, но первые несколько байтов всегда имеют тот же формат, что и структура DEV_BROADCAST_HDR . Чтобы определить формат данных, проверка элемент dbch_devicetype.

Система передает событие типа DBT_DEVICEARRIVAL устройства (т. е. сообщение WM_DEVICECHANGE с набором wParam для DBT_DEVICEARRIVAL), когда устройство вставлено и доступно для использования. Приложения обычно проверка тип устройства и начинают использовать устройство немедленно, если это необходимо.

Система передает событие устройства DBT_DEVICEQUERYREMOVE для запроса разрешения на удаление устройства. Чтобы определить, требуется ли устройству, приложение может отобразить диалоговое окно, чтобы предложить пользователю инструкции. Если приложение определяет, что оно нуждается в устройстве, оно может запретить этот запрос и отменить удаление, возвращая BROADCAST_QUERY_DENY. Если приложению не нужен устройство, он должен вернуть значение TRUE. Система немедленно отправляет сообщение DBT_DEVICEQUERYREMOVEFAILED , если любое приложение или драйвер отменили предыдущий запрос на удаление устройства.

Система передает событие устройства DBT_DEVICEREMOVEPENDING в качестве последнего предупреждения перед удалением устройства. На этом этапе приложение не может отменить удаление, поэтому если оно использует устройство, оно должно подготовиться к удалению, чтобы предотвратить потерю данных. Это особенно важно при удалении сетевого подключения. Приложение должно определить, находятся ли в этом соединении любые открытые файлы или каналы. Это можно сделать, сравнивая идентификатор сетевого ресурса в данных сообщения о событиях с идентификаторами ресурсов, полученными ранее для файлов и каналов. Система передает событие DBT_DEVICEREMOVECOMPLETE устройства при удалении устройства и больше недоступен.

Система передает событие DBT_QUERYCHANGECONFIG устройства, чтобы запросить разрешение на изменение текущей конфигурации (док-станции или отключать). Любое приложение может вернуть BROADCAST_QUERY_DENY, чтобы запретить запрос и отменить изменение. Если приложение запрещает запрос, система отправляет сообщение DBT_CONFIGCHANGECANCELED . Если текущая конфигурация изменилась, из-за док-станции или отключаемой системы система отправляет DBT_CONFIGCHANGED сообщение.

Система передает событие DBT_DEVICETYPESPECIFIC устройства всякий раз, когда происходит событие конкретного устройства.

Драйверы могут создавать собственные пользовательские типы событий. Пользовательские события отправляются только в приложение, зарегистрированное для уведомления об событиях устройства на определенном устройстве, и может инициироваться только драйверами режима ядра. Дополнительные сведения см. в DBT_CUSTOMEVENT.