public static List <DeviceEntity> GetHiddenDevice()
        {
            UInt32 RequiredSize = 0;
            Guid   guid         = Guid.Empty;

            Guid[]          guids          = new Guid[1];
            SP_DEVINFO_DATA DeviceInfoData = new SP_DEVINFO_DATA();
            bool            res            = SetupDiClassGuidsFromNameA("ports", ref guids[0], RequiredSize, ref RequiredSize);

            if (res == false)
            {
                guids = new Guid[RequiredSize];
                res   = SetupDiClassGuidsFromNameA("ports", ref guids[0], RequiredSize, ref RequiredSize);

                if (!res || RequiredSize == 0)
                {
                    Debug.WriteLine("类型不正确");
                }
            }
            if (res == true)
            {
                List <DeviceEntity> list        = new List <Hardware.DeviceEntity>();
                List <DeviceEntity> listCurrent = new List <Hardware.DeviceEntity>();

                Guid   myGUID   = System.Guid.Empty;
                IntPtr hDevInfo = SetupDiGetClassDevs(guids[0], 0, IntPtr.Zero, DIGCF_NOSET);
                if (hDevInfo.ToInt64() == -1)
                {
                    Debug.WriteLine("SetupDiGetClassDevs: 获取设备错误。");
                }
                else
                {
                    DeviceInfoData.cbSize    = Marshal.SizeOf(DeviceInfoData);
                    DeviceInfoData.devInst   = 0;
                    DeviceInfoData.classGuid = System.Guid.Empty;
                    DeviceInfoData.reserved  = 0;
                    var devs    = SetupDiGetClassDevsExW(guids[0], null, IntPtr.Zero, DIGCF_NOSET, null, null, 0);
                    var devsNow = SetupDiGetClassDevsExW(guids[0], null, IntPtr.Zero, DIGCF_PRESENT, null, null, 0);
                    if (devsNow.ToInt64() != -1)
                    {
                        for (uint i = 0; SetupDiEnumDeviceInfo(devsNow, i, DeviceInfoData); i++)
                        {
                            DeviceEntity  entity     = new DeviceEntity();
                            StringBuilder DeviceName = new StringBuilder("", 254);
                            bool          resName    = SetupDiGetDeviceRegistryPropertyA(devs, DeviceInfoData, SPDRP_FRIENDLYNAME, 0, DeviceName, MAX_DEV_LEN, IntPtr.Zero);
                            if (!resName)
                            {
                            }
                            else
                            {
                                entity.DeviceName = DeviceName.ToString();
                            }

                            StringBuilder DeviceID = new StringBuilder("", 254);
                            if (CM_Get_Device_IDA(DeviceInfoData.devInst, DeviceID, 254, 0) == CR_SUCCESS)
                            {
                                entity.DeviceID = DeviceID.ToString();
                            }
                            listCurrent.Add(entity);
                        }
                    }

                    for (uint i = 0; SetupDiEnumDeviceInfo(devs, i, DeviceInfoData); i++)
                    {
                        DeviceEntity entity = new DeviceEntity();

                        StringBuilder DeviceID = new StringBuilder("", 254);
                        if (CM_Get_Device_IDA(DeviceInfoData.devInst, DeviceID, 254, 0) == CR_SUCCESS)
                        {
                            entity.DeviceID = DeviceID.ToString();
                        }

                        if (listCurrent.Exists(p => p.DeviceID == DeviceID.ToString()))
                        {
                            continue;
                        }
                        else
                        {
                            StringBuilder DeviceName = new StringBuilder("", 254);
                            bool          resName    = SetupDiGetDeviceRegistryPropertyA(devs, DeviceInfoData, SPDRP_FRIENDLYNAME, 0, DeviceName, MAX_DEV_LEN, IntPtr.Zero);
                            if (!resName)
                            {
                            }
                            else
                            {
                                entity.DeviceName = DeviceName.ToString();
                            }

                            StringBuilder Mfg            = new StringBuilder("", 254);
                            bool          resHardwareMfg = SetupDiGetDeviceRegistryPropertyA(devs, DeviceInfoData, SPDRP_MFG, 0, Mfg, MAX_DEV_LEN, IntPtr.Zero);
                            if (!resHardwareMfg)
                            {
                            }
                            else
                            {
                                entity.DevicePIDVID = Mfg.ToString();
                            }

                            StringBuilder realPath            = new StringBuilder("", 2047);
                            bool          resHardwareRealPath = SetupDiGetDeviceRegistryPropertyA(devs, DeviceInfoData, SPDRP_LOCATION_PATHS, 0, realPath, MAX_DEV_LEN, IntPtr.Zero);
                            if (!resHardwareRealPath)
                            {
                            }
                            else
                            {
                                entity.RealTimePath = realPath.ToString();
                            }

                            StringBuilder installState            = new StringBuilder("", 64);
                            bool          resHardwareInstallState = SetupDiGetDeviceRegistryPropertyA(devs, DeviceInfoData, SPDRP_INSTALL_STATE, 0, installState, MAX_DEV_LEN, IntPtr.Zero);
                            if (!resHardwareInstallState)
                            {
                            }
                            else
                            {
                                entity.InstallState = installState.ToString();
                            }
                            //bool isHidde = !SetupDiSelectDevice(devsNow, DeviceInfoData);
                            entity.IsHiddenDevice = true;
                            list.Add(entity);
                        }
                    }
                    SetupDiDestroyDeviceInfoList(devs);
                    SetupDiDestroyDeviceInfoList(devsNow);
                }
                return(list);
            }
            else
            {
                return(null);
            }
        }
        public static List <DeviceEntity> GetNomarlDevice()
        {
            UInt32 RequiredSize = 0;
            Guid   guid         = Guid.Empty;

            Guid[]          guids          = new Guid[1];
            SP_DEVINFO_DATA DeviceInfoData = new SP_DEVINFO_DATA();
            bool            res            = SetupDiClassGuidsFromNameA("ports", ref guids[0], RequiredSize, ref RequiredSize);

            if (res == false)
            {
                guids = new Guid[RequiredSize];
                res   = SetupDiClassGuidsFromNameA("ports", ref guids[0], RequiredSize, ref RequiredSize);

                if (!res || RequiredSize == 0)
                {
                    Debug.WriteLine("类型不正确");
                }
            }
            if (res == true)
            {
                List <DeviceEntity> list = new List <Hardware.DeviceEntity>();
                Guid   myGUID            = System.Guid.Empty;
                IntPtr hDevInfo          = SetupDiGetClassDevs(guids[0], 0, IntPtr.Zero, DIGCF_PRESENT);
                if (hDevInfo.ToInt64() == -1)
                {
                    Debug.WriteLine("SetupDiGetClassDevs: 获取设备错误。");
                }
                else
                {
                    DeviceInfoData.cbSize    = Marshal.SizeOf(DeviceInfoData);
                    DeviceInfoData.devInst   = 0;
                    DeviceInfoData.classGuid = System.Guid.Empty;
                    DeviceInfoData.reserved  = 0;
                    UInt32 i;
                    for (i = 0; SetupDiEnumDeviceInfo(hDevInfo, i, DeviceInfoData); i++)
                    {
                        DeviceEntity  entity     = new DeviceEntity();
                        StringBuilder DeviceName = new StringBuilder("", 254);
                        bool          resName    = SetupDiGetDeviceRegistryPropertyA(hDevInfo, DeviceInfoData, SPDRP_FRIENDLYNAME, 0, DeviceName, MAX_DEV_LEN, IntPtr.Zero);
                        if (!resName)
                        {
                        }
                        else
                        {
                            entity.DeviceName = DeviceName.ToString();
                        }

                        StringBuilder DeviceID      = new StringBuilder("", 254);
                        bool          resHardwareID = SetupDiGetDeviceRegistryPropertyA(hDevInfo, DeviceInfoData, SPDRP_HARDWAREID, 0, DeviceID, MAX_DEV_LEN, IntPtr.Zero);
                        if (!resHardwareID)
                        {
                            //设备ID未知
                            DeviceID = new StringBuilder("");
                        }
                        else
                        {
                            entity.DeviceID = DeviceID.ToString();
                        }


                        StringBuilder Mfg            = new StringBuilder("", 254);
                        bool          resHardwareMfg = SetupDiGetDeviceRegistryPropertyA(hDevInfo, DeviceInfoData, SPDRP_MFG, 0, Mfg, MAX_DEV_LEN, IntPtr.Zero);
                        if (!resHardwareMfg)
                        {
                        }
                        else
                        {
                            entity.DevicePIDVID = Mfg.ToString();
                        }
                        StringBuilder realPath            = new StringBuilder("", 2047);
                        bool          resHardwareRealPath = SetupDiGetDeviceRegistryPropertyA(hDevInfo, DeviceInfoData, SPDRP_LOCATION_PATHS, 0, realPath, MAX_DEV_LEN, IntPtr.Zero);
                        if (!resHardwareRealPath)
                        {
                        }
                        else
                        {
                            entity.RealTimePath = realPath.ToString();
                        }

                        StringBuilder installState            = new StringBuilder("", 64);
                        bool          resHardwareInstallState = SetupDiGetDeviceRegistryPropertyA(hDevInfo, DeviceInfoData, SPDRP_INSTALL_STATE, 0, installState, MAX_DEV_LEN, IntPtr.Zero);
                        if (!resHardwareInstallState)
                        {
                        }
                        else
                        {
                            entity.InstallState = installState.ToString();
                        }

                        list.Add(entity);
                    }
                    SetupDiDestroyDeviceInfoList(hDevInfo);
                }
                return(list);
            }
            else
            {
                return(null);
            }
        }