Tipos de eventos de dispositivo
Para determinar el tipo de evento de dispositivo al procesar un mensaje de WM_DEVICECHANGE , examine el parámetro wParam . El valor de wParam determina el significado de los datos específicos del evento en el parámetro lParam . En general, los datos específicos del evento identifican el dispositivo y proporcionan detalles adicionales sobre el evento. El formato de estos datos depende del tipo de dispositivo, pero los primeros bytes siempre tienen el mismo formato que la estructura DEV_BROADCAST_HDR . Para determinar el formato de los datos, compruebe el miembro dbch_devicetype .
El sistema difunde un evento de dispositivo de tipo DBT_DEVICEARRIVAL (es decir, un mensaje de WM_DEVICECHANGE con wParam establecido en DBT_DEVICEARRIVAL) siempre que se haya insertado un dispositivo y esté disponible para su uso. Normalmente, las aplicaciones comprueban el tipo de dispositivo y comienzan a usar el dispositivo inmediatamente si es adecuado.
El sistema difunde un evento de dispositivo DBT_DEVICEQUERYREMOVE para solicitar permiso para quitar un dispositivo. Para determinar si necesita el dispositivo, una aplicación puede mostrar un cuadro de diálogo para solicitar al usuario instrucciones. Si una aplicación determina que necesita el dispositivo, puede denegar esta solicitud y cancelar la eliminación devolviendo BROADCAST_QUERY_DENY. Si la aplicación no necesita el dispositivo, debe devolver TRUE. El sistema envía inmediatamente un mensaje de DBT_DEVICEQUERYREMOVEFAILED si alguna aplicación o controlador canceló una solicitud anterior para quitar un dispositivo.
El sistema difunde un evento de dispositivo DBT_DEVICEREMOVEPENDING como una última advertencia antes de quitar un dispositivo. En este momento, la aplicación no puede cancelar la eliminación, por lo que si usa el dispositivo, debe prepararse para su eliminación para evitar la pérdida de datos. Esto es especialmente importante cuando se quita una conexión de red. La aplicación debe determinar si alguno de sus archivos abiertos o canalizaciones está en esa conexión. Para ello, compare el identificador de recursos de red en los datos específicos del evento del mensaje con los identificadores de recursos obtenidos anteriormente para los archivos y canalizaciones. El sistema difunde un evento de dispositivo DBT_DEVICEREMOVECOMPLETE cuando se ha quitado un dispositivo y ya no está disponible.
El sistema difunde un evento de dispositivo DBT_QUERYCHANGECONFIG para solicitar permiso para cambiar la configuración actual (acoplamiento o desacoplar). Cualquier aplicación puede devolver BROADCAST_QUERY_DENY para denegar la solicitud y cancelar el cambio. Si una aplicación deniega la solicitud, el sistema envía un mensaje DBT_CONFIGCHANGECANCELED . Si ha cambiado la configuración actual, debido a un acoplamiento o desacoplar, el sistema envía un mensaje de DBT_CONFIGCHANGED .
El sistema difunde un evento de dispositivo DBT_DEVICETYPESPECIFIC cada vez que se produce un evento específico del dispositivo.
Los controladores pueden crear sus propios tipos de eventos personalizados. Los eventos personalizados solo se envían a la aplicación que se han registrado para la notificación de eventos de dispositivo en un dispositivo determinado y solo se pueden iniciar mediante controladores en modo kernel. Para obtener más información, consulte DBT_CUSTOMEVENT.