Compartilhar via


Usando a notificação personalizada PnP

Um driver pode usar o mecanismo de notificação de alteração de dispositivo de destino para ser notificado sobre eventos personalizados em um dispositivo.

O programador que define o evento personalizado deve fazer o seguinte:

  1. Defina um novo GUID para o evento personalizado.

    Gere o GUID com Uuidgen ou Guidgen (que estão incluídos no SDK do Microsoft Windows). Publique o GUID em um arquivo de cabeçalho e documentação apropriados.

  2. Escreva código para disparar o evento personalizado.

    No modo kernel, um driver chama IoReportTargetDeviceChange com o GUID personalizado e um ponteiro para o PDO do dispositivo. Eventos personalizados só podem ser disparados do modo kernel.

Um gravador de driver usa uma notificação personalizada com um procedimento semelhante ao seguinte:

  1. O driver (ou aplicativo) registra-se para notificação do evento personalizado.

    No modo kernel, um driver chama IoRegisterPlugPlayNotification e registra um EventCategoryTargetDeviceChange no dispositivo.

    No modo de usuário, um aplicativo é registrado usando RegisterDeviceNotification. Consulte o SDK do Windows para obter mais informações.

  2. Um componente do modo kernel dispara o evento personalizado.

  3. O gerenciador PnP chama rotinas de notificação registradas no dispositivo.

    O gerenciador PnP chama as rotinas de retorno de chamada do modo de usuário registrado e, em seguida, chama as rotinas de retorno de chamada no modo kernel.

  4. Quando a notificação do modo de usuário for concluída, as rotinas de retorno de chamada de notificação do driver no modo kernel responderão ao evento personalizado.

    Consulte Diretrizes para escrever rotinas de retorno de chamada de notificação PnP para obter diretrizes gerais para rotinas de retorno de chamada de notificação. Além dessas diretrizes, uma rotina de retorno de chamada de notificação personalizada não deve abrir um identificador para um dispositivo de dentro do thread de rotina de retorno de chamada.