Share via


IOCTL_USB_GET_NODE_CONNECTION_INFORMATION_EX IOCTL (usbioctl.h)

La solicitud IOCTL_USB_GET_NODE_CONNECTION_INFORMATION_EX recupera información sobre un puerto USB y el dispositivo que está conectado al puerto, si hay alguno.

Los controladores de cliente deben enviar este IOCTL en un IRQL de PASSIVE_LEVEL.

IOCTL_USB_GET_NODE_CONNECTION_INFORMATION_EX es una solicitud de control de E/S en modo de usuario. Esta solicitud tiene como destino el dispositivo concentrador USB (GUID_DEVINTERFACE_USB_HUB).

Código principal

IRP_MJ_DEVICE_CONTROL

Búfer de entrada y salida

Los búferes de entrada y salida apuntan a una estructura de USB_NODE_CONNECTION_INFORMATION_EX asignada por el autor de la llamada. En la entrada, el miembro ConnectionIndex de esta estructura debe contener un número mayor o igual que 1 que indique el número del puerto cuya información de conexión se va a notificar. El controlador del concentrador devuelve información de conexión en los miembros restantes de USB_NODE_CONNECTION_INFORMATION_EX. IrP, el miembro AssociatedIrp.SystemBuffer apunta a la estructura USB_NODE_CONNECTION_INFORMATION_EX .

En la salida, la estructura USB_NODE_CONNECTION_INFORMATION_EX recibe información sobre la conexión indicada desde el controlador del concentrador USB.

Longitud del búfer de entrada y salida

Tamaño de una estructura de USB_NODE_CONNECTION_INFORMATION_EX .

Bloque de estado

La pila USB establece Irp-IoStatus.Status> en STATUS_SUCCESS si la solicitud se realiza correctamente. De lo contrario, la pila USB establece Estado en la condición de error adecuada, como STATUS_INVALID_PARAMETER o STATUS_INSUFFICIENT_RESOURCES.

Comentarios

Este es un ejemplo que muestra cómo obtener la velocidad del puerto del concentrador enviando esta solicitud.

La función especifica el vínculo simbólico al índice de puerto y dispositivo central que se va a consultar. Al devolver, pPortSpeed indica:

  • Velocidad del puerto
  • SPEED_PATHERROR: si no se puede abrir la ruta de acceso.
  • SPEED_IOCTLERROR: error del IOCTL del centro.
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);
}

Requisitos

Requisito Value
Cliente mínimo compatible Windows XP, Windows Server 2003 y versiones posteriores.
Encabezado usbioctl.h (incluya Usbioctl.h)

Consulte también

USB_NODE_CONNECTION_INFORMATION

USB_NODE_CONNECTION_INFORMATION_EX