Compartilhar via


Registrando-se para notificação de aplicativo

Um aplicativo de modo de usuário chama a função RegisterDeviceNotification para se registrar para ser notificado quando um módulo de processador ou memória é adicionado dinamicamente à partição de hardware. Um aplicativo chama a função RegisterDeviceNotification duas vezes, uma vez para se registrar para notificação de eventos do processador e uma segunda vez para se registrar para notificação de eventos de memória. O aplicativo especifica um dos seguintes GUIDs quando se registra para notificação desses eventos:

GUID_DEVICE_PROCESSOR
Registra o aplicativo a ser notificado quando um processador é adicionado dinamicamente à partição de hardware.

GUID_DEVICE_MEMORY
Registra o aplicativo a ser notificado quando a memória é adicionada dinamicamente à partição de hardware.

Esses GUIDs são definidos no arquivo de cabeçalho Poclass.h.

O exemplo de código a seguir mostra como se registrar para ambas as notificações:

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 Se um aplicativo precisar ser notificado apenas sobre processadores, ele não precisará se registrar para notificação de eventos de memória. Da mesma forma, se um aplicativo precisar ser notificado apenas sobre memória, ele não precisará se registrar para notificação de eventos do processador.

Quando um aplicativo não precisa mais receber notificação de eventos de processador ou memória, ele pode cancelar o registro da janela de receber mensagens WM_DEVICECHANGE para esses eventos chamando a função UnregisterDeviceNotification . O exemplo de código a seguir mostra como cancelar o registro das notificações do aplicativo:

// 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 obter mais informações sobre as funções RegisterDeviceNotification e UnregisterDeviceNotification, consulte a documentação do SDK do Microsoft Windows.