IOCTL_USB_GET_NODE_CONNECTION_INFORMATION_EX IOCTL (usbioctl.h)
Die IOCTL_USB_GET_NODE_CONNECTION_INFORMATION_EX Anforderung ruft Informationen über einen USB-Anschluss und das Gerät ab, das an den Anschluss angeschlossen ist, falls vorhanden.
Clienttreiber müssen diese IOCTL an einer IRQL von PASSIVE_LEVEL senden.
IOCTL_USB_GET_NODE_CONNECTION_INFORMATION_EX ist eine Benutzermodus-E/A-Steuerelementanforderung. Diese Anforderung richtet sich an das USB-Hubgerät (GUID_DEVINTERFACE_USB_HUB).
Hauptcode
Eingabe-/Ausgabepuffer
Sowohl Eingabe- als auch Ausgabepuffer verweisen auf eine vom Aufrufer zugewiesene USB_NODE_CONNECTION_INFORMATION_EX Struktur. Bei eingaben muss das ConnectionIndex- Mitglied dieser Struktur eine Zahl größer oder gleich 1 enthalten, die die Anzahl des Ports angibt, dessen Verbindungsinformationen gemeldet werden sollen. Der Hubtreiber gibt Verbindungsinformationen in den verbleibenden Membern von USB_NODE_CONNECTION_INFORMATION_EXzurück. Der IRP, der AssociatedIrp.SystemBuffer Member verweist auf die USB_NODE_CONNECTION_INFORMATION_EX Struktur.
Bei der Ausgabe empfängt die USB_NODE_CONNECTION_INFORMATION_EX Struktur Informationen über die angegebene Verbindung vom USB-Hubtreiber.
Länge des Eingabe-/Ausgabepuffers
Die Größe einer USB_NODE_CONNECTION_INFORMATION_EX Struktur.
Statusblock
Der USB-Stapel legt Irp->IoStatus.Status auf STATUS_SUCCESS fest, wenn die Anforderung erfolgreich ist. Andernfalls legt der USB-Stapel Status auf die entsprechende Fehlerbedingung fest, z. B. STATUS_INVALID_PARAMETER oder STATUS_INSUFFICIENT_RESOURCES.
Bemerkungen
Hier ist ein Beispiel, das zeigt, wie Sie die Geschwindigkeit des Hubports durch Senden dieser Anforderung abrufen.
Die Funktion gibt die symbolische Verknüpfung zu Hubgerät und Portindex zur Abfrage an. Bei Rückgabe gibt pPortSpeed Folgendes an:
- Portgeschwindigkeit
- SPEED_PATHERROR: Wenn der Pfad nicht geöffnet werden kann.
- SPEED_IOCTLERROR: Fehler bei 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);
}
Anforderungen
Anforderung | Wert |
---|---|
mindestens unterstützte Client- | Windows XP, Windows Server 2003 und höher. |
Header- | usbioctl.h (include Usbioctl.h) |