首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >获取USB_BANDWIDTH_INFO结构的问题

获取USB_BANDWIDTH_INFO结构的问题
EN

Stack Overflow用户
提问于 2021-05-13 12:12:01
回答 1查看 92关注 0票数 1

我正在用C++编写一个Windows应用程序,从外部USB摄像头读取图像并显示它们(这很好)。我喜欢同时监控使用的USB带宽。我知道存在一个USB_BANDWIDTH_INFO结构(信息),但我不知道如何使用它。更确切地说:结构本身非常清楚,但是我如何获得/读取它(没有找到任何解释这一点的示例代码)?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-05-14 02:52:12

根据MSDN

IOCTL_USB_USER_REQUEST I/O控制请求使用USB_BANDWIDTH_INFO结构来检索有关分配带宽的信息。

因此,您需要使用DeviceIoControl调用IOCTL_USB_USER_REQUEST

参考官方例子,您可以找到:

代码语言:javascript
复制
GetHostControllerInfo(
    HANDLE hHCDev, 
    PUSBHOSTCONTROLLERINFO hcInfo)
{
    USBUSER_CONTROLLER_INFO_0 UsbControllerInfo;
    DWORD                      dwError = 0;
    DWORD                      dwBytes = 0;
    BOOL                       bSuccess = FALSE;

    memset(&UsbControllerInfo, 0, sizeof(UsbControllerInfo));

    // set the header and request sizes
    UsbControllerInfo.Header.UsbUserRequest = USBUSER_GET_CONTROLLER_INFO_0;
    UsbControllerInfo.Header.RequestBufferLength = sizeof(UsbControllerInfo);

    //
    // Query for the USB_CONTROLLER_INFO_0 structure
    //
    bSuccess = DeviceIoControl(hHCDev,
            IOCTL_USB_USER_REQUEST,
            &UsbControllerInfo,
            sizeof(UsbControllerInfo),
            &UsbControllerInfo,
            sizeof(UsbControllerInfo),
            &dwBytes,
            NULL);

    if (!bSuccess)
    {
        dwError = GetLastError();
        OOPS();
    }
    else
    {
        hcInfo->ControllerInfo = (PUSB_CONTROLLER_INFO_0) ALLOC(sizeof(USB_CONTROLLER_INFO_0));
        if(NULL == hcInfo->ControllerInfo)
        {
            dwError = GetLastError();
            OOPS();
        }
        else
        {
            // copy the data into our USB Host Controller's info structure
            memcpy(hcInfo->ControllerInfo, &UsbControllerInfo.Info0, sizeof(USB_CONTROLLER_INFO_0));
        }
    }
    return dwError;
}

您可以修改它,例如:

代码语言:javascript
复制
USBUSER_CONTROLLER_INFO_0 UsbControllerInfo;
UsbControllerInfo.Header.UsbUserRequest = USBUSER_GET_BANDWIDTH_INFORMATION;
UsbControllerInfo.Header.RequestBufferLength = sizeof(UsbControllerInfo);
USB_BANDWIDTH_INFO UsbBandInfo{};
DWORD                      dwError = 0;
DWORD                      dwBytes = 0;
BOOL                       bSuccess = FALSE;
    
bSuccess = DeviceIoControl(hHCDev,
    IOCTL_USB_USER_REQUEST,
    &UsbControllerInfo,
    sizeof(UsbControllerInfo),
    &UsbBandInfo,
    sizeof(USB_BANDWIDTH_INFO),
    &dwBytes,
    NULL);
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67519031

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档