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