Partager via


EVT_WDF_CHILD_LIST_ADDRESS_DESCRIPTION_COPY fonction de rappel (wdfchildlist.h)

[S’applique uniquement à KMDF]

La fonction de rappel d’événement evtChildListAddressDescriptionCopy du pilote copie une description d’adresse enfant d’un emplacement spécifié vers un autre.

Syntaxe

EVT_WDF_CHILD_LIST_ADDRESS_DESCRIPTION_COPY EvtWdfChildListAddressDescriptionCopy;

void EvtWdfChildListAddressDescriptionCopy(
  [in]  WDFCHILDLIST ChildList,
  [in]  PWDF_CHILD_ADDRESS_DESCRIPTION_HEADER SourceAddressDescription,
  [out] PWDF_CHILD_ADDRESS_DESCRIPTION_HEADER DestinationAddressDescription
)
{...}

Paramètres

[in] ChildList

Handle d’un objet de liste enfant de framework.

[in] SourceAddressDescription

Pointeur vers une structure WDF_CHILD_ADDRESS_DESCRIPTION_HEADER qui identifie l’emplacement source de la description de l’adresse enfant.

[out] DestinationAddressDescription

Pointeur vers une structure WDF_CHILD_ADDRESS_DESCRIPTION_HEADER qui identifie l’emplacement de destination de la description de l’adresse enfant.

Valeur de retour

Aucun

Remarques

Si un pilote de bus utilise énumération dynamique, il peut inscrire une fonction de rappel EvtChildListAddressDescriptionCopy en appelant WdfFdoInitSetDefaultChildListConfig ou WdfChildListCreate.

L’infrastructure copie les informations d’une description d’adresse fournie par un pilote vers une autre lorsqu’elle doit mettre à jour une description existante avec de nouvelles informations, ou lorsqu’elle doit transmettre le contenu d’une description d’adresse au pilote.

La fonction de rappel EvtChildListAddressDescriptionCopy doit copier le contenu d’une description source vers une description de destination. Un pilote doit fournir cette fonction de rappel si ses appareils enfants nécessitent une description d’adresse et si l’infrastructure ne peut pas appeler RtlCopyMemory pour copier la description de l’adresse. (L’infrastructure ne peut pas appeler RtlCopyMemory si la description contient des pointeurs vers une mémoire supplémentaire.)

Si votre pilote fournit des descriptions d’adresses, mais ne fournit pas de fonction de rappel evtChildListAddressDescriptionCopy, l’infrastructure copie les descriptions d’adresses en appelant RtlCopyMemory.

Les étapes suivantes décrivent un scénario classique :

  1. Le pilote détermine qu’un appareil enfant existe.
  2. Le pilote crée une description d’adresse en remplissant une structure définie par le pilote qui contient une structure WDF_CHILD_ADDRESS_DESCRIPTION_HEADER et éventuellement en allouant dynamiquement de la mémoire supplémentaire pour stocker les informations d’adresse qui ont une taille spécifique à l’appareil.
  3. Le pilote appelle WdfChildListAddOrUpdateChildDescriptionAsPresent pour signaler un appareil enfant, en fournissant un pointeur vers la description de l’adresse.
  4. L’infrastructure détermine que le pilote avait précédemment signalé l’appareil, afin que l’infrastructure puisse mettre à jour l’ancienne description de l’adresse de l’appareil avec de nouvelles informations.
  5. L’infrastructure appelle la fonction de rappel EvtChildListAddressDescriptionCopy (le cas échéant) ou RtlCopyMemory pour copier les nouvelles informations de description d’adresse dans la description de l’adresse existante.
L’infrastructure peut utiliser RtlCopyMemory pour copier une description d’adresse, si la description se compose d’une structure unique avec une taille prédéterminée spécifiée par l'AddressDescriptionSize membre de la structure WDF_CHILD_ADDRESS_DESCRIPTION_HEADER. Toutefois, parfois, la description doit également contenir des informations supplémentaires stockées dans une mémoire allouée dynamiquement. Dans ce cas, vous allez généralement définir une structure de description afin qu’un membre pointe vers la mémoire allouée dynamiquement, et votre pilote doit fournir une EvtChildListAddressDescriptionCopy fonction de rappel. La fonction de rappel doit effectuer les opérations suivantes :
  1. Dans le de la fonction de rappel SourceAddressDescription et structures destinationAddressDescription, recherchez les pointeurs vers la mémoire allouée dynamiquement.
  2. Copiez la mémoire allouée dynamiquement de la source vers la destination à l’aide des pointeurs.
  3. Copiez d’autres membres de la structure de la fonction de rappel SourceAddressDescription structure vers la structure DestinationAddressDescription de la fonction de rappel.
La seule méthode d’objet de liste enfant framework que la fonction de rappel EvtChildListAddressDescriptionCopy evtChildListAddressDescriptionCopy peut appeler est WdfChildListGetDevice.

L’infrastructure acquiert un verrou d’objet de liste enfant interne avant d’appeler la fonction de rappel EvtChildListAddressDescriptionCopy. La fonction de rappel doit effectuer uniquement des opérations liées à l’opération de copie décrite, telles que l’appel des méthodes d’objet mémoire du framework et l’accès à l’espace de contexte d’objet. Il ne doit pas appeler des méthodes qui accèdent à d’autres pilotes.

Si votre pilote fournit une fonction de rappel EvtChildListAddressDescriptionCopy, il peut également avoir besoin d'EvtChildListAddressDescriptionDuplicate et EvtChildListAddressDescriptionCleanup fonctions de rappel.

Pour plus d’informations sur l’énumération dynamique, consultez énumération des appareils sur un bus.

Exigences

Exigence Valeur
plateforme cible Universel
version minimale de KMDF 1.0
d’en-tête wdfchildlist.h (include Wdf.h)
IRQL <= DISPATCH_LEVEL

Voir aussi

EvtChildListAddressDescriptionCleanup

EvtChildListAddressDescriptionDuplicate

RtlCopyMemory

WDF_CHILD_ADDRESS_DESCRIPTION_HEADER

WdfChildListAddOrUpdateChildDescriptionAsPresent

WdfChildListCreate

WdfChildListGetDevice

WdfFdoInitSetDefaultChildListConfig