Compartilhar via


Função RegisterDeviceNotificationA (winuser.h)

Registra o dispositivo ou o tipo de dispositivo para o qual uma janela receberá notificações.

Nota

Você pode usar CM_Register_Notification em vez de RegisterDeviceNotification se o código for direcionado ao Windows 8 ou versões mais recentes do Windows. A vantagem do CM_Register_Notification é que ele não requer um identificador de janela para funcionar.

Sintaxe

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

Parâmetros

[in] hRecipient

Um identificador para a janela ou serviço que receberá eventos de dispositivo para os dispositivos especificados no parâmetro NotificationFilter. O mesmo identificador de janela pode ser usado em várias chamadas para RegisterDeviceNotification .

Os serviços podem especificar um identificador de janela ou um identificador de status de serviço.

[in] NotificationFilter

Um ponteiro para um bloco de dados que especifica o tipo de dispositivo para o qual as notificações devem ser enviadas. Esse bloco sempre começa com a estrutura DEV_BROADCAST_HDR. Os dados a seguir desse cabeçalho dependem do valor do membro dbch_devicetype, que pode ser DBT_DEVTYP_DEVICEINTERFACE ou DBT_DEVTYP_HANDLE. Para obter mais informações, consulte Comentários.

[in] Flags

Esse parâmetro pode ser um dos valores a seguir.

Valor Significado
DEVICE_NOTIFY_WINDOW_HANDLE
0x00000000
O parâmetro hRecipient é um identificador de janela.
DEVICE_NOTIFY_SERVICE_HANDLE
0x00000001
O parâmetro hRecipient é um identificador de status de serviço.
 

Além disso, você pode especificar o valor a seguir.

Valor Significado
DEVICE_NOTIFY_ALL_INTERFACE_CLASSES
0x00000004
Notifica o destinatário de eventos de interface do dispositivo para todas as classes de interface do dispositivo. (O membro dbcc_classguid é ignorado.)

Esse valor só poderá ser usado se o membro dbch_devicetype for DBT_DEVTYP_DEVICEINTERFACE.

Valor de retorno

Se a função for bem-sucedida, o valor retornado será um identificador de notificação do dispositivo.

Se a função falhar, o valor retornado será NULL. Para obter informações de erro estendidas, chame GetLastError.

Observações

Os aplicativos enviam notificações de evento usando a função BroadcastSystemMessage. Qualquer aplicativo com uma janela de nível superior pode receber notificações básicas processando a mensagem WM_DEVICECHANGE. Os aplicativos podem usar a função RegisterDeviceNotification para se registrar para receber notificações do dispositivo.

Os serviços podem usar a função RegisterDeviceNotification para se registrar para receber notificações do dispositivo. Se um serviço especificar um identificador de janela no parâmetro hRecipient, as notificações serão enviadas para o procedimento de janela. Se hRecipient for um identificador de status de serviço, SERVICE_CONTROL_DEVICEEVENT notificações serão enviadas para o manipulador de controle de serviço. Para obter mais informações sobre o manipulador de controle de serviço, consulte HandlerEx.

Certifique-se de manipular eventos de dispositivo Plug and Play o mais rápido possível. Caso contrário, o sistema poderá ficar sem resposta. Se o manipulador de eventos for executar uma operação que possa bloquear a execução (como E/S), é melhor iniciar outro thread para executar a operação de forma assíncrona.

Os identificadores de notificação do dispositivo retornados por RegisterDeviceNotification devem ser fechados chamando a função UnregisterDeviceNotification quando elas não forem mais necessárias.

Os eventos DBT_DEVICEARRIVAL e DBT_DEVICEREMOVECOMPLETE são transmitidos automaticamente para todas as janelas de nível superior para dispositivos de porta. Portanto, não é necessário chamar RegisterDeviceNotification para portas e a função falhará se o membro dbch_devicetype for DBT_DEVTYP_PORT. As notificações de volume também são transmitidas para janelas de nível superior, portanto, a função falhará se dbch_devicetype for DBT_DEVTYP_VOLUME. Os dispositivos definidos pelo OEM não são usados diretamente pelo sistema, portanto, a função falhará se dbch_devicetype estiver DBT_DEVTYP_OEM.

Exemplos

Para obter um exemplo, consulte Registrando parade notificação do dispositivo.

Nota

O cabeçalho winuser.h define RegisterDeviceNotification como um alias que seleciona automaticamente a versão ANSI ou Unicode dessa função com base na definição da constante do pré-processador UNICODE. A combinação do uso do alias neutro de codificação com código que não é neutro em codificação pode levar a incompatibilidades que resultam em erros de compilação ou de runtime. Para obter mais informações, consulte Conventions for Function Prototypes.

Requisitos

Requisito Valor
de cliente com suporte mínimo Windows XP
servidor com suporte mínimo Windows Server 2003
da Plataforma de Destino Windows
cabeçalho winuser.h (inclua Windows.h)
biblioteca User32.lib
de DLL User32.dll
conjunto de API ext-ms-win-ntuser-misc-l1-1-0 (introduzido no Windows 8)

Consulte também

BroadcastSystemMessage

DEV_BROADCAST_HDR

Funções de gerenciamento de dispositivo

de notificações do dispositivo

HandlerEx

RegisterDeviceNotification

UnregisterDeviceNotification

WM_DEVICECHANGE