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 以降。 |
Header | usbioctl.h (Usbioctl.h を含む) |