Contrôle de l’état d’une cible d’E/S générale dans UMDF
Avertissement
UMDF 2 est la dernière version d’UMDF et remplace UMDF 1. Tous les nouveaux pilotes UMDF doivent être écrits à l’aide d’UMDF 2. Aucune nouvelle fonctionnalité n’est ajoutée à UMDF 1 et la prise en charge d’UMDF 1 est limitée sur les versions plus récentes de Windows 10. Les pilotes Windows universels doivent utiliser UMDF 2.
Les exemples UMDF 1 archivés se trouvent dans la Windows 11, version 22H2 - Mise à jour des exemples de pilotes de mai 2022.
Pour plus d’informations, consultez Prise en main avec UMDF.
L’infrastructure définit les états suivants pour les cibles d’E/S générales :
Commencé
La cible d’E/S est ouverte (c’est-à-dire, disponible pour le pilote UMDF) et le pilote peut lui envoyer des demandes d’E/S. L’infrastructure transmet les requêtes au pilote approprié.
Arrêté
La cible d’E/S est ouverte, mais le pilote UMDF ne peut pas envoyer de demandes d’E/S à la cible d’E/S, sauf si le pilote transmet l’indicateur WDF_REQUEST_SEND_OPTION_IGNORE_TARGET_STATE au paramètre Flags dans un appel à la méthode IWDFIoRequest::Send .
L’infrastructure cesse de remettre les requêtes au pilote approprié.
Fermé pour requête-suppression
La cible d’E/S est temporairement fermée, car son appareil pourrait bientôt être supprimé.
Fermé
La cible d’E/S est fermée et ne peut pas être démarrée ou arrêtée.
Supprimé
L’appareil de la cible d’E/S a été supprimé.
L’énumération WDF_IO_TARGET_STATE définit les valeurs qui représentent ces états.
États cibles d’E/S locaux
L’infrastructure s’ouvre et démarre automatiquement les cibles d’E/S locales.
Si nécessaire, le pilote peut appeler IWDFIoTargetStateManagement::Stop pour arrêter temporairement une cible d’E/S locale et appeler IWDFIoTargetStateManagement::Start pour la redémarrer. Par exemple, le pilote peut arrêter une cible d’E/S locale s’il détecte une condition d’erreur temporaire, puis redémarrer la cible d’E/S si la condition d’erreur est corrigée.
Si l’appareil d’une cible d’E/S locale est supprimé, l’infrastructure arrête et ferme automatiquement la cible d’E/S et annule toutes les demandes d’E/S qui se trouvent dans la file d’attente de la cible. L’infrastructure avertit le pilote que l’appareil n’est plus disponible en appelant des fonctions de rappel d’événement d’objet d’appareil. Pour plus d’informations sur ces fonctions de rappel, consultez Scénarios PnP et gestion de l’alimentation dans UMDF.
Les pilotes peuvent appeler IWDFIoTargetStateManagement::GetState pour obtenir l’état actuel d’une cible d’E/S locale.
États cibles d’E/S distants
Les pilotes doivent appeler IWDFRemoteTarget::OpenFileByName ou IWDFRemoteTarget::OpenRemoteInterface pour ouvrir des cibles d’E/S distantes. Lorsqu’un pilote ouvre une cible d’E/S distante, l’infrastructure démarre automatiquement la cible d’E/S.
Si nécessaire, le pilote peut appeler IWDFRemoteTarget::Stop pour arrêter temporairement une cible d’E/S distante et appeler IWDFRemoteTarget::Start pour la redémarrer.
Si l’appareil d’une cible d’E/S distante est supprimé, l’infrastructure arrête et ferme automatiquement la cible d’E/S et annule toutes les demandes d’E/S qui se trouvent dans la file d’attente de la cible, sauf si le pilote enregistre les fonctions de rappel d’événements suivantes :
IRemoteTargetCallbackRemoval::OnRemoteTargetQueryRemove
Informe le pilote que l’appareil d’une cible d’E/S distante peut être supprimé. Votre pilote doit appeler IWDFRemoteTarget::CloseForQueryRemove si vous souhaitez que le pilote autorise la suppression de l’appareil.
IRemoteTargetCallbackRemoval::OnRemoteTargetRemoveComplete
Informe le pilote que l’appareil d’une cible d’E/S distante a été supprimé. Cette fonction de rappel doit appeler IWDFRemoteTarget::Close.
IRemoteTargetCallbackRemoval::OnRemoteTargetRemoveCanceled
Informe le pilote qu’une tentative de suppression de l’appareil d’une cible d’E/S distante a été annulée. Si vous souhaitez que le pilote continue à utiliser la cible, il doit appeler IWDFRemoteTarget::Rouvrir. En règle générale, un pilote appelle Rouvrir à partir de la fonction de rappel OnRemoteTargetRemoveCanceled , mais Rouvert peut être appelé après les retours de OnRemoteTargetRemoveCanceled .
Les pilotes peuvent appeler IWDFRemoteTarget::GetState pour obtenir l’état actuel d’une cible d’E/S distante.