Freigeben über


Registrieren für Anwendungsbenachrichtigungen

Eine Anwendung im Benutzermodus ruft die RegisterDeviceNotification-Funktion auf, um sich zu registrieren, um benachrichtigt zu werden, wenn der Hardwarepartition ein Prozessor oder ein Speichermodul dynamisch hinzugefügt wird. Eine Anwendung ruft die RegisterDeviceNotification-Funktion zweimal auf, einmal, um sich für die Benachrichtigung von Prozessorereignissen zu registrieren, und ein zweites Mal, um sich für die Benachrichtigung von Speicherereignissen zu registrieren. Die Anwendung gibt eine der folgenden GUIDs an, wenn sie sich für die Benachrichtigung über diese Ereignisse registriert:

GUID_DEVICE_PROCESSOR
Registriert die Anwendung, die benachrichtigt wird, wenn der Hardwarepartition ein Prozessor dynamisch hinzugefügt wird.

GUID_DEVICE_MEMORY
Registriert die Anwendung, die benachrichtigt wird, wenn arbeitsspeicher dynamisch der Hardwarepartition hinzugefügt wird.

Diese GUIDs werden in der Headerdatei Poclass.h definiert.

Das folgende Codebeispiel zeigt, wie Sie sich für beide Benachrichtigungen registrieren:

HWND hWnd;
DEV_BROADCAST_DEVICEINTERFACE ProcessorFilter;
DEV_BROADCAST_DEVICEINTERFACE MemoryFilter;
HDEVNOTIFY ProcessorNotifyHandle;
HDEVNOTIFY MemoryNotifyHandle;

// The following example assumes that hWnd already
// contains a handle to the application window that
// is to receive the WM_DEVICECHANGE messages.

// Initialize the filter for processor event notification
ZeroMemory(
  &ProcessorFilter,
  sizeof(ProcessorFilter)
  );
ProcessorFilter.dbcc_size =
  sizeof(DEV_BROADCAST_DEVICEINTERFACE);
ProcessorFilter.dbcc_devicetype =
  DBT_DEVTYP_DEVICEINTERFACE;
ProcessorFilter.dbcc_classguid =
  GUID_DEVICE_PROCESSOR;

// Register the application window to receive
// WM_DEVICECHANGE messages for processor events.
ProcessorNotifyHandle =
  RegisterDeviceNotification(
    hWnd,
    &ProcessorFilter,
    DEVICE_NOTIFY_WINDOW_HANDLE
    );

// Initialize the filter for memory event notification
ZeroMemory(
  &MemoryFilter,
  sizeof(MemoryFilter)
  );
MemoryFilter.dbcc_size =
  sizeof(DEV_BROADCAST_DEVICEINTERFACE);
MemoryFilter.dbcc_devicetype =
  DBT_DEVTYP_DEVICEINTERFACE;
MemoryFilter.dbcc_classguid =
  GUID_DEVICE_MEMORY;

// Register the application's window to receive
// WM_DEVICECHANGE messages for memory events.
MemoryNotifyHandle =
  RegisterDeviceNotification(
    hWnd,
    &MemoryFilter,
    DEVICE_NOTIFY_WINDOW_HANDLE
    );

Hinweis Wenn eine Anwendung nur über Prozessoren benachrichtigt werden muss, muss sie sich nicht für die Benachrichtigung über Speicherereignisse registrieren. Wenn eine Anwendung nur über Den Arbeitsspeicher benachrichtigt werden muss, muss sie sich nicht für die Benachrichtigung über Prozessorereignisse registrieren.

Wenn eine Anwendung keine Benachrichtigung mehr über Prozessor- oder Speicherereignisse empfangen muss, kann sie die Registrierung des Fensters vom Empfang von WM_DEVICECHANGE Nachrichten für diese Ereignisse aufheben, indem sie die Funktion UnregisterDeviceNotification aufruft . Das folgende Codebeispiel zeigt, wie Sie die Registrierung für die Anwendungsbenachrichtigungen aufheben:

// Unregister the application window from receiving
// WM_DEVICECHANGE messages for processor events.
UnregisterDeviceNotification(ProcessorNotifyHandle);

// Unregister the application window from receiving
// WM_DEVICECHANGE messages for memory events.
UnregisterDeviceNotification(MemoryNotifyHandle);

Weitere Informationen zu den Funktionen RegisterDeviceNotification und UnregisterDeviceNotification finden Sie in der Microsoft Windows SDK-Dokumentation.