IOCTL_USB_GET_NODE_CONNECTION_INFORMATION_EX IOCTL (usbioctl.h)
La demande IOCTL_USB_GET_NODE_CONNECTION_INFORMATION_EX récupère des informations sur un port USB et l’appareil attaché au port, le cas échéant.
Les pilotes clients doivent envoyer ce IOCTL à un IRQL de PASSIVE_LEVEL.
IOCTL_USB_GET_NODE_CONNECTION_INFORMATION_EX est une demande de contrôle d’E/S en mode utilisateur. Cette requête cible le périphérique hub USB (GUID_DEVINTERFACE_USB_HUB).
Code principal
Mémoire tampon d’entrée/sortie
Les tampons d’entrée et de sortie pointent vers une structure de USB_NODE_CONNECTION_INFORMATION_EX allouée par l’appelant. Lors de l’entrée, le membre ConnectionIndex de cette structure doit contenir un nombre supérieur ou égal à 1 qui indique le numéro du port dont les informations de connexion doivent être signalées. Le pilote hub retourne des informations de connexion dans les membres restants de USB_NODE_CONNECTION_INFORMATION_EX. L’IRP, le membre AssociatedIrp.SystemBuffer pointe vers la structure USB_NODE_CONNECTION_INFORMATION_EX .
À la sortie, la structure USB_NODE_CONNECTION_INFORMATION_EX reçoit des informations sur la connexion indiquée du pilote du hub USB.
Longueur de la mémoire tampon d’entrée/sortie
Taille d’une structure USB_NODE_CONNECTION_INFORMATION_EX .
Bloc d’état
La pile USB définit Irp-IoStatus.Status> sur STATUS_SUCCESS si la demande réussit. Sinon, la pile USB définit Status sur la condition d’erreur appropriée, telle que STATUS_INVALID_PARAMETER ou STATUS_INSUFFICIENT_RESOURCES.
Remarques
Voici un exemple qui montre comment obtenir la vitesse du port hub en envoyant cette requête.
La fonction spécifie le lien symbolique vers l’appareil hub et l’index de port à interroger. Au retour, pPortSpeed indique :
- Vitesse de port
- SPEED_PATHERROR : si impossible d’ouvrir le chemin.
- SPEED_IOCTLERROR : Échec du hub IOCTL.
void GetPortSpeed(const WCHAR *Path, ULONG PortIndex, UCHAR *pPortSpeed)
{
if (Path == NULL) { return; }
HANDLE handle = CreateFile(
Path,
GENERIC_WRITE | GENERIC_READ,
FILE_SHARE_WRITE | FILE_SHARE_READ,
NULL,
OPEN_EXISTING,
NULL,
NULL
);
if (handle == INVALID_HANDLE_VALUE)
{
*pPortSpeed = SPEED_PATHERROR;
return;
}
PUSB_NODE_CONNECTION_INFORMATION_EX ConnectionInfo =
(PUSB_NODE_CONNECTION_INFORMATION_EX)
malloc(sizeof(USB_NODE_CONNECTION_INFORMATION_EX));
ConnectionInfo->ConnectionIndex = PortIndex;
ULONG bytes = 0;
BOOL success = DeviceIoControl(handle,
IOCTL_USB_GET_NODE_CONNECTION_INFORMATION_EX,
ConnectionInfo,
sizeof(USB_NODE_CONNECTION_INFORMATION_EX),
ConnectionInfo,
sizeof(USB_NODE_CONNECTION_INFORMATION_EX),
&bytes,
NULL);
CloseHandle(handle);
if (success == FALSE)
{
*pPortSpeed = SPEED_IOCTLERROR;
}
else
{
*pPortSpeed = (UCHAR)ConnectionInfo->Speed;
}
free(ConnectionInfo);
}
Configuration requise
Condition requise | Valeur |
---|---|
Client minimal pris en charge | Windows XP, Windows Server 2003 et versions ultérieures. |
En-tête | usbioctl.h (include Usbioctl.h) |
Voir aussi
Commentaires
https://aka.ms/ContentUserFeedback.
Bientôt disponible : Tout au long de 2024, nous allons supprimer progressivement GitHub Issues comme mécanisme de commentaires pour le contenu et le remplacer par un nouveau système de commentaires. Pour plus d’informations, consultezEnvoyer et afficher des commentaires pour