Share 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 que le membre pbyData de la structure IO_BLOCK_EX a identifié, ou NULL si aucun transfert de données n’est demandé.

Longueur de la mémoire tampon de sortie

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

Bloc d’état

Irp->IoStatus.Status est défini sur STATUS_SUCCESS si la demande 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, tout comme le type et la taille des informations qui peuvent être envoyées ou reçues.

Le tableau suivant montre comment spécifier les arguments d’entrée.

Argument Opération de lecture Écrire une opération 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 les données à écrire. NULL
lpOutBufferSize Taille de la mémoire tampon. Taille de la mémoire tampon. Zéro
bRequest member of IO_BLOCK_EX structure Code de demande spécifique à l’appareil. Code de demande spécifique à l’appareil. Code de demande spécifique à l’appareil.
pbyData , membre de IO_BLOCK_EX structure Même pointeur que lpOutBuffer. Même pointeur que lpOutBuffer. NULL
uLength membre de IO_BLOCK_EX structure Même valeur que lpOutBufferSize. Même valeur que lpOutBufferSize. Zéro
fTransferDirectionIn membre de IO_BLOCK_EX structure 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 un URB qui contient une structure 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)
Requête pIoBlockEx-bRequest>
Valeur (SHORT) pIoBlockEx-uOffset>
Index pIoBlockEx-uIndex>

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

Configuration requise

Condition requise Valeur
En-tête usbscan.h (inclure Usbscan.h)