Freigeben über


RegisterDeviceNotificationA-Funktion (winuser.h)

Registriert das Gerät oder den Typ des Geräts, für das ein Fenster Benachrichtigungen empfängt.

Hinweis

Sie können CM_Register_Notification anstelle von RegisterDeviceNotification verwenden, wenn Ihr Code auf Windows 8 oder neuere Versionen von Windows abzielt. Der Vorteil von CM_Register_Notification besteht darin, dass kein Fensterhandle erforderlich ist, um zu funktionieren.

Syntax

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

Parameter

[in] hRecipient

Ein Handle für das Fenster oder den Dienst, das Geräteereignisse für die im NotificationFilter-Parameter angegebenen Geräte empfängt. Das gleiche Fensterhandle kann in mehreren Aufrufen von RegisterDeviceNotification verwendet werden.

Dienste können entweder ein Fensterhandle oder ein Dienst-status-Handle angeben.

[in] NotificationFilter

Ein Zeiger auf einen Datenblock, der den Typ des Geräts angibt, für das Benachrichtigungen gesendet werden sollen. Dieser Block beginnt immer mit der DEV_BROADCAST_HDR-Struktur . Die auf diesen Header folgenden Daten hängen vom Wert des dbch_devicetype-Elements ab, der DBT_DEVTYP_DEVICEINTERFACE oder DBT_DEVTYP_HANDLE sein kann. Weitere Informationen finden Sie in den Hinweisen.

[in] Flags

Dieser Parameter kann einen der folgenden Werte annehmen.

Wert Bedeutung
DEVICE_NOTIFY_WINDOW_HANDLE
0x00000000
Der Parameter hRecipient ist ein Fensterhandle.
DEVICE_NOTIFY_SERVICE_HANDLE
0x00000001
Der hRecipient-Parameter ist ein Dienst status Handle.
 

Darüber hinaus können Sie den folgenden Wert angeben.

Wert Bedeutung
DEVICE_NOTIFY_ALL_INTERFACE_CLASSES
0x00000004
Benachrichtigt den Empfänger von Geräteschnittstellenereignissen für alle Geräteschnittstellenklassen. (Der dbcc_classguid-Member wird ignoriert.)

Dieser Wert kann nur verwendet werden, wenn das dbch_devicetype-ElementDBT_DEVTYP_DEVICEINTERFACE ist.

Rückgabewert

Wenn die Funktion erfolgreich ist, ist der Rückgabewert ein Gerätebenachrichtigungshandle.

Wenn bei der Funktion ein Fehler auftritt, ist der Rückgabewert NULL. Um erweiterte Fehlerinformationen zu erhalten, rufen Sie GetLastError auf.

Hinweise

Anwendungen senden Ereignisbenachrichtigungen mithilfe der BroadcastSystemMessage-Funktion . Jede Anwendung mit einem Fenster auf oberster Ebene kann grundlegende Benachrichtigungen empfangen, indem sie die WM_DEVICECHANGE Nachricht verarbeitet. Anwendungen können die RegisterDeviceNotification-Funktion verwenden, um sich für den Empfang von Gerätebenachrichtigungen zu registrieren.

Dienste können die RegisterDeviceNotification-Funktion verwenden, um sich für den Empfang von Gerätebenachrichtigungen zu registrieren. Wenn ein Dienst ein Fensterhandle im hRecipient-Parameter angibt, werden die Benachrichtigungen an die Fensterprozedur gesendet. Wenn hRecipient ein Dienst status Handle ist, werden SERVICE_CONTROL_DEVICEEVENT Benachrichtigungen an den Dienststeuerungshandler gesendet. Weitere Informationen zum Dienststeuerelementhandler finden Sie unter HandlerEx.

Achten Sie darauf, Plug & Play Geräteereignisse so schnell wie möglich zu behandeln. Andernfalls reagiert das System möglicherweise nicht mehr. Wenn Ihr Ereignishandler einen Vorgang ausführt, der die Ausführung möglicherweise blockiert (z. B. E/A), empfiehlt es sich, einen anderen Thread zu starten, um den Vorgang asynchron auszuführen.

Von RegisterDeviceNotification zurückgegebene Gerätebenachrichtigungshandles müssen geschlossen werden, indem die UnregisterDeviceNotification-Funktion aufgerufen wird, wenn sie nicht mehr benötigt werden.

Die DBT_DEVICEARRIVAL - und DBT_DEVICEREMOVECOMPLETE-Ereignisse werden automatisch an alle Fenster der obersten Ebene für Portgeräte übertragen. Daher ist es nicht erforderlich, RegisterDeviceNotification für Ports aufzurufen, und die Funktion schlägt fehl, wenn der dbch_devicetype Member DBT_DEVTYP_PORT ist. Volumebenachrichtigungen werden auch an Fenster der obersten Ebene übertragen, sodass die Funktion fehlschlägt, wenn dbch_devicetypeDBT_DEVTYP_VOLUME ist. OEM-definierte Geräte werden vom System nicht direkt verwendet, sodass die Funktion fehlschlägt, wenn dbch_devicetypeDBT_DEVTYP_OEM ist.

Beispiele

Ein Beispiel finden Sie unter Registrieren für Gerätebenachrichtigungen.

Hinweis

Der winuser.h-Header definiert RegisterDeviceNotification als Alias, der die ANSI- oder Unicode-Version dieser Funktion basierend auf der Definition der UNICODE-Präprozessorkonstante automatisch auswählt. Das Mischen der Verwendung des codierungsneutralen Alias mit Code, der nicht Codierungsneutral ist, kann zu Nichtübereinstimmungen führen, die zu Kompilierungs- oder Laufzeitfehlern führen. Weitere Informationen finden Sie unter Konventionen für Funktionsprototypen.

Anforderungen

Anforderung Wert
Unterstützte Mindestversion (Client) Windows XP
Unterstützte Mindestversion (Server) Windows Server 2003
Zielplattform Windows
Kopfzeile winuser.h (windows.h einschließen)
Bibliothek User32.lib
DLL User32.dll
APIs ext-ms-win-ntuser-misc-l1-1-0 (eingeführt in Windows 8)

Weitere Informationen

BroadcastSystemMessage

DEV_BROADCAST_HDR

Geräteverwaltung-Funktionen

Gerätebenachrichtigungen

HandlerEx

RegisterDeviceNotification

UnregisterDeviceNotification

WM_DEVICECHANGE