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) を対象とします。

メジャー コード

IRP_MJ_DEVICE_CONTROL

入力/出力バッファー

入力バッファーと出力バッファーの両方が、呼び出し元によって割り当てられた 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 を含む)

こちらもご覧ください

USB_NODE_CONNECTION_INFORMATION

USB_NODE_CONNECTION_INFORMATION_EX