IOCTL_USB_GET_NODE_CONNECTION_INFORMATION_EX IOCTL (usbioctl.h)
IOCTL_USB_GET_NODE_CONNECTION_INFORMATION_EX 要求は、USB ポートと、ポートに接続されているデバイス (存在する場合) に関する情報を取得します。
クライアント ドライバーは、PASSIVE_LEVELの IRQL でこの 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 要求が成功した場合に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 を含む) |