Freigeben über


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 eine IRQL von PASSIVE_LEVEL senden.

IOCTL_USB_GET_NODE_CONNECTION_INFORMATION_EX ist eine E/A-Steuerungsanforderung im Benutzermodus. Diese Anforderung richtet sich an das USB-Hubgerät (GUID_DEVINTERFACE_USB_HUB).

Hauptcode

IRP_MJ_DEVICE_CONTROL

Eingabe-/Ausgabepuffer

Sowohl Eingabe- als auch Ausgabepuffer verweisen auf eine vom Aufrufer zugewiesene USB_NODE_CONNECTION_INFORMATION_EX-Struktur . Bei der Eingabe muss das ConnectionIndex-Element 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 übrigen Membern von USB_NODE_CONNECTION_INFORMATION_EX zurück. Das IRP und das AssociatedIrp.SystemBuffer-Element 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.

Hinweise

Hier sehen Sie ein Beispiel, das zeigt, wie Sie die Geschwindigkeit des Hubports abrufen, indem Sie diese Anforderung senden.

Die Funktion gibt den symbolischen Link zum Hubgerät und zum Portindex für die Abfrage an. Bei der Rückgabe gibt pPortSpeed Folgendes an:

  • Portgeschwindigkeit
  • SPEED_PATHERROR: Wenn der Pfad nicht geöffnet werden kann.
  • SPEED_IOCTLERROR: Fehler beim 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
Unterstützte Mindestversion (Client) Windows XP, Windows Server 2003 und höher.
Kopfzeile usbioctl.h (include Usbioctl.h)

Weitere Informationen

USB_NODE_CONNECTION_INFORMATION

USB_NODE_CONNECTION_INFORMATION_EX