获取usb设备父系或子代

Posted 大雄

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了获取usb设备父系或子代相关的知识,希望对你有一定的参考价值。

/// <summary>
        /// 获取设备父系
        /// </summary>
        /// <param name="driver"></param>
        /// <returns></returns>
        private static bool TryGetDriverIdParent(string driver, out string resultDeviceID)
        {
            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(ref curInst, driver, CM_LOCATE_DEVNODE_NORMAL);
                if (apiResult != CR_SUCCESS)
                {
                    return false;
                }
                apiResult = Win32.CM_Get_Parent(out parentInst, (UInt32)curInst, CM_LOCATE_DEVNODE_NORMAL);
                if (apiResult != CR_SUCCESS)
                {
                    return false;
                }
                apiResult = Win32.CM_Get_Device_ID_Size(out pLen, 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, int ulFlags);
        [DllImport("setupapi.dll")]
        public static extern int CM_Get_Parent(out UInt32 pdnDevInst, UInt32 dnDevInst, int ulFlags);
        [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设备父系或子代的主要内容,如果未能解决你的问题,请参考以下文章

python 一个终端代码片段,在mac上生成可启动的usb live CD,以运行类似ubuntu或debian的内容。

如何获取 USB 存储设备的设备名称?

使用 Python 3 获取 USB 设备的序列号

WMI:在插入时获取 USB 设备描述

通过python获取USB设备地址

在 Windows XP 上获取现有 USB 设备的 GUID