USB应用层开发
+ -

使用SetupApi函数通过GUID枚举系统中所有关联设备

2021-08-30 692 0

Windows的设备在驱动中大部分都会IoSetRegisterInterface,这其中一个重要的参数是GUID,这样系统会根据这个GUID给设备创建一个symbolicname,这个名字在应用层可以通过CreateFile打开。
这里分享一个在应用层通过SetuApi枚举该类型GUID下的所有设备。

BOOL USBEnumDevice(OUT PTCHAR pDeviceName, IN int instance)
{
    const GUID* pGuid = &(GUID_CLASS_SELF_USB);

    HDEVINFO info = SetupDiGetClassDevs((GUID*)pGuid, NULL, NULL, DIGCF_PRESENT | DIGCF_INTERFACEDEVICE);
    if (info == INVALID_HANDLE_VALUE)
    {
        printf("No HDEVINFO available for this GUID\n");
        return FALSE;
    }

    // Get interface data for the requested instance
    SP_INTERFACE_DEVICE_DATA ifdata;
    ifdata.cbSize = sizeof(ifdata);
    if (!SetupDiEnumDeviceInterfaces(info, NULL, (GUID*)pGuid, instance, &ifdata))
    {
        //_tprintf(TEXT("No SP_INTERFACE_DEVICE_DATA available for this GUID instance\n"));
        SetupDiDestroyDeviceInfoList(info);
        return FALSE;
    }

    // Get size of symbolic link name
    DWORD ReqLen;
    SetupDiGetDeviceInterfaceDetail(info, &ifdata, NULL, 0, &ReqLen, NULL);
    PSP_INTERFACE_DEVICE_DETAIL_DATA ifDetail = (PSP_INTERFACE_DEVICE_DETAIL_DATA)(new TCHAR[ReqLen]);
    if (ifDetail == NULL)
    {
        SetupDiDestroyDeviceInfoList(info);
        return FALSE;
    }

    // Get symbolic link name
    ifDetail->cbSize = sizeof(SP_INTERFACE_DEVICE_DETAIL_DATA);
    if (!SetupDiGetDeviceInterfaceDetail(info, &ifdata, ifDetail, ReqLen, NULL, NULL))
    {
        SetupDiDestroyDeviceInfoList(info);
        delete ifDetail;
        return FALSE;
    }

    //printf("Symbolic link is %s\n", ifDetail->DevicePath);
    //memcpy(pDeviceName, ifDetail->DevicePath, _tcslen(ifDetail->DevicePath)*sizeof(TCHAR))//wj del

    memcpy(pDeviceName, ifDetail->DevicePath, wcslen(ifDetail->DevicePath)*sizeof(TCHAR));

    //pDeviceName[_tcslen(ifDetail->DevicePath)] = TEXT('\0');//wj del
    pDeviceName[_tcslen(ifDetail->DevicePath)] = TEXT('\0');

    delete ifDetail;
    SetupDiDestroyDeviceInfoList(info);

    return TRUE;
}
HID人机交互QQ群:564808376    UAC音频QQ群:218581009    UVC相机QQ群:331552032    BOT&UASP大容量存储QQ群:258159197    STC-USB单片机QQ群:315457461    USB技术交流QQ群2:580684376    USB技术交流QQ群:952873936   

0 篇笔记 写笔记

UVC YUV2、NV12、M420、I420无压缩视频帧描述符GUID
无压缩数据格式的官方文档为:USB_Video_Payload_Uncompressed_1.5.pdf,其下载地址为:https://www.usb.org/sites/default/files/USB_Video_Class_1_5.zip UVC无压缩的数据格式支持四种数据格式类型,见下表......
DirectShow摄像头视频格式格式UUID-GUID大全
使用DirectShow开发Windows摄像头Capture时,对于每一种支持的格式,都有一个与之对应的UUID.现将各UUID总结整理如下:(后续持续更新)以下UUID来自windows系统uuids.h,目标路径为:C:Program Files (x86)Windows Kits1......
UVC摄像头驱动装调试总结
前几天发表了一篇文章 UVC PTZ和扩展单元的过滤与分发调试笔记,原文见: http://www.usbzh.com/article/detail-517.html ,本来想着应该没啥问题了,可没想到上周五在实际测试过程中,还是出现了问题:经过长时间的UVC摄像头工作,突然驱动显示了大量数据包错误......
使用SetupApi函数通过GUID枚举系统中所有关联设备
Windows的设备在驱动中大部分都会IoSetRegisterInterface,这其中一个重要的参数是GUID,这样系统会根据这个GUID给设备创建一个symbolicname,这个名字在应用层可以通过CreateFile打开。这里分享一个在应用层通过SetuApi枚举该类型GUID下的所有设备......
使用WinUSB读写USB设备
Windows为WinUSB设备提供了API,主要通过以下几个步骤访问设备。通过扩展描述符中的GUID查看接口的路径用接口的路径作为参数,调用CreateFile打开接口使用WinUsb_Initialize得到WinUSB句柄通过WinUsb_WritePipe和WinUsb_ReadPipe对......
windows通过GUID枚举系统中所有USB设备并且显示该设备的所有属性信息
微信群里有同学问怎么获取USB设备的位置信息,这个学名叫做SPDRP_LOCATION_PATHS,刚好自己以前写过这个代码,就分享了一下。代码如下:#include#include #include
今天同事突然报了一个情况,说安装了驱动之后设备为什么在基它分类中,打开设备管理器中可以看到:按设备树的方式显示:从上面的的图中可以看到,根设备驱动归为其它设备分类中了。我们知道,设备的分类可以通过INF文件中的ClassGuid来进行分类,我记得我在INF文件中有指定其为USB分类啊,通过设备管理......
打开设备之前,得先枚举到设备,获取到设备的链接名,然后才能通过CreateFile打开设备,与之通讯。设备接口GUID枚举设备是通过winsub驱动的inf文件中的DeviceInterfaceGUIDs来实现的。在WinUSB驱动设备时,会使用该GUID来注册设备接口,所以我们也需要此接口来枚举......
主要还是SetupAPI函数的封装#include //获取设备的实例路径HRESULTRetrieveDevicePath( _Out_bytecap_(BufLen) LPTSTR DevicePath, _In_ ......
从Windows10 1709开始,摄像头分类使用新的类Camera[Version]Class=CameraClassGuid={ca3e7ab9-b4c3-4ae6-8251-579ef933890f}来源:https://docs.microsoft.com/en-us/windows......
windows系统下的注册表:计算机HKEY_LOCAL_MACHINESYSTEMCurrentControlSetControlMediaCategories在很多的GUID,从MediaCategories来看,是多媒体设备的目录分类,所以以下的GUID应与多媒体设备相关。该目......
话不多说,直接使用可以正常运行的。#include #include #include #include #include #inclu......
关注公众号
取消
感谢您的支持,我会继续努力的!
扫码支持
扫码打赏,你说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

您的支持,是我们前进的动力!