Compartir a través de


Función RegisterDeviceNotificationA (winuser.h)

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

Nota

Puedes 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 que funcione un identificador de ventana.

Sintaxis

HDEVNOTIFY RegisterDeviceNotificationA(
  [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 para RegisterDeviceNotification.

Los servicios pueden especificar un identificador de ventana o un identificador de estado del 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 Comentarios.

[in] Flags

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

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.

Observaciones

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 mediante el procesamiento del mensaje WM_DEVICECHANGE. Las aplicaciones pueden usar la función RegisterDeviceNotification para registrarse para recibir notificaciones del 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, consulte HandlerEx.

Asegúrese de controlar los eventos del dispositivo Plug and Play 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 necesarias.

Los eventos DBT_DEVICEARRIVAL y DBT_DEVICEREMOVECOMPLETE se transmiten automáticamente a todas las ventanas de nivel superior para los 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 de volumen también se transmiten a ventanas de nivel superior, por lo que la función produce un error si dbch_devicetype es DBT_DEVTYP_VOLUME. El sistema no usa directamente los dispositivos definidos por OEM, por lo que la función produce un error si dbch_devicetype es DBT_DEVTYP_OEM.

Ejemplos

Para obtener un ejemplo, consulte Registro de notificaciones de 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 neutral de codificación con código que no es neutral de codificación puede dar lugar a errores de coincidencia que dan lugar a errores de compilación o tiempo de ejecución. Para obtener más información, vea Conventions for Function Prototypes.

Requisitos

Requisito Valor
cliente mínimo admitido Windows XP
servidor mínimo admitido Windows Server 2003
de la plataforma de destino de Windows
encabezado de winuser.h (incluya Windows.h)
biblioteca de User32.lib
DLL de User32.dll
conjunto de API de 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

de notificaciones de dispositivo de

handlerEx

RegisterDeviceNotification

unregisterDeviceNotification

WM_DEVICECHANGE