IOCTL_INTERNAL_USB_GET_CONTROLLER_NAME IOCTL (usbioctl.h)
La demande d’E /S IOCTL_INTERNAL_USB_GET_CONTROLLER_NAME interroge le pilote de bus pour obtenir le nom du périphérique du contrôleur hôte USB.
IOCTL_INTERNAL_USB_GET_CONTROLLER_NAME est une demande de contrôle d’E/S en mode noyau. Cette requête cible l’AOP du hub USB. Cette demande doit être envoyée au niveau de l’IRQL de PASSIVE_LEVEL.
Code principal
IRP_MJ_INTERNAL_DEVICE_CONTROL
Mémoire tampon d'entrée
Parameters.Others.Argument1 doit être un pointeur vers une structure USB_HUB_NAME qui sera remplie avec le nom du contrôleur hôte.
Longueur de la mémoire tampon d’entrée
Parameters.Others.Argument2 doit être un ULONG spécifiant la longueur de la mémoire tampon (en octets) dans Parameters.Others.Argument1.
Mémoire tampon de sortie
Le pilote de bus remplira la mémoire tampon pointée par Parameters.Others.Argument1 avec le nom du périphérique du contrôleur d’hôte.
Longueur de la mémoire tampon de sortie
Il sera rempli uniquement jusqu’à la longueur spécifiée dans Parameters.Others.Argument2.
Bloc d’état
Le pilote de bus ou de port définit Irp-IoStatus.Status> sur STATUS_SUCCESS ou le status d’erreur approprié.
Remarques
L’appelant doit fournir une mémoire tampon suffisamment grande pour contenir une structure USB_HUB_NAME . La valeur Parameters.Others.Argument2 indique la taille de cette mémoire tampon. Une fois l’opération terminée, le membre HubName de USB_HUB_NAME contient le nom du contrôleur et le membre ActualLength indique la longueur de la chaîne de nom du contrôleur. Notez que ActualLength n’indique pas la taille de l’ensemble de la structure USB_HUB_NAME . Si la mémoire tampon fournie dans Parameters.Others.Argument1 n’est pas suffisamment grande pour contenir la chaîne, la valeur HubName peut afficher une chaîne tronquée.
Pour obtenir la taille de la mémoire tampon requise pour contenir la chaîne, envoyez la demande deux fois. Dans la première requête, spécifiez une mémoire tampon d’au moins sizeof(USB_HUB_NAME)
bytes. Sinon, ActualLength n’indique pas la longueur correcte de la chaîne et la requête échoue avec STATUS_BUFFER_TOO_SMALL.
Une fois la première requête terminée, allouez une mémoire tampon d’octets ActualLength + sizeof(ULONG)
et renvoyez la demande. Une fois la requête terminée, HubName indique la chaîne de nom de contrôleur entière.
Configuration requise
Condition requise | Valeur |
---|---|
En-tête | usbioctl.h |