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
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) |