IOCTL_USB_GET_NODE_CONNECTION_INFORMATION_EX IOCTL (usbioctl.h)
IOCTL_USB_GET_NODE_CONNECTION_INFORMATION_EX 要求會擷取有關 USB 埠和連接至該埠的裝置的相關信息,如果有的話。
用戶端驅動程序必須在 IRQL PASSIVE_LEVEL傳送此 IOCTL。
IOCTL_USB_GET_NODE_CONNECTION_INFORMATION_EX 是使用者模式 I/O 控制項要求。 此要求是以 USB 中樞裝置為目標(GUID_DEVINTERFACE_USB_HUB)。
主要程序代碼
輸入/輸出緩衝區
輸入和輸出緩衝區都會指向呼叫端配置的 USB_NODE_CONNECTION_INFORMATION_EX 結構。 輸入時,ConnectionIndex 這個結構的成員必須包含大於或等於 1 的數位,指出要報告其連接資訊的埠數目。 中樞驅動程式會在 USB_NODE_CONNECTION_INFORMATION_EX的其餘成員中傳回連線資訊。 IRP,AssociatedIrp.SystemBuffer 成員指向 USB_NODE_CONNECTION_INFORMATION_EX 結構。
在輸出時,USB_NODE_CONNECTION_INFORMATION_EX 結構會從USB中樞驅動程式接收所指示連線的相關信息。
輸入/輸出緩衝區長度
USB_NODE_CONNECTION_INFORMATION_EX 結構的大小。
狀態區塊
如果要求成功,USB 堆疊會將 Irp->IoStatus.Status Irp- STATUS_SUCCESS。 否則,USB 堆疊會將狀態 設定為適當的錯誤狀況,例如STATUS_INVALID_PARAMETER或STATUS_INSUFFICIENT_RESOURCES。
言論
以下是示範如何透過傳送此要求來取得中樞埠速度的範例。
函式會指定要查詢中樞裝置的符號連結和埠索引。 在傳回時,pPortSpeed 表示:
- 埠速度
- SPEED_PATHERROR:如果無法開啟路徑。
- SPEED_IOCTLERROR:中樞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);
}
要求
要求 | 價值 |
---|---|
最低支援的用戶端 | Windows XP、Windows Server 2003 和更新版本。 |
標頭 | usbioctl.h (包括 Usbioctl.h) |