Utilisation de la notification personnalisée PnP

Un pilote peut utiliser le mécanisme de notification de changement d’appareil cible pour être informé des événements personnalisés sur un appareil.

Le programmeur qui définit l’événement personnalisé doit effectuer les opérations suivantes :

  1. Définissez un nouveau GUID pour l’événement personnalisé.

    Générez le GUID avec Uuidgen ou Guidgen (qui sont inclus dans le Microsoft Windows SDK). Publiez le GUID dans un fichier d’en-tête et une documentation appropriés.

  2. Écrivez du code pour déclencher l’événement personnalisé.

    En mode noyau, un pilote appelle IoReportTargetDeviceChange avec le GUID personnalisé et un pointeur vers l’AOP pour l’appareil. Les événements personnalisés peuvent uniquement être déclenchés à partir du mode noyau.

Un enregistreur de pilotes utilise une notification personnalisée avec une procédure semblable à celle-ci :

  1. Le pilote (ou l’application) s’inscrit pour la notification de l’événement personnalisé.

    En mode noyau, un pilote appelle IoRegisterPlugPlayNotification et s’inscrit pour un EventCategoryTargetDeviceChange sur l’appareil.

    En mode utilisateur, une application s’inscrit à l’aide de RegisterDeviceNotification. Pour plus d’informations, consultez le Kit de développement logiciel (SDK) Windows.

  2. Un composant en mode noyau déclenche l’événement personnalisé.

  3. Le gestionnaire PnP appelle les routines de notification inscrites sur l’appareil.

    Le gestionnaire PnP appelle les routines de rappel en mode utilisateur inscrites, puis appelle les routines de rappel en mode noyau.

  4. Une fois la notification en mode utilisateur terminée, la ou les routines de rappel de notification du pilote en mode noyau répondent à l’événement personnalisé.

    Consultez Recommandations pour l’écriture de routines de rappel de notification PnP pour obtenir des instructions générales sur les routines de rappel de notification. En plus de ces instructions, une routine de rappel de notification personnalisée ne doit pas ouvrir de handle sur un appareil à partir du thread de routine de rappel.