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 uno.
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 del concentrador USB (GUID_DEVINTERFACE_USB_HUB).
Código principal
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 ConnectionIndex miembro 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 central 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 a la condición de error adecuada, como STATUS_INVALID_PARAMETER o STATUS_INSUFFICIENT_RESOURCES.
Observaciones
Este es un ejemplo que muestra cómo obtener la velocidad del puerto del concentrador mediante el envío de esta solicitud.
La función especifica el vínculo simbólico al dispositivo central y al índice de puerto que se va a consultar. A cambio, 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 | Valor |
---|---|
cliente mínimo admitido | Windows XP, Windows Server 2003 y versiones posteriores. |
encabezado de | usbioctl.h (incluya Usbioctl.h) |