Condividi tramite


IOCTL_USB_GET_NODE_CONNECTION_INFORMATION_EX IOCTL (usbioctl.h)

La richiesta di IOCTL_USB_GET_NODE_CONNECTION_INFORMATION_EX recupera informazioni su una porta USB e sul dispositivo collegato alla porta, se presente.

I driver client devono inviare questo IOCTL in un irQL di PASSIVE_LEVEL.

IOCTL_USB_GET_NODE_CONNECTION_INFORMATION_EX è una richiesta di controllo I/O in modalità utente. Questa richiesta è destinata al dispositivo hub USB (GUID_DEVINTERFACE_USB_HUB).

Codice principale

IRP_MJ_DEVICE_CONTROL

Input/Buffer di output

Sia i buffer di input che di output puntano a una struttura di USB_NODE_CONNECTION_INFORMATION_EX allocata dal chiamante. In input, il membro ConnectionIndex di questa struttura deve contenere un numero maggiore o uguale a 1 che indica il numero della porta le cui informazioni di connessione devono essere segnalate. Il driver hub restituisce le informazioni di connessione nei membri rimanenti di USB_NODE_CONNECTION_INFORMATION_EX. L'IRP, il membro AssociatedIrp.SystemBuffer punta alla struttura USB_NODE_CONNECTION_INFORMATION_EX .

In output, la struttura USB_NODE_CONNECTION_INFORMATION_EX riceve informazioni sulla connessione indicata dal driver dell'hub USB.

Lunghezza del buffer di input/output

Dimensioni di una struttura USB_NODE_CONNECTION_INFORMATION_EX .

Blocco dello stato

Lo stack USB imposta Irp-IoStatus.Status> su STATUS_SUCCESS se la richiesta ha esito positivo. In caso contrario, lo stack USB imposta Stato sulla condizione di errore appropriata, ad esempio STATUS_INVALID_PARAMETER o STATUS_INSUFFICIENT_RESOURCES.

Commenti

Ecco un esempio che illustra come ottenere la velocità della porta dell'hub inviando questa richiesta.

La funzione specifica il collegamento simbolico al dispositivo hub e all'indice di porta da eseguire in query. Al ritorno, pPortSpeed indica:

  • Velocità porta
  • SPEED_PATHERROR: se non è possibile aprire il percorso.
  • SPEED_IOCTLERROR: Hub IOCTL non riuscito.
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);
}

Requisiti

Requisito Valore
Client minimo supportato Windows XP, Windows Server 2003 e versioni successive.
Intestazione usbioctl.h (include Usbioctl.h)

Vedi anche

USB_NODE_CONNECTION_INFORMATION

USB_NODE_CONNECTION_INFORMATION_EX