获取usb设备父系或子代

摘要:
=CR_SUCCESS){returnfalse;}apiResult=Win32.CM_Get_Device_ID_Size(outpLen,parentInst,CM_LOCATE_DEVNODE_NORMAL);if(apiResult!
/// <summary>
        ///获取设备父系
        /// </summary>
        /// <param name="driver"></param>
        /// <returns></returns>
        private static bool TryGetDriverIdParent(string driver, out stringresultDeviceID)
        {
            resultDeviceID = "";
            try{
                int CM_LOCATE_DEVNODE_NORMAL = 0x00000000;
                int CR_SUCCESS = 0x00000000;
                UInt32 parentInst;
                int curInst = 0;
                int pLen = 0;
                int apiResult = Win32.CM_Locate_DevNodeA(refcurInst, driver, CM_LOCATE_DEVNODE_NORMAL);
                if (apiResult !=CR_SUCCESS)
                {
                    return false;
                }
                apiResult = Win32.CM_Get_Parent(outparentInst, (UInt32)curInst, CM_LOCATE_DEVNODE_NORMAL);
                if (apiResult !=CR_SUCCESS)
                {
                    return false;
                }
                apiResult = Win32.CM_Get_Device_ID_Size(outpLen, parentInst, CM_LOCATE_DEVNODE_NORMAL);
                if (apiResult !=CR_SUCCESS)
                {
                    return false;
                }
                char[] ptrInstanceBuf = new char[33];
                //获取设备id字符串地址
                apiResult = Win32.CM_Get_Device_ID(parentInst, ptrInstanceBuf, pLen, 0);
                if (apiResult !=CR_SUCCESS)
                {
                    return false;
                }
                resultDeviceID = new string(ptrInstanceBuf);
                return true;
            }
            catch(Exception ecException)
            {
                LogHelper.WriteErrorLog("获取父代" +ecException.Message, ecException);
                return false;
            }
        }

 [DllImport("setupapi.dll", SetLastError = true)]
        public static extern int CM_Locate_DevNodeA(ref int pdnDevInst, string pDeviceID, intulFlags);
        [DllImport("setupapi.dll")]
        public static extern int CM_Get_Parent(out UInt32 pdnDevInst, UInt32 dnDevInst, intulFlags);
        [DllImport("setupapi.dll", SetLastError = true)]
        public static extern int CM_Get_Device_ID_Size(out int pulLen, UInt32 dnDevInst, int flags = 0);
        [DllImport("setupapi.dll", CharSet =CharSet.Unicode)]
        public static extern int CM_Get_Device_ID(UInt32 dnDevInst, char[] buffer, int bufferLen, int flags);

免责声明:文章转载自《获取usb设备父系或子代》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Jquery delegate的理解【算法】滑动窗口三步走下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

随便看看

Centos-修改文件访问和修改时间-touch

触摸如果文件存在,请更改文件的访问时间和修改时间。如果不存在,请创建一个空的文件相关选项。a将文件访问时间更改为当前系统时间。m将文件修改时间更改为当前系统时间。c如果文件不存在,请不要创建它。d不提示。d指定日期和时间。格式为Y-m-dH:m:S-r递归修改目录下的所有文件和内容...

微信小程序知识点总结--组件

aspectFill缩放模式保持缩放图像的纵横比,并且只能完全显示图像的短边。也就是说,图片通常只在水平或垂直方向上是完整的,而另一个方向会被截取。...

mac格式化重装系统

4.选择“重新安装MacOS”5.按照以下步骤中的提示进行操作。安装需要半个多小时。在此期间无法断开网络,否则需要重新安装...

java 服务接口API限流 Rate Limit

服务接口的流量控制策略:分流、降级、流量限制等。2)使用Reids的列表结构,而不是incr命令1FUNCTIONLIMIT_API_CALLL2current=LLEN3IFcurrent˃10THEN4ERROR“toomanyrequestsperssecond”5ELSE6IFEXIST==FALSE7MULTI8RPUSH9EXPIRE10EXEC...

uniapp 实现动态切换全局主题色

要求:要在开发的应用程序中切换主题颜色,如果只需要一种主题颜色,但不需要切换,则可以使用uniappSCSS文件文档思想:预先在公共css中定义所需的主题颜色。这里只是一个定义两种颜色的参考文档的示例,可以从中获得想法。您可以使用css属性选择器动态设置数据xx以动态更改主题颜色。最初,您希望将一个变量直接混合到mixin中,以实现主题颜色的全局控制,忽略了...

Google Drive 里的文件下载的方法

Google Drive不提供创建直接下载链接的选项,但您可以通过更改链接形式在本地保存共享内容。例如,通过Google Drive共享的文件链接是:https://drive.google.com/file/d/FILE_ID/edit?usp=sharing如果您将其更改为以下修改版本,然后通过浏览器打开,则将直接下载该文件:https://drive....