WdfUsbTargetPipeSendUrbSynchronously, fonction (wdfusb.h)

[S’applique uniquement à KMDF]

La méthode WdfUsbTargetPipeSendUrbSynchronously génère une requête USB pour un canal USB spécifié, à l’aide de paramètres de requête qu’une URB spécifiée décrit.

Syntaxe

NTSTATUS WdfUsbTargetPipeSendUrbSynchronously(
  [in]           WDFUSBPIPE                Pipe,
  [in, optional] WDFREQUEST                Request,
  [in, optional] PWDF_REQUEST_SEND_OPTIONS RequestOptions,
  [in]           PURB                      Urb
);

Paramètres

[in] Pipe

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

[in, optional] Request

Handle vers un objet de requête de framework. Ce paramètre est facultatif et peut être NULL. Pour plus d’informations, consultez la section Remarques suivante.

[in, optional] RequestOptions

Pointeur vers une structure WDF_REQUEST_SEND_OPTIONS allouée par l’appelant qui spécifie les options de la requête. Ce pointeur est facultatif et peut être NULL. Pour plus d’informations, consultez la section Remarques suivante.

[in] Urb

Pointeur vers une structure URB initialisée par le pilote.

Si le pilote a précédemment appelé WdfUsbTargetDeviceCreateWithParameters pour créer UsbDevice, le pilote doit utiliser WdfUsbTargetDeviceCreateUrb ou WdfUsbTargetDeviceCreateIsochUrb pour créer cette URB.

Valeur de retour

WdfUsbTargetPipeSendUrbSynchronously retourne la valeur d’état d’achèvement de la cible d’E/S si l’opération réussit. Sinon, cette méthode peut retourner l’une des valeurs suivantes :

Retourner le code Description
STATUS_INFO_LENGTH_MISMATCH
La taille de la structure WDF_REQUEST_SEND_OPTIONS que le paramètre requestOptions spécifié était incorrect.
STATUS_INVALID_PARAMETER
Un paramètre non valide a été détecté.
STATUS_INSUFFICIENT_RESOURCES
Mémoire insuffisante disponible.
STATUS_INVALID_DEVICE_REQUEST
L’irQL de l’appelant n’était pas PASSIVE_LEVEL, ou la requête d’E/S spécifiée était déjà mise en file d’attente vers une cible d’E/S.
STATUS_IO_TIMEOUT
Le pilote a fourni une valeur de délai d’attente et la demande n’a pas terminé dans le délai imparti.
STATUS_REQUEST_NOT_ACCEPTED
Le paquet de requête d’E/S (IRP) que le paramètre Request représente ne fournit pas suffisamment de structures IO_STACK_LOCATION pour permettre au pilote de transférer la requête.
 

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

Utilisez la méthode WdfUsbTargetPipeSendUrbSynchronously pour envoyer une requête USB de manière synchrone. Pour envoyer ces requêtes de façon asynchrone, utilisez WdfUsbTargetPipeFormatRequestForUrb, suivie de WdfRequestSend.

La méthode WdfUsbTargetPipeSendUrbSynchronously ne retourne pas tant que la requête n’est pas terminée, sauf si le pilote fournit une valeur de délai d’attente dans la structure WDF_REQUEST_SEND_OPTIONS vers laquelle le paramètre RequestOptions pointe ou, sauf si une erreur est détectée.

L’infrastructure n’examine pas la requête USB. Si la demande change l’état du canal USB, l’infrastructure n’est pas au courant de la modification.

Vous pouvez transférer une demande d’E/S reçue par votre pilote dans une file d’attente d’E/S, ou vous pouvez créer et envoyer une nouvelle demande.

Pour transférer une demande d’E/S reçue dans une file d’attente d’E/S, spécifiez le handle de la demande reçue pour le paramètre WdfUsbTargetPipeSendUrbSynchronously méthode Request.

Pour créer et envoyer une nouvelle requête, fournissez un handle de requête NULL pour le paramètre Request, ou créez un objet de requête et fournissez son handle :

  • Si vous fournissez un handle de requête NULL , l’infrastructure utilise un objet de requête interne. Cette technique est simple à utiliser, mais le pilote ne peut pas annuler la demande.
  • Si vous appelez WdfRequestCreate pour créer un ou plusieurs objets de requête, vous pouvez réutiliser ces objets de requête en appelant WdfRequestReuse. Cette technique permet aux EvtDriverDeviceAdd fonction de rappel de préallouer les objets de requête d’un appareil. En outre, un autre thread de pilote peut appeler WdfRequestCancelSentRequest pour annuler la requête, si nécessaire.
Votre pilote peut spécifier un paramètre RequestOptions nonNULL ou une NULLDemander paramètre. Vous pouvez, par exemple, utiliser le paramètre RequestOptions pour spécifier une valeur de délai d’attente.

Pour plus d’informations sur l’obtention des informations d’état une fois qu’une demande d’E/S est terminée, consultez Obtention des informations d’achèvement.

Pour plus d’informations sur la méthode WdfUsbTargetPipeSendUrbSynchronously et les cibles d’E/S USB, consultez cibles d’E/S USB.

Exemples

L’exemple de code suivant initialise une URB et envoie l’URB à un canal USB.

URB  urb;
PURB  pUrb = NULL;
NTSTATUS status;

pUrb = &urb;
pUrb->UrbHeader.Length = (USHORT) sizeof(struct _URB_GET_CURRENT_FRAME_NUMBER);
pUrb->UrbHeader.Function = URB_FUNCTION_GET_CURRENT_FRAME_NUMBER;
pUrb->UrbGetCurrentFrameNumber.FrameNumber = 0; 

status = WdfUsbTargetPipeSendUrbSynchronously(
                                              Pipe,
                                              Request,
                                              NULL,
                                              pUrb
                                              );

Exigences

Exigence Valeur
plateforme cible Universel
version minimale de KMDF 1.0
d’en-tête wdfusb.h (include Wdfusb.h)
bibliothèque Wdf01000.sys (voir Versioning de la bibliothèque Framework.)
IRQL PASSIVE_LEVEL
règles de conformité DDI DriverCreate(kmdf), IoctlReqs(kmdf), KmdfIrql(kmdf), KmdfIrql2(kmdf), KmdfIrqlExplicit (kmdf), SyncReqSend(kmdf), UsbKmdfIrql(kmdf), UsbKmdfIrql2(kmdf), UsbKmdfIrqlExplicit(kmdf)

Voir aussi

WDF_REQUEST_SEND_OPTIONS

WdfRequestCancelSentRequest

WdfUsbInterfaceGetConfiguredPipe