Partager via


WdfIoTargetClose, fonction (wdfiotarget.h)

[S’applique à KMDF et UMDF]

La méthode WdfIoTargetClose ferme une cible d’E/S distante spécifiée.

Syntaxe

void WdfIoTargetClose(
  [in] WDFIOTARGET IoTarget
);

Paramètres

[in] IoTarget

Handle pour un objet cible d’E/S obtenu à partir d’un appel précédent à WdfIoTargetCreate.

Valeur de retour

None

Remarques

Un bogue case activée se produit si le pilote fournit un handle d’objet non valide.

Une fois qu’un pilote a appelé WdfIoTargetClose, il peut appeler WdfIoTargetOpen pour rouvrir la cible d’E/S distante.

Les pilotes qui fournissent une fonction de rappel EvtIoTargetRemoveComplete doivent appeler WdfIoTargetClose à partir de cette fonction de rappel.

Avant le retour de la méthode WdfIoTargetClose , l’infrastructure annule toutes les demandes d’E/S de la file d’attente cible.

Si un pilote a terminé d’utiliser une cible d’E/S distante et qu’il n’utilise plus la cible, et que la cible n’a aucun objet de requête enfant qui est toujours en attente, le pilote peut appeler WdfObjectDelete sans appeler WdfIoTargetClose au préalable. L’appel à WdfObjectDelete ferme la cible d’E/S distante, annule toutes les demandes d’E/S de la file d’attente cible et supprime l’objet cible d’E/S. (Notez que si l’objet parent de la cible d’E/S distante est un objet d’appareil, le framework ferme la cible et supprime l’objet cible lorsqu’il supprime l’objet parent.) Si la cible a des objets de requête enfants qui sont toujours en attente, le pilote doit appeler WdfIoTargetClose pour pouvoir appeler WdfObjectDelete en toute sécurité.

Pour plus d’informations sur WdfIoTargetClose, consultez Contrôle de l’état d’une cible d’E/S générale.

Pour plus d’informations sur les cibles d’E/S, consultez Utilisation de cibles d’E/S.

Exemples

L’exemple de code suivant est une fonction de rappel EvtIoTargetRemoveComplete qui supprime une cible d’E/S spécifiée de la collection de cibles d’E/S d’un pilote, puis ferme la cible d’E/S.

VOID
MyEvtIoTargetRemoveComplete(
    WDFIOTARGET IoTarget
)
{
    //
    // Get device information from the I/O target object's
    // context space.
    //
    targetDeviceInfo = GetTargetDeviceInfo(IoTarget);
    deviceExtension = targetDeviceInfo->DeviceExtension;

    //
    // Remove the target device from the collection.
    //
    WdfWaitLockAcquire(
                       deviceExtension->TargetDeviceCollectionLock,
                       NULL
                       );

    WdfCollectionRemove(
                        deviceExtension->TargetDeviceCollection,
                        IoTarget
                        );

    WdfWaitLockRelease(deviceExtension->TargetDeviceCollectionLock);

    //
    // Close the target.
    //
    WdfIoTargetClose(IoTarget);
}

Configuration requise

Condition requise Valeur
Plateforme cible Universal
Version KMDF minimale 1.0
Version UMDF minimale 2.0
En-tête wdfiotarget.h (inclure Wdf.h)
Bibliothèque Wdf01000.sys (KMDF) ; WUDFx02000.dll (UMDF)
IRQL PASSIVE_LEVEL
Règles de conformité DDI DriverCreate(kmdf), KmdfIrql(kmdf), KmdfIrql2(kmdf), KmdfIrqlExplicit(kmdf)

Voir aussi

EvtIoTargetRemoveComplete

WdfIoTargetCreate