Tipos de eventos de dispositivo
Para determinar o tipo de evento do dispositivo ao processar uma mensagem WM_DEVICECHANGE, examine o parâmetro wParam. O valor de wParam determina o significado dos dados específicos do evento no parâmetro lParam . Em geral, os dados específicos do evento identificam o dispositivo e fornecem detalhes adicionais sobre o evento. O formato desses dados depende do tipo de dispositivo, mas os primeiros bytes sempre têm o mesmo formato que a estrutura DEV_BROADCAST_HDR. Para determinar o formato dos dados, verifique o membro dbch_devicetype .
O sistema transmite um evento de dispositivo do tipo DBT_DEVICEARRIVAL (ou seja, uma mensagem de WM_DEVICECHANGE com wParam definido como DBT_DEVICEARRIVAL) sempre que um dispositivo foi inserido e está disponível para uso. Os aplicativos normalmente verificam o tipo de dispositivo e começam a usá-lo imediatamente, se for apropriado.
O sistema transmite um evento de dispositivo DBT_DEVICEQUERYREMOVE para solicitar permissão para remover um dispositivo. Para determinar se ele precisa do dispositivo, um aplicativo pode exibir uma caixa de diálogo para solicitar instruções ao usuário. Se um aplicativo determinar que precisa do dispositivo, ele poderá negar essa solicitação e cancelar a remoção retornando BROADCAST_QUERY_DENY. Se o aplicativo não precisar do dispositivo, ele deve retornar TRUE. O sistema envia imediatamente uma mensagem de DBT_DEVICEQUERYREMOVEFAILED se algum aplicativo ou driver cancelou uma solicitação anterior para remover um dispositivo.
O sistema transmite um evento de dispositivo DBT_DEVICEREMOVEPENDING como um último aviso antes de um dispositivo ser removido. Neste ponto, o aplicativo não pode cancelar a remoção, portanto, se estiver usando o dispositivo, deve se preparar para sua remoção para evitar a perda de dados. Isso é especialmente importante quando uma conexão de rede está sendo removida. O aplicativo deve determinar se algum de seus arquivos ou pipes abertos está nessa conexão. Ele pode fazer isso comparando o identificador de recurso de rede nos dados específicos do evento da mensagem com os identificadores de recurso obtidos anteriormente para os arquivos e pipes. O sistema transmite um evento de dispositivo DBT_DEVICEREMOVECOMPLETE quando um dispositivo foi removido e não está mais disponível.
O sistema transmite um evento de dispositivo DBT_QUERYCHANGECONFIG para solicitar permissão para alterar a configuração atual (dock ou undock). Qualquer aplicativo pode retornar BROADCAST_QUERY_DENY para negar o pedido e cancelar a alteração. Se um aplicativo negar a solicitação, o sistema enviará uma mensagem DBT_CONFIGCHANGECANCELED. Se a configuração atual tiver sido alterada, devido a um dock ou undock, o sistema enviará uma mensagem DBT_CONFIGCHANGED .
O sistema transmite um evento de dispositivo DBT_DEVICETYPESPECIFIC sempre que ocorre um evento específico do dispositivo.
Os drivers podem criar seus próprios tipos de eventos personalizados. Os eventos personalizados são enviados somente para aplicativos que se registraram para notificação de evento de dispositivo em um dispositivo específico e só podem ser iniciados por drivers de modo kernel. Para obter mais informações, consulte DBT_CUSTOMEVENT.