Compartir a través de


Función RegisterDeviceNotificationW (winuser.h)

Registra el dispositivo o el tipo de dispositivo para el que una ventana recibirá notificaciones.

Nota

Puede usar CM_Register_Notification en lugar de RegisterDeviceNotification si el código tiene como destino Windows 8 o versiones más recientes de Windows. La ventaja de CM_Register_Notification es que no requiere un identificador de ventana para funcionar.

Sintaxis

HDEVNOTIFY RegisterDeviceNotificationW(
  [in] HANDLE hRecipient,
  [in] LPVOID NotificationFilter,
  [in] DWORD  Flags
);

Parámetros

[in] hRecipient

Identificador de la ventana o servicio que recibirá eventos de dispositivo para los dispositivos especificados en el parámetro NotificationFilter . El mismo identificador de ventana se puede usar en varias llamadas a RegisterDeviceNotification.

Los servicios pueden especificar un identificador de ventana o un identificador de estado de servicio.

[in] NotificationFilter

Puntero a un bloque de datos que especifica el tipo de dispositivo para el que se deben enviar las notificaciones. Este bloque siempre comienza con la estructura DEV_BROADCAST_HDR . Los datos siguientes a este encabezado dependen del valor del miembro dbch_devicetype , que puede ser DBT_DEVTYP_DEVICEINTERFACE o DBT_DEVTYP_HANDLE. Para obtener más información, vea la sección Comentarios.

[in] Flags

Este parámetro puede ser uno de los valores siguientes.

Valor Significado
DEVICE_NOTIFY_WINDOW_HANDLE
0x00000000
El parámetro hRecipient es un identificador de ventana.
DEVICE_NOTIFY_SERVICE_HANDLE
0x00000001
El parámetro hRecipient es un identificador de estado del servicio.
 

Además, puede especificar el siguiente valor.

Valor Significado
DEVICE_NOTIFY_ALL_INTERFACE_CLASSES
0x00000004
Notifica al destinatario de eventos de interfaz de dispositivo para todas las clases de interfaz de dispositivo. (Se omite el miembro dbcc_classguid ).

Este valor solo se puede usar si el miembro dbch_devicetype es DBT_DEVTYP_DEVICEINTERFACE.

Valor devuelto

Si la función se ejecuta correctamente, el valor devuelto es un identificador de notificación de dispositivo.

Si se produce un error en la función, el valor devuelto es NULL. Para obtener información de error extendida, llame a GetLastError.

Comentarios

Las aplicaciones envían notificaciones de eventos mediante la función BroadcastSystemMessage . Cualquier aplicación con una ventana de nivel superior puede recibir notificaciones básicas procesando el mensaje WM_DEVICECHANGE . Las aplicaciones pueden usar la función RegisterDeviceNotification para registrarse para recibir notificaciones de dispositivo.

Los servicios pueden usar la función RegisterDeviceNotification para registrarse para recibir notificaciones de dispositivo. Si un servicio especifica un identificador de ventana en el parámetro hRecipient , las notificaciones se envían al procedimiento de ventana. Si hRecipient es un identificador de estado del servicio, SERVICE_CONTROL_DEVICEEVENT notificaciones se envían al controlador de control de servicio. Para obtener más información sobre el controlador de control de servicio, vea HandlerEx.

Asegúrese de controlar Plug and Play eventos de dispositivo lo antes posible. De lo contrario, el sistema puede dejar de responder. Si el controlador de eventos es realizar una operación que pueda bloquear la ejecución (por ejemplo, E/S), es mejor iniciar otro subproceso para realizar la operación de forma asincrónica.

Los identificadores de notificación de dispositivo devueltos por RegisterDeviceNotification deben cerrarse llamando a la función UnregisterDeviceNotification cuando ya no sean necesarios.

Los eventos DBT_DEVICEARRIVAL y DBT_DEVICEREMOVECOMPLETE se transmiten automáticamente a todas las ventanas de nivel superior para dispositivos de puerto. Por lo tanto, no es necesario llamar a RegisterDeviceNotification para los puertos y se produce un error en la función si el miembro dbch_devicetype es DBT_DEVTYP_PORT. Las notificaciones por volumen también se transmiten a ventanas de nivel superior, por lo que la función produce un error si dbch_devicetype está DBT_DEVTYP_VOLUME. El sistema no usa directamente los dispositivos definidos por OEM, por lo que se produce un error en la función si dbch_devicetype es DBT_DEVTYP_OEM.

Ejemplos

Para obtener un ejemplo, consulte Registro para la notificación del dispositivo.

Nota

El encabezado winuser.h define RegisterDeviceNotification como alias que selecciona automáticamente la versión ANSI o Unicode de esta función en función de la definición de la constante de preprocesador UNICODE. La combinación del uso del alias neutro de codificación con código que no es neutral de codificación puede provocar discrepancias que dan lugar a errores de compilación o en tiempo de ejecución. Para obtener más información, vea Convenciones para prototipos de función.

Requisitos

   
Cliente mínimo compatible Windows XP
Servidor mínimo compatible Windows Server 2003
Plataforma de destino Windows
Encabezado winuser.h (incluya Windows.h)
Library User32.lib
Archivo DLL User32.dll
Conjunto de API ext-ms-win-ntuser-misc-l1-1-0 (introducido en Windows 8)

Consulte también

BroadcastSystemMessage

DEV_BROADCAST_HDR

Funciones de Administración de dispositivos

Notificaciones de dispositivo

HandlerEx

RegisterDeviceNotification

UnregisterDeviceNotification

WM_DEVICECHANGE