EVT_WDF_CHILD_LIST_ADDRESS_DESCRIPTION_DUPLICATE fonction de rappel (wdfchildlist.h)
[S’applique uniquement à KMDF]
La fonction de rappel d’événement EvtChildListAddressDescriptionDuplicate d’un pilote duplique une description d’adresse enfant.
Syntaxe
EVT_WDF_CHILD_LIST_ADDRESS_DESCRIPTION_DUPLICATE EvtWdfChildListAddressDescriptionDuplicate;
NTSTATUS EvtWdfChildListAddressDescriptionDuplicate(
[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 de WDF_CHILD_ADDRESS_DESCRIPTION_HEADER qui identifie l’emplacement source de la description de l’adresse enfant.
[out] DestinationAddressDescription
Pointeur vers une structure de WDF_CHILD_ADDRESS_DESCRIPTION_HEADER qui identifie l’emplacement de destination de la description de l’adresse enfant.
Valeur retournée
La fonction de rappel EvtChildListAddressDescriptionDuplicate doit retourner STATUS_SUCCESS ou une autre valeur status pour laquelle NT_SUCCESS(status) est égal à TRUE, si l’opération réussit. Sinon, cette fonction doit retourner une valeur status pour laquelle NT_SUCCESS(status) est false.
Remarques
Si un pilote de bus utilise une énumération dynamique, il peut inscrire une fonction de rappel EvtChildListAddressDescriptionDuplicate en appelant WdfFdoInitSetDefaultChildListConfig ou WdfChildListCreate.
L’infrastructure dupliquez les descriptions d’adresses fournies par le pilote afin qu’elle puisse avoir des copies internes des descriptions.
La fonction de rappel EvtChildListAddressDescriptionDuplicate doit créer une copie dupliquée d’une description d’adresse. 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 dupliquer la description de l’adresse. (L’infrastructure ne peut pas appeler RtlCopyMemory si la description contient des pointeurs vers de la mémoire supplémentaire.)
Si votre pilote fournit des descriptions d’adresses, mais ne fournit pas de fonction de rappel EvtChildListAddressDescriptionDuplicate , l’infrastructure duplique les descriptions d’adresses en appelant RtlCopyMemory.
Les étapes suivantes décrivent un scénario classique :
- Le pilote détermine qu’un appareil enfant existe.
- 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.
- Le pilote appelle WdfChildListAddOrUpdateChildDescriptionAsPresent pour signaler un appareil enfant, en fournissant un pointeur vers la description de l’adresse.
- L’infrastructure appelle la fonction de rappel EvtChildListAddressDescriptionDuplicate (si elle existe) ou RtlCopyMemory pour dupliquer la description de l’adresse afin d’avoir une copie interne de la description.
- Allouez de la mémoire supplémentaire, généralement en appelant ExAllocatePool.
- Stockez l’adresse de la mémoire allouée dans la structure de description de l’adresse définie par le pilote (c’est-à-dire la structure DestinationAddressDescription de la fonction de rappel).
- Copiez d’autres membres de structure de la structure SourceAddressDescription de la fonction de rappel vers la structure DestinationAddressDescription de la fonction de rappel.
L’infrastructure acquiert un verrou d’objet de liste enfant interne avant d’appeler la fonction de rappel EvtChildListAddressDescriptionDuplicate . La fonction de rappel doit uniquement effectuer des opérations liées à l’opération de duplication décrite, telles que l’appel de méthodes d’objet mémoire d’infrastructure et l’accès à l’espace de contexte de l’objet. Il ne doit pas appeler des méthodes qui accèdent à d’autres pilotes.
Si votre pilote fournit une fonction de rappel EvtChildListAddressDescriptionDuplicate , il peut également avoir besoin des fonctions de rappel EvtChildListAddressDescriptionCopy et EvtChildListAddressDescriptionCleanup .
Pour plus d’informations sur l’énumération dynamique, consultez Énumération des appareils sur un bus.
Configuration requise
Condition requise | Valeur |
---|---|
Plateforme cible | Universal |
Version KMDF minimale | 1.0 |
En-tête | wdfchildlist.h (inclure Wdf.h) |
IRQL | <= DISPATCH_LEVEL |
Voir aussi
EvtChildListAddressDescriptionCleanup
WDF_CHILD_ADDRESS_DESCRIPTION_HEADER