Tipos de evento do dispositivo
Para determinar o tipo de evento do dispositivo ao processar uma mensagem de 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 WM_DEVICECHANGE com wParam definido como DBT_DEVICEARRIVAL) sempre que um dispositivo for inserido e estiver disponível para uso. Normalmente, os aplicativos verificam o tipo de dispositivo e começam a usar o dispositivo imediatamente, se for apropriado.
O sistema transmite um evento de DBT_DEVICEQUERYREMOVE dispositivo 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 deverá retornar VERDADEIRO. O sistema envia imediatamente uma mensagem de DBT_DEVICEQUERYREMOVEFAILED se qualquer aplicativo ou driver cancelou uma solicitação anterior para remover um dispositivo.
O sistema transmite um evento de DBT_DEVICEREMOVEPENDING dispositivo 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, ele deverá 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 abertos ou pipes 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 DBT_DEVICEREMOVECOMPLETE dispositivo quando um dispositivo foi removido e não está mais disponível.
O sistema transmite um evento de DBT_QUERYCHANGECONFIG dispositivo para solicitar permissão para alterar a configuração atual (encaixe ou desencaixe). Qualquer aplicativo pode retornar BROADCAST_QUERY_DENY negar a solicitação 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 encaixe ou desencaixar, o sistema enviará uma mensagem de 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 evento personalizados. Os eventos personalizados são enviados somente para o aplicativo que se registrou 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.