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.

Valeur Signification
DEVICE_NOTIFY_WINDOW_HANDLE
0x00000000
Le paramètre hRecipient est un handle de fenêtre.
DEVICE_NOTIFY_SERVICE_HANDLE
0x00000001
Le paramètre hRecipient est un handle de status de service.
 

En outre, vous pouvez spécifier la valeur suivante.

Valeur Signification
DEVICE_NOTIFY_ALL_INTERFACE_CLASSES
0x00000004
Avertit le destinataire des événements d’interface d’appareil pour toutes les classes d’interface d’appareil. (Le membre dbcc_classguid est ignoré.)

Cette valeur ne peut être utilisée que si le membre dbch_devicetype est DBT_DEVTYP_DEVICEINTERFACE.

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)

Voir aussi

BroadcastSystemMessage

DEV_BROADCAST_HDR

Gestion des appareils Functions

Notifications de l’appareil

HandlerEx

RegisterDeviceNotification

UnregisterDeviceNotification

WM_DEVICECHANGE