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.
Además, puede especificar el siguiente valor.
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) |