WdfUsbTargetPipeConfigContinuousReader, fonction (wdfusb.h)

[S’applique à KMDF et à UMDF]

La méthode WdfUsbTargetPipeConfigContinuousReader configure l’infrastructure pour qu’elle lise en continu à partir d’un canal USB spécifié.

Syntaxe

NTSTATUS WdfUsbTargetPipeConfigContinuousReader(
  [in] WDFUSBPIPE                        Pipe,
  [in] PWDF_USB_CONTINUOUS_READER_CONFIG Config
);

Paramètres

[in] Pipe

Handle vers un objet de canal d’infrastructure obtenu en appelant WdfUsbInterfaceGetConfiguredPipe.

[in] Config

Pointeur vers une structure WDF_USB_CONTINUOUS_READER_CONFIG allouée par l’appelant.

Valeur de retour

WdfUsbTargetPipeConfigContinuousReader retourne STATUS_SUCCESS si l’opération réussit. Sinon, cette méthode peut retourner l’une des valeurs suivantes :

Code de retour Description
STATUS_INFO_LENGTH_MISMATCH
La taille de la structure WDF_USB_CONTINUOUS_READER_CONFIG spécifiée par le paramètre Config était incorrecte.
STATUS_INVALID_PARAMETER
Un paramètre non valide a été détecté.
STATUS_INSUFFICIENT_RESOURCES
Mémoire insuffisante disponible.
STATUS_INVALID_DEVICE_REQUEST
Le type du canal n’était pas valide.
STATUS_INTEGER_OVERFLOW
Membre HeaderLength, TransferLength ou TrailerLength de la structure WDF_USB_CONTINUOUS_READER_CONFIG que le paramètre Config a spécifié une taille trop grande ou non valide.
STATUS_INVALID_BUFFER_SIZE
La taille de la mémoire tampon de lecture n’était pas un multiple de la taille maximale du paquet du canal.
 

Pour obtenir la liste d’autres valeurs de retour que la méthode WdfUsbTargetPipeConfigContinuousReader peut retourner, consultez Erreurs de création d’objet Framework.

Cette méthode peut également retourner d’autres valeurs NTSTATUS.

Une vérification de bogue se produit si le pilote fournit un handle d’objet non valide.

Remarques

Vous pouvez configurer un lecteur continu pour un canal en bloc ou un canal d’interruption. Le canal doit avoir un point de terminaison d’entrée.

Après avoir appelé WdfUsbTargetPipeConfigContinuousReader pour configurer un lecteur continu, votre pilote doit appeler WdfIoTargetStart pour démarrer le lecteur. Pour arrêter le lecteur, le pilote doit appeler WdfIoTargetStop.

En règle générale, un pilote appelle WdfUsbTargetPipeConfigContinuousReader à partir de sa fonction de rappel EvtDevicePrepareHardware . Le pilote doit appeler WdfIoTargetStart à partir de sa fonction de rappel EvtDeviceD0Entry et appeler WdfIoTargetStop à partir de sa fonction de rappel EvtDeviceD0Exit .

Chaque fois que la cible d’E/S du canal termine correctement une demande de lecture, l’infrastructure appelle la fonction de rappel EvtUsbTargetPipeReadComplete du pilote. Si la cible d’E/S signale un échec lors du traitement d’une demande, l’infrastructure appelle la fonction de rappel EvtUsbTargetPipeReadersFailed du pilote une fois toutes les demandes de lecture terminées. (Par conséquent, la fonction de rappel EvtUsbTargetPipeReadComplete n’est pas appelée alors que la fonction de rappel EvtUsbTargetPipeReadersFailed est en cours d’exécution).

Si vous ne fournissez pas le rappel EvtUsbTargetPipeReadersFailed facultatif, l’infrastructure répond à une tentative de lecture ayant échoué en envoyant une autre demande de lecture. Par conséquent, si le bus est dans un état où il n’accepte pas de lectures, l’infrastructure envoie continuellement de nouvelles demandes de récupération à partir d’une lecture ayant échoué.

Une fois qu’un pilote a appelé WdfUsbTargetPipeConfigContinuousReader, le pilote ne peut pas utiliser WdfUsbTargetPipeReadSynchronously ou WdfRequestSend pour envoyer des demandes d’E/S au canal, sauf si le lecteur continu a été arrêté. Pour arrêter le lecteur, le pilote peut appeler WdfIoTargetStop ou retourner FALSE à partir de sa fonction de rappel EvtUsbTargetPipeReadersFailed . Si le pilote appelle WdfUsbTargetPipeReadSynchronously pendant l’arrêt du lecteur, il doit définir l’indicateur WDF_REQUEST_SEND_OPTION_IGNORE_TARGET_STATE dans le membre Flags du paramètre RequestOptions . Sinon, la demande est bloquée jusqu’à ce que la cible soit redémarrée.

L’infrastructure définit l’indicateur USBD_SHORT_TRANSFER_OK dans son URB interne. La définition de cet indicateur permet au dernier paquet d’un transfert de données d’être inférieur à la taille maximale du paquet.

Pour plus d’informations sur la méthode WdfUsbTargetPipeConfigContinuousReader et les cibles d’E/S USB, consultez Lecture à partir d’un canal.

Exemples

L’exemple de code suivant initialise une structure WDF_USB_CONTINUOUS_READER_CONFIG et appelle WdfUsbTargetPipeConfigContinuousReader.

WDF_USB_CONTINUOUS_READER_CONFIG  contReaderConfig;
NTSTATUS  status;

WDF_USB_CONTINUOUS_READER_CONFIG_INIT(
                                      &contReaderConfig,
                                      OsrFxEvtUsbInterruptPipeReadComplete,
                                      DeviceContext,
                                      sizeof(UCHAR)
                                      );
status = WdfUsbTargetPipeConfigContinuousReader(
                                      Pipe,
                                      &contReaderConfig
                                      );

Configuration requise

   
Plateforme cible Universal
Version KMDF minimale 1.0
Version UMDF minimale 2,0
En-tête wdfusb.h (include Wdfusb.h)
Bibliothèque Wdf01000.sys (KMDF) ; WUDFx02000.dll (UMDF)
IRQL <=DISPATCH_LEVEL
Règles de conformité DDI DriverCreate(kmdf), FailD0EntryIoTargetState(kmdf), KmdfIrql(kmdf), KmdfIrql2(kmdf), KmdfIrqlExplicit( kmdf), UsbContReader(kmdf), UsbKmdfIrql(kmdf), UsbKmdfIrql2(kmdf), UsbKmdfIrqlExplicit(kmdf)

Voir aussi

EvtDeviceD0Entry

EvtDeviceD0Exit

EvtDevicePrepareHardware

EvtUsbTargetPipeReadComplete

EvtUsbTargetPipeReadersFailed

Urb

WDF_USB_CONTINUOUS_READER_CONFIG

WDF_USB_CONTINUOUS_READER_CONFIG_INIT

WdfIoTargetStart

WdfIoTargetStop

WdfUsbInterfaceGetConfiguredPipe