WdfUsbTargetPipeAbortSynchronously, fonction (wdfusb.h)
[S’applique à KMDF et UMDF]
La méthode WdfUsbTargetPipeAbortSynchronously génère une demande d’abandon et l’envoie de manière synchrone à un canal USB spécifié.
Syntaxe
NTSTATUS WdfUsbTargetPipeAbortSynchronously(
[in] WDFUSBPIPE Pipe,
[in, optional] WDFREQUEST Request,
[in, optional] PWDF_REQUEST_SEND_OPTIONS RequestOptions
);
Paramètres
[in] Pipe
Handle vers un objet de canal d’infrastructure obtenu en appelant WdfUsbInterfaceGetConfiguredPipe.
[in, optional] Request
Handle pour un objet de requête d’infrastructure. Ce paramètre est facultatif et peut être NULL. Pour plus d'informations, consultez la section Notes qui suit.
[in, optional] RequestOptions
Pointeur vers une structure de WDF_REQUEST_SEND_OPTIONS allouée par l’appelant qui spécifie des options pour la demande. Ce pointeur est facultatif et peut être NULL. Pour plus d'informations, consultez la section Notes qui suit.
Valeur retournée
WdfUsbTargetPipeAbortSynchronously retourne la valeur d’achèvement status de la cible d’E/S si l’opération réussit. Sinon, cette méthode peut retourner l’une des valeurs suivantes :
Code de retour | Description |
---|---|
|
La taille de la structure WDF_REQUEST_SEND_OPTIONS spécifiée par le paramètre RequestOptions était incorrecte. |
|
Un handle non valide a été détecté. |
|
La mémoire disponible était insuffisante. |
|
L’IRQL de l’appelant n’a pas été 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. |
|
Le pilote a fourni une valeur de délai d’attente et la demande n’a pas été effectuée dans le délai imparti. |
Cette méthode peut également retourner d’autres valeurs NTSTATUS.
Un bogue case activée se produit si le pilote fournit un handle d’objet non valide.
Remarques
Utilisez la méthode WdfUsbTargetPipeAbortSynchronously pour envoyer une demande d’abandon USB de façon synchrone. Pour envoyer de telles demandes de manière asynchrone, utilisez WdfUsbTargetPipeFormatRequestForAbort, suivi de WdfRequestSend.
Une demande d’abandon USB entraîne l’annulation par la cible d’E/S du pilote de toutes les demandes d’E/S qui ont été envoyées à un canal. Lorsqu’un pilote appelle WdfUsbTargetPipeAbortSynchronously, le framework envoie une requête URB_FUNCTION_ABORT_PIPE à la cible d’E/S. Pour plus d’informations sur l’annulation d’opérations sur un canal USB (également appelée « abandon d’un canal »), consultez la spécification USB.
La méthode WdfUsbTargetPipeAbortSynchronously 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 du paramètre RequestOptions, ou si une erreur est détectée.
Vous pouvez transférer une demande d’E/S que votre pilote a reçue 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 par votre pilote dans une file d’attente d’E/S, spécifiez le handle de la demande reçue pour le paramètre Request de la méthode WdfUsbTargetPipeAbortSynchronously.
Pour créer et envoyer une nouvelle demande, 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 à la fonction de rappel EvtDriverDeviceAdd de votre pilote de préallouer des objets de requête pour un appareil. En outre, un autre thread de pilote peut appeler WdfRequestCancelSentRequest pour annuler la demande, si nécessaire.
Pour plus d’informations sur l’obtention d’informations status après la fin d’une demande d’E/S, consultez Obtention d’informations d’achèvement.
Pour plus d’informations sur la méthode WdfUsbTargetPipeAbortSynchronously et les cibles d’E/S USB, consultez Cibles d’E/S USB.
Exemples
L’exemple de code suivant envoie des demandes d’abandon à tous les canaux configurés pour l’interface d’un périphérique USB.
UCHAR i;
ULONG count;
NTSTATUS status;
PDEVICE_CONTEXT pDevContext;
pDevContext = GetDeviceContext(Device);
count = WdfUsbInterfaceGetNumConfiguredPipes(
pDevContext->UsbInterface
);
for (i = 0; i < count; i++) {
WDFUSBPIPE pipe;
pipe = WdfUsbInterfaceGetConfiguredPipe(
pDevContext->UsbInterface,
i,
NULL
);
status = WdfUsbTargetPipeAbortSynchronously(
pipe,
WDF_NO_HANDLE,
NULL
);
if (!NT_SUCCESS(status)) {
break;
}
}
Configuration requise
Condition requise | Valeur |
---|---|
Plateforme cible | Universal |
Version KMDF minimale | 1.0 |
Version UMDF minimale | 2.0 |
En-tête | wdfusb.h (inclure Wdfusb.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), RequestForUrbXrb(kmdf), UsbKmdfIrql(kmdf), UsbKmdfIrql2(kmdf), UsbKmdfIrqlExplicit(kmdf) |