Типы событий устройства
Чтобы определить тип события устройства при обработке сообщения 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.