Partager via


Fonction IoReportTargetDeviceChangeAsynchronous (wdm.h)

La routine IoReportTargetDeviceChangeAsynchronous informe le gestionnaire PnP qu’un événement personnalisé s’est produit sur un appareil.

Syntaxe

NTSTATUS IoReportTargetDeviceChangeAsynchronous(
  [in]           PDEVICE_OBJECT                   PhysicalDeviceObject,
  [in]           PVOID                            NotificationStructure,
  [in, optional] PDEVICE_CHANGE_COMPLETE_CALLBACK Callback,
  [in, out]      PVOID                            Context
);

Paramètres

[in] PhysicalDeviceObject

Pointeur vers l’AOP de l’appareil signalé.

[in] NotificationStructure

Pointeur vers une structure de TARGET_DEVICE_CUSTOM_NOTIFICATION fournie par l’appelant décrivant l’événement personnalisé. Le gestionnaire PnP envoie cette structure aux pilotes inscrits pour la notification de l’événement.

Cette structure fournie par l’appelant peut être libérée une fois la routine retournée, car le gestionnaire PnP effectue une copie superficielle et utilise la copie pour notifier les pilotes. La copie est automatiquement libérée par le gestionnaire PnP une fois qu’elle n’est plus nécessaire. Consultez la section Remarques sur les exigences du pool d’allocation.

NotificationStructure. FileObject doit avoir la valeur NULL. NotificationStructure. L’événement doit contenir le GUID personnalisé de l’événement. Les autres champs de notificationStructure doivent être renseignés en fonction de l’événement personnalisé.

Le gestionnaire PnP remplit notificationStructure. Champ FileObject lorsqu’il envoie des notifications aux inscrits.

[in, optional] Callback

Pointe éventuellement vers une routine fournie par l’appelant que le gestionnaire PnP appelle une fois qu’il a terminé de notifier les pilotes qui se sont inscrits pour cet événement personnalisé.

La routine de rappel a le type suivant :

typedef
VOID
(*PDEVICE_CHANGE_COMPLETE_CALLBACK)(
    IN PVOID Context
    );

Une routine de rappel de modification d’appareil ne doit pas bloquer et ne doit pas appeler des routines synchrones qui génèrent des événements PnP.

Le gestionnaire PnP appelle les routines de rappel de changement d’appareil à IRQL = PASSIVE_LEVEL.

[in, out] Context

Pointe éventuellement vers une structure de contexte fournie par l’appelant que le gestionnaire PnP transmet à la routine de rappel . L’appelant doit allouer cette structure à partir de la mémoire non pagée.

Valeur retournée

Code de retour Description
STATUS_INVALID_DEVICE_REQUEST L’appelant a spécifié un événement PnP système, tel que GUID_TARGET_DEVICE_QUERY_REMOVE. Cette routine concerne uniquement les événements personnalisés.

Remarques

Une fois que la routine IoReportTargetDeviceChangeAsynchronous a informé le gestionnaire PnP qu’un événement personnalisé s’est produit sur un appareil, la routine retourne immédiatement ; il n’attend pas que le gestionnaire PnP envoie la notification de l’événement aux pilotes inscrits pour la notification sur l’appareil. N’utilisez pas cette routine pour signaler des événements PnP système, tels que GUID_TARGET_DEVICE_REMOVE_COMPLETE.

Un pilote qui définit un événement d’appareil personnalisé appelle IoReportTargetDeviceChangeAsynchronous pour informer le gestionnaire PnP que l’événement personnalisé s’est produit. La notification personnalisée peut être utilisée pour des événements tels qu’un changement d’étiquette de volume.

La structure de notification personnalisée contient un événement défini par le pilote avec son propre GUID. Les enregistreurs de pilotes peuvent générer des GUID avec des Uuidgen.exe ou des Guidgen.exe (inclus dans le Microsoft Windows SDK).

Lorsqu’un pilote appelle cette routine lors de la gestion d’un événement, d’un IRP_MN_REMOVE_DEVICE ou d’un IRP_MN_SURPRISE_REMOVAL, le gestionnaire PnP appelle la routine de rappel du pilote après le retour du pilote et le déroulement de la pile.

Les appelants d’IoReportTargetDeviceChangeAsynchronous doivent s’exécuter à IRQL <= DISPATCH_LEVEL. Si un enregistreur de pilotes appelle cette routine à l’adresse IRQL = DISPATCH_LEVEL, la notificationStructure doit être allouée à partir de la mémoire non paginée.

Configuration requise

Condition requise Valeur
Plateforme cible Universal
En-tête wdm.h (inclure Wdm.h, Ntddk.h, Ntifs.h)
Bibliothèque NtosKrnl.lib
DLL NtosKrnl.exe
IRQL <= DISPATCH_LEVEL (voir la section Remarques)
Règles de conformité DDI HwStorPortProhibitedDDIs(storport)

Voir aussi

IoReportTargetDeviceChange

TARGET_DEVICE_CUSTOM_NOTIFICATION