Compartir a través de


Registro para notificación de aplicación

Una aplicación en modo de usuario llama a la función RegisterDeviceNotification para registrarse para que se notifique cuando un procesador o módulo de memoria se agrega dinámicamente a la partición de hardware. Una aplicación llama a la función RegisterDeviceNotification dos veces, una vez para registrarse para recibir notificaciones de eventos de procesador y una segunda vez para registrarse para recibir notificaciones de eventos de memoria. La aplicación especifica uno de los siguientes GUID cuando se registra para la notificación de estos eventos:

GUID_DEVICE_PROCESSOR
Registra la aplicación que se va a notificar cuando un procesador se agrega dinámicamente a la partición de hardware.

GUID_DEVICE_MEMORY
Registra la aplicación que se va a notificar cuando la memoria se agrega dinámicamente a la partición de hardware.

Estos GUID se definen en el archivo de encabezado, Poclass.h.

En el ejemplo de código siguiente se muestra cómo registrarse para ambas notificaciones:

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
    );

Nota Si una aplicación solo tiene que recibir notificaciones sobre los procesadores, no tiene que registrarse para recibir notificaciones de eventos de memoria. De forma similar, si una aplicación solo tiene que recibir notificaciones sobre la memoria, no tiene que registrarse para recibir notificaciones de eventos de procesador.

Cuando una aplicación ya no tiene que recibir notificaciones de eventos de procesador o memoria, puede anular el registro de la ventana de recibir mensajes de WM_DEVICECHANGE para estos eventos mediante una llamada a la función UnregisterDeviceNotification . En el ejemplo de código siguiente se muestra cómo anular el registro de las notificaciones de aplicación:

// 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);

Para obtener más información sobre las funciones RegisterDeviceNotification y UnregisterDeviceNotification, consulte la documentación de Microsoft Windows SDK.