Compartilhar via


função CM_Register_Notification (cfgmgr32.h)

A função CM_Register_Notification registra uma rotina de retorno de chamada do aplicativo a ser chamada quando ocorre um evento PnP do tipo especificado.

Use RegisterDeviceNotification em vez de CM_Register_Notification se o código for direcionado ao Windows 7 ou versões anteriores do Windows. Os chamadores do modo kernel devem usar IoRegisterPlugPlayNotification .

Sintaxe

CMAPI CONFIGRET CM_Register_Notification(
  [in]           PCM_NOTIFY_FILTER   pFilter,
  [in, optional] PVOID               pContext,
  [in]           PCM_NOTIFY_CALLBACK pCallback,
  [out]          PHCMNOTIFICATION    pNotifyContext
);

Parâmetros

[in] pFilter

Ponteiro para uma estrutura CM_NOTIFY_FILTER .

[in, optional] pContext

Ponteiro para um buffer alocado pelo chamador que contém o contexto a ser passado para a rotina de retorno de chamada no pCallback.

[in] pCallback

Ponteiro para a rotina a ser chamada quando o evento PnP especificado ocorrer. Consulte a seção Comentários para obter o protótipo da função de retorno de chamada.

O parâmetro Action da rotina de retorno de chamada será um valor da enumeração CM_NOTIFY_ACTION .

Ao receber uma notificação, como o retorno de chamada examina a notificação dependerá do membro FilterType do parâmetro EventData da rotina de retorno de chamada:

CM_NOTIFY_FILTER_TYPE_DEVICEINTERFACE

O retorno de chamada deve examinar EventData-u.DeviceInterface>.

CM_NOTIFY_FILTER_TYPE_DEVICEHANDLE

O retorno de chamada deve examinar EventData-u.DeviceHandle>.

CM_NOTIFY_FILTER_TYPE_DEVICEINSTANCE

O retorno de chamada deve examinar EventData-u.DeviceInstance>.

[out] pNotifyContext

Ponteiro para receber o identificador HCMNOTIFICATION que corresponde à chamada de registro.

Retornar valor

Se a operação for bem-sucedida, a função retornará CR_SUCCESS. Caso contrário, ele retornará um dos códigos de erro prefixados por CR_ definidos em Cfgmgr32.h.

Comentários

Certifique-se de lidar com Plug and Play eventos de dispositivo o mais rápido possível. Se o manipulador de eventos executar qualquer operação que possa bloquear a execução (como E/S), é melhor iniciar outro thread para executar a operação de forma assíncrona.

A função CM_Register_Notification não fornece notificação de interfaces de dispositivo existentes. Para recuperar interfaces existentes, primeiro chame CM_Register_Notification e chame CM_Get_Device_Interface_List. Se a interface estiver habilitada após o driver chamar CM_Register_Notification, mas antes que o driver chame CM_Get_Device_Interface_List, o driver receberá uma notificação para a chegada da interface e a interface também aparecerá na lista de instâncias de interface do dispositivo retornadas por CM_Get_Device_Interface_List.

Os identificadores HCMNOTIFICATION retornados por CM_Register_Notification devem ser fechados chamando a função CM_Unregister_Notification quando eles não forem mais necessários.

Uma rotina de retorno de chamada usa o seguinte protótipo de função:

typedef __callback DWORD (CALLBACK *PCM_NOTIFY_CALLBACK)(
    _In_ HCMNOTIFICATION       hNotify,
    _In_opt_ PVOID             Context,
    _In_ CM_NOTIFY_ACTION      Action,
    _In_reads_bytes_(EventDataSize) PCM_NOTIFY_EVENT_DATA EventData,
    _In_ DWORD                 EventDataSize
    );

Se responder a uma notificação de CM_NOTIFY_ACTION_DEVICEQUERYREMOVE , o retorno de chamada PCM_NOTIFY_CALLBACK deverá retornar ERROR_SUCCESS ou ERROR_CANCELLED, conforme apropriado. Caso contrário, o retorno de chamada deverá retornar ERROR_SUCCESS. O retorno de chamada não deve retornar nenhum outro valor. Para obter uma descrição de outras ações, consulte a documentação do CM_NOTIFY_ACTION . Consulte também CM_NOTIFY_EVENT_DATA para obter informações sobre a estrutura que esse retorno de chamada recebe no parâmetro EventData .

Exemplos

Para obter um exemplo, consulte Registrando-se para notificação de chegada da interface do dispositivo e remoção de dispositivo.

Requisitos

Requisito Valor
Cliente mínimo com suporte Disponível no Microsoft Windows 8 e versões posteriores do Windows.
Plataforma de Destino Universal
Cabeçalho cfgmgr32.h (inclua Cfgmgr32.h)
Biblioteca Cfgmgr32.lib; OneCoreUAP.lib no Windows 10
DLL CfgMgr32.dll

Confira também

CM_NOTIFY_ACTION

CM_NOTIFY_FILTER

CM_Unregister_Notification

RegisterDeviceNotification

Registrando-se para notificação de chegada da interface do dispositivo e remoção de dispositivo

Usando interfaces de dispositivo