RegisterDeviceNotificationA, fonction (winuser.h)
Inscrit l’appareil ou le type d’appareil pour lequel une fenêtre recevra des notifications.
Notes
Vous pouvez utiliser CM_Register_Notification au lieu de RegisterDeviceNotification si votre code cible des versions Windows 8 ou plus récentes de Windows. L’avantage de CM_Register_Notification est qu’il ne nécessite pas de poignée de fenêtre pour fonctionner.
Syntaxe
HDEVNOTIFY RegisterDeviceNotificationA(
[in] HANDLE hRecipient,
[in] LPVOID NotificationFilter,
[in] DWORD Flags
);
Paramètres
[in] hRecipient
Handle de la fenêtre ou du service qui recevra des événements d’appareil pour les appareils spécifiés dans le paramètre NotificationFilter . Le même handle de fenêtre peut être utilisé dans plusieurs appels à RegisterDeviceNotification.
Les services peuvent spécifier un handle de fenêtre ou un status de service.
[in] NotificationFilter
Pointeur vers un bloc de données qui spécifie le type d’appareil pour lequel les notifications doivent être envoyées. Ce bloc commence toujours par la structure DEV_BROADCAST_HDR . Les données qui suivent cet en-tête dépendent de la valeur du membre dbch_devicetype , qui peut être DBT_DEVTYP_DEVICEINTERFACE ou DBT_DEVTYP_HANDLE. Pour plus d'informations, consultez la section Notes.
[in] Flags
Ce paramètre peut prendre les valeurs suivantes.
En outre, vous pouvez spécifier la valeur suivante.
Valeur retournée
Si la fonction réussit, la valeur de retour est un handle de notification d’appareil.
Si la fonction échoue, la valeur de retour est NULL. Pour obtenir des informations détaillées sur l’erreur, appelez GetLastError.
Remarques
Les applications envoient des notifications d’événements à l’aide de la fonction BroadcastSystemMessage . Toute application avec une fenêtre de niveau supérieur peut recevoir des notifications de base en traitant le message WM_DEVICECHANGE . Les applications peuvent utiliser la fonction RegisterDeviceNotification pour s’inscrire afin de recevoir des notifications d’appareil.
Les services peuvent utiliser la fonction RegisterDeviceNotification pour s’inscrire afin de recevoir des notifications d’appareil. Si un service spécifie un handle de fenêtre dans le paramètre hRecipient , les notifications sont envoyées à la procédure de fenêtre. Si hRecipient est un handle de status de service, SERVICE_CONTROL_DEVICEEVENT notifications sont envoyées au gestionnaire de contrôle de service. Pour plus d’informations sur le gestionnaire de contrôle de service, consultez HandlerEx.
Veillez à gérer Plug-and-Play événements d’appareil aussi rapidement que possible. Sinon, le système risque de ne plus répondre. Si votre gestionnaire d’événements doit effectuer une opération susceptible de bloquer l’exécution (par exemple, les E/S), il est préférable de démarrer un autre thread pour effectuer l’opération de manière asynchrone.
Les handles de notification d’appareil retournés par RegisterDeviceNotification doivent être fermés en appelant la fonction UnregisterDeviceNotification lorsqu’ils ne sont plus nécessaires.
Les événements DBT_DEVICEARRIVAL et DBT_DEVICEREMOVECOMPLETE sont automatiquement diffusés sur toutes les fenêtres de niveau supérieur pour les appareils de port. Par conséquent, il n’est pas nécessaire d’appeler RegisterDeviceNotification pour les ports, et la fonction échoue si le membre dbch_devicetype est DBT_DEVTYP_PORT. Les notifications de volume sont également diffusées dans les fenêtres de niveau supérieur, de sorte que la fonction échoue si dbch_devicetype est DBT_DEVTYP_VOLUME. Les appareils définis par l’OEM ne sont pas utilisés directement par le système. Par conséquent, la fonction échoue si dbch_devicetype est DBT_DEVTYP_OEM.
Exemples
Pour obtenir un exemple, consultez Inscription à la notification d’appareil.
Notes
L’en-tête winuser.h définit RegisterDeviceNotification en tant qu’alias qui sélectionne automatiquement la version ANSI ou Unicode de cette fonction en fonction de la définition de la constante de préprocesseur UNICODE. La combinaison de l’utilisation de l’alias neutre en encodage avec du code qui n’est pas neutre en encodage peut entraîner des incompatibilités qui entraînent des erreurs de compilation ou d’exécution. Pour plus d’informations, consultez Conventions pour les prototypes de fonction.
Configuration requise
Condition requise | Valeur |
---|---|
Client minimal pris en charge | Windows XP |
Serveur minimal pris en charge | Windows Server 2003 |
Plateforme cible | Windows |
En-tête | winuser.h (inclure Windows.h) |
Bibliothèque | User32.lib |
DLL | User32.dll |
Ensemble d’API | ext-ms-win-ntuser-misc-l1-1-0 (introduit dans Windows 8) |