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
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) |