Partager via


IOCTL_SEND_USB_REQUEST IOCTL (usbscan.h)

Envoie une demande définie par le fournisseur à un périphérique USB, à l’aide du canal de contrôle, et envoie ou reçoit éventuellement des données supplémentaires.

Code principal

IRP_MJ_DEVICE_CONTROL

Mémoire tampon d’entrée

Pointeur vers une structure IO_BLOCK_EX.

Longueur de la mémoire tampon d’entrée

Taille de la mémoire tampon d’entrée.

Mémoire tampon de sortie

Pointeur vers la même mémoire tampon, le pbyData membre de la structure IO_BLOCK_EX identifiée, ou NULL si un transfert de données n’est pas demandé.

Longueur de la mémoire tampon de sortie

Taille de la mémoire tampon de sortie ou zéro si un transfert de données n’est pas demandé.

Bloc d’état

> IoStatus.Status est défini sur STATUS_SUCCESS si la requête réussit. Sinon, état à la condition d’erreur appropriée en tant que code NTSTATUS.

Remarques

Paramètres DeviceIoControl

Lorsque la fonction DeviceloControl est appelée avec le code de contrôle IOCTL_SEND_USB_REQUEST, l’appelant doit spécifier l’adresse d’une structure IO_BLOCK_EX comme paramètre lpInBuffer de la fonction. Le type de requête spécifié avec ce code de contrôle d’E/S est spécifique à l’appareil et défini par le fournisseur, car il s’agit du type et de la taille des informations susceptibles d’être envoyées ou reçues.

Le tableau suivant montre comment les arguments d’entrée doivent être spécifiés.

Argument Opération de lecture Opération d’écriture Aucun transfert de données
lpInBuffer pointeur IO_BLOCK_EX. pointeur IO_BLOCK_EX. pointeur IO_BLOCK_EX.
lpOutBuffer Pointeur vers la mémoire tampon qui recevra les données à lire. Pointeur vers la mémoire tampon contenant des données à écrire. NULL
lpOutBufferSize Taille de la mémoire tampon. Taille de la mémoire tampon. Zéro
membre bRequest de la structure de IO_BLOCK_EX Code de requête spécifique à l’appareil. Code de requête spécifique à l’appareil. Code de requête spécifique à l’appareil.
pbyData membre de la structure IO_BLOCK_EX Même pointeur que lpOutBuffer. Même pointeur que lpOutBuffer. NULL
membre uLength de structure IO_BLOCK_EX Même valeur que lpOutBufferSize. Même valeur que lpOutBufferSize. Zéro
fTransferDirectionIn membre de la structure de IO_BLOCK_EX TRUE FALSE FALSE

Le membre bmRequestType de la structure IO_BLOCK_EX n’est pas utilisé avec IOCTL_SEND_USB_REQUEST.

À l’aide du contenu de la structure IO_BLOCK_EX, le pilote en mode noyau crée unURBqui contient une structure de URB_CONTROL_VENDOR_OR_CLASS_REQUEST.

Le tableau suivant indique les valeurs affectées à _URB_CONTROL_VENDOR_OR_CLASS_REQUEST membres de la structure.

Membre de structure Valeur affectée
TransferFlags 0
TransferBufferLength pIoBlockEx-> uLength
TransferBuffer lpOutBuffer (lecture) ou pIoBlockEx->pbyData (écriture)
TransferBufferMDL NULL
RequestTypeReservedBits 0xC0 (lecture) ou 0x40 (écriture)
demande de pIoBlockEx-> bRequest
valeur (SHORT)pIoBlockEx->uOffset
d’index pIoBlockEx->uIndex

Pour plus d’informations, consultez Accès aux pilotes Kernel-Mode pour les appareils toujours image.

Exigences

Exigence Valeur
d’en-tête usbscan.h (include Usbscan.h)