Loading [MathJax]/jax/output/CommonHTML/config.js
社区首页 >问答首页 >SetupDiEnumDeviceInterfaces()总是返回false - C# WPF

SetupDiEnumDeviceInterfaces()总是返回false - C# WPF
EN

Stack Overflow用户
提问于 2014-04-10 10:16:30
回答 1查看 1.1K关注 0票数 0

我正在尝试使用以下代码连接到在我的系统上被检测为CDC设备的USB设备:(我只提供了与我的问题相关的代码部分)代码编译得很好,SetupDiGetClassDevs函数也运行正常。但是SetupDiEnumDeviceInterfaces总是返回false,因此我不能再往下走了。请告诉我哪里错了。谢谢。

代码语言:javascript
代码运行次数:0
复制
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Collections;
using System.Runtime.InteropServices;
using System.IO.Ports;

//**************************************************************
// Static class for access to USB dll for all the activity 
// related to USB device
//**************************************************************
namespace USBDeviceConnect
{

#region Unmanaged

public class Native
{
    [DllImport("setupapi.dll", CharSet = CharSet.Auto)]
    public static extern IntPtr SetupDiGetClassDevs(
        ref Guid ClassGuid,
           IntPtr Enumerator,
        IntPtr hwndParent,
        UInt32 Flags);

    [DllImport("setupapi.dll", CharSet = CharSet.Auto)]
    public static extern bool SetupDiEnumDeviceInterfaces(
        IntPtr hDevInfo,
        SP_DEVINFO_DATA devInfo,
        ref Guid interfaceClassGuid,
        UInt32 memberIndex,
        ref SP_DEVICE_INTERFACE_DATA deviceInterfaceData);

    [DllImport(@"setupapi.dll", CharSet = CharSet.Auto)]
    public static extern Boolean SetupDiEnumDeviceInterfaces(
       IntPtr hDevInfo,
       IntPtr devInfo,
       ref Guid interfaceClassGuid,
       UInt32 memberIndex,
       ref SP_DEVICE_INTERFACE_DATA deviceInterfaceData);

    [DllImport("setupapi.dll", CharSet = CharSet.Auto)]
    public static extern int SetupDiDestroyDeviceInfoList(
           IntPtr DeviceInfoSet);
    [DllImport("setupapi.dll", CharSet = CharSet.Auto)]
    public static extern bool SetupDiEnumDeviceInfo(
       IntPtr DeviceInfoSet,
       UInt32 MemberIndex,
       ref SP_DEVINFO_DATA DeviceInfoData);

    //SP_DEVINFO_DATA
    [StructLayout(LayoutKind.Sequential)]
    public struct SP_DEVINFO_DATA
    {
        public int cbSize;
        public Guid ClassGuid;
        public int DevInst;
        public ulong Reserved;
    }

    [StructLayout(LayoutKind.Sequential)]
    public class SP_DEVICE_INTERFACE_DATA
    {
        public int cbSize;
        public Guid interfaceClassGuid;
        public int flags;
        public ulong reserved;
    };
    //PARMS
    public const int DIGCF_ALLCLASSES = (0x00000004);
    public const int DIGCF_PRESENT = (0x00000002);
    public const int DIGCF_PROFILE = (0x00000008);
    public const int DIGCF_DEVICEINTERFACE = (0x00000010);
    public const int INVALID_HANDLE_VALUE = -1;
    public const int MAX_DEV_LEN = 1000;
    public const int DEVICE_NOTIFY_WINDOW_HANDLE = (0x00000000);
    public const int DEVICE_NOTIFY_SERVICE_HANDLE = (0x00000001);
    public const int DEVICE_NOTIFY_ALL_INTERFACE_CLASSES = (0x00000004);
    public const int DBT_DEVTYP_DEVICEINTERFACE = (0x00000005);
    public const int DBT_DEVNODES_CHANGED = (0x0007);
    public const int WM_DEVICECHANGE = (0x0219);
    public const int DIF_PROPERTYCHANGE = (0x00000012);
    public const int DICS_FLAG_GLOBAL = (0x00000001);
    public const int DICS_FLAG_CONFIGSPECIFIC = (0x00000002);
    public const int DICS_ENABLE = (0x00000001);
    public const int DICS_DISABLE = (0x00000002);
    public const long ERROR_NO_MORE_ITEMS = 259L;
    public const int ERROR_SUCCESS = 0;

}
#endregion
/****************************************************************************/
static class AccessUSB
{
    public static void Main()
    {
        ConnectToDevice();
    }

    /* Execution starts here */
    public static void ConnectToDevice()
    {
        /* Get the info of all connected devices */
        //Globally Unique Identifier (GUID) for CDC class devices.

        Guid InterfaceClassGuid = new Guid("a5dcbf10653011d2901f00c04fb951ed");
        IntPtr DeviceInfoTable = (IntPtr)Native.INVALID_HANDLE_VALUE;
        Native.SP_DEVICE_INTERFACE_DATA InterfaceDataStructure = new Native.SP_DEVICE_INTERFACE_DATA();
        Native.SP_DEVINFO_DATA DevInfoData = new Native.SP_DEVINFO_DATA();

        uint InterfaceIndex = 0;
        uint ErrorStatus;
        StringBuilder DeviceName = new StringBuilder();

        DeviceInfoTable = Native.SetupDiGetClassDevs(ref InterfaceClassGuid, IntPtr.Zero, IntPtr.Zero, Native.DIGCF_PRESENT | Native.DIGCF_DEVICEINTERFACE);

        if (DeviceInfoTable.ToInt32() != Native.INVALID_HANDLE_VALUE)
        {
            //Initialize an appropriate SP_DEVINFO_DATA structure.
            DevInfoData.cbSize = Marshal.SizeOf(DevInfoData);
            while (true)
            {
                InterfaceDataStructure.cbSize = System.Runtime.InteropServices.Marshal.SizeOf(InterfaceDataStructure);
                bool bRslt = Native.SetupDiEnumDeviceInterfaces(DeviceInfoTable, IntPtr.Zero, ref InterfaceClassGuid, InterfaceIndex, ref InterfaceDataStructure);
                if (bRslt == true)
                {
                    ErrorStatus = (uint)System.Runtime.InteropServices.Marshal.GetLastWin32Error();

                    if (Native.ERROR_NO_MORE_ITEMS == ErrorStatus)
                    {
                        Native.SetupDiDestroyDeviceInfoList(DeviceInfoTable);//Clean up the old structure we no longer need.
                        return;
                    }
                }
                else    //Else some other kind of unknown error ocurred...
                {
                    ErrorStatus = (uint)System.Runtime.InteropServices.Marshal.GetLastWin32Error();
                    Native.SetupDiDestroyDeviceInfoList(DeviceInfoTable);   //Clean up the old structure we no longer need.
                    return;
                }

                InterfaceIndex++;

            }//end of while(true)
        }
    }
}

}
EN

回答 1

Stack Overflow用户

发布于 2014-11-11 02:56:42

我不确定您为什么要尝试使用SetupAPI。如果检测到它是CDC ACM设备,则它应该具有与其关联的usbser.sys驱动程序,并且它应该在设备管理器中显示COM端口号,您可以使用.NET SerialPort类连接到该COM端口:

http://msdn.microsoft.com/en-us/library/system.io.ports.serialport.aspx

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22985127

复制
相关文章
不同环境相同配置项的内容如何diff差异?
在工作中,我们用到的环境经常会有很多套,由于不同的环境使用的配置是不一样的,那么怎么能够对比所有不同环境的相同配置项各是什么内容呢?
Wu_Candy
2022/07/04
1.2K0
不同环境相同配置项的内容如何diff差异?
相同的时间,不同的人生
在规定的时间内,一个人目标的达成情况(创造的价值),我们称之为效率。如此可见效率与时间是密切相关的,提高效率首先要做的就是提高我们的时间利用率。
keinYe
2020/05/25
1.2K0
探秘 flex 上下文中神奇的自动 margin
水平垂直居中也算是 CSS 领域最为常见的一个问题了,不同场景下的方法也各不相同,各有优劣。嗯,下面这种应该算是最便捷的了:
Sb_Coco
2019/05/24
1.5K0
Simulator 和 Emulator 的相同和不同;
在看模拟器的时候,出现了关于Simulator和Emulator两种词汇;都可以翻译为模拟器;但在调研游戏模拟器的时候,多为Emulator; 两者词汇的含义和应用场景有什么异同呢?
西湖醋鱼
2021/02/23
1.9K0
consul注册相同服务,相同程序,相同IP,不同端口来负载的问题
由于今天发现运维代码未正常发布。想要自己手动发布。发现原有服务名mos-x3-gls-service只有1个node启动,为了保障发布时原有服务不中断我需要再注册1个node,于是我简单修改了原有springboot端口9112为9113,启动后发现9113的节点正常注册,但是原来9112端口的节点服务没有了,搞了个寂寞。原因是如果在Spring Cloud Consul中使用相同的节点id进行注册,那么Consul将会将它们视为同一个节点,并将它们注册为同一个节点。老了,大意了。于是我把注册consul的节点id设置为服务名称+进程id即可解决。
高久峰
2023/06/17
5060
【说站】javascript上下文中栈的理解
以上就是javascript上下文中栈的理解,希望对大家有所帮助。更多Javascript学习指路:Javascript
很酷的站长
2022/11/24
2630
如何在科研论文中画出漂亮的插图?
https://www.zhihu.com/question/21664179/answer/18928725
Datawhale
2020/07/17
1.2K0
如何在科研论文中画出漂亮的插图?
如何在科研论文中画出漂亮的插图?
https://www.zhihu.com/question/21664179/answer/18928725
小白学视觉
2021/05/07
1.2K0
如何在科研论文中画出漂亮的插图?
C# DataGridView内容合并相同的行
主要原理就是在CellingPainting时间中,删除原来的所在列的网格,然后重新画线,显示内容。代码如下:
kiki.
2022/09/29
1.7K0
python问题解决,[WinError 10049] 在其上下文中,该请求的地址无效
分析问题: Traceback (most recent call last): File “***/test.py”, line 5, in skt.bind((’***’, 5555)) OSError: [WinError 10049] 在其上下文中,该请求的地址无效
全栈程序员站长
2022/11/15
4.5K0
python问题解决,[WinError 10049] 在其上下文中,该请求的地址无效
跨线程的安全更新控件
在你的工程中的扩展方法类中写下一个SafeCall方法: using System; using System.Windows.Forms; namespace WindowsFormsApplication1 { public static class Extensions { public static void SafeCall(this Control ctrl, Action callback) { if (ctrl.In
跟着阿笨一起玩NET
2018/09/19
4960
怎么样才能够批量制作结构相同、内容不同的二维码
使用批量模板+数据的方式,可一次性生成大量结构相同,内容不同的活码,大幅提升制码效率。
草料二维码
2023/04/25
4180
不同语言的程序员有着这些相同的生活!
程序员的生活总是有跟多槽点和笑点 但是还是一如既然的笑着生活着 今天一起来看看 程序员的那些事
老九君
2018/12/29
8370
不同语言的程序员有着这些相同的生活!
iOS中相同IP,不同端口,session失效的问题
公司在https服务器(端口443)进行正常登陆业务等处理 https://ip1:443/ 然后在端口444服务器进行资料文件上传等处理 https://ip1:444/ 因为服务器在https://ip1:443/登陆成功之后对cookie中的session进行校验保存,而一旦出现访问443->444->443,就是进行文件上传操作后,再调用443端口后,服务器对session校验失败,出现会话超时问题
freesan44
2018/09/05
2K0
iOS---设置控件的内容模式
容易混淆的内容摆放属性: 1. textAligment : 文字的水平方向的对齐方式 取值 NSTextAlignmentLeft = 0, // 左对齐 NSTextAlignmentCenter = 1, // 居中对齐 NSTextAlignmentRight = 2, // 右对齐 哪些控件有这个属性 :一般能够显示文字的控件都有这个属性 UITextField UILabel UITextView 2. contentVerticalAlignment : 内容的垂直方向的对齐方式 取值
用户1941540
2018/05/11
9200
【Node.js练习】根据不同的url响应不同的html内容
 进去之后默认的就是首页也就是/当我们再地址栏输入index.html同样也是首页
坚毅的小解同志的前端社区
2022/11/28
1.8K0
【Node.js练习】根据不同的url响应不同的html内容
python匹配两个文件中相同的内容
data_small.txt中内容如下: 343 0 5258 1 3973 2 data_big.txt中内容如下: 343 2009-05-30T17:01:58Z 39.04183745 -94.5914053833 9191 343 2009-05-28T23:40:31Z 39.0523183095 -94.6074986458 8904 23 2009-05-28T23:40:31Z 39.0523183095 -94.6074986458 8904 56 2009-05-27T18:59:50Z 39.0424168 -94.59061145 9188 5258 2009-05-15T00:09:42Z 38.9920234667 -94.5920920333 10927 5258 2009-05-27T18:59:50Z 39.0424168 -94.59061145 9188 545 2009-05-15T00:09:42Z 38.9920234667 -94.5920920333 10927 3973 2009-05-14T20:47:20Z 39.0142536 -94.5928215833 12305 3973 2009-05-14T20:43:05Z 39.0146281324 -94.5907831192 9627
全栈程序员站长
2022/11/07
2.3K0
点击加载更多

相似问题

没有临时筛选器视图的共享Google工作表中的范围排序

20

Google筛选视图问题

10

当通过Google表单输入新数据时,如何自动刷新Google中的筛选器视图?

100

如何删除Google电子邮件的垃圾邮件筛选器

20

如何在使用google工作表中的筛选视图时添加行计数?

10
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档