Example #1
0
        protected override object[] Refresh()
        {
            var paths = new List<string>();

            Guid hidGuid; NativeMethods.HidD_GetHidGuid(out hidGuid);
            NativeMethods.HDEVINFO devInfo = NativeMethods.SetupDiGetClassDevs(hidGuid, null, IntPtr.Zero,
                /*NativeMethods.DIGCF.AllClasses |*/ NativeMethods.DIGCF.DeviceInterface | NativeMethods.DIGCF.Present);

            if (devInfo.IsValid)
            {
                try
                {
                    NativeMethods.SP_DEVICE_INTERFACE_DATA did = new NativeMethods.SP_DEVICE_INTERFACE_DATA();
                    did.Size = Marshal.SizeOf(did);

                    for (int i = 0; NativeMethods.SetupDiEnumDeviceInterfaces(devInfo, IntPtr.Zero, hidGuid, i, ref did); i ++)
                    {
                        NativeMethods.SP_DEVICE_INTERFACE_DETAIL_DATA didetail = new NativeMethods.SP_DEVICE_INTERFACE_DETAIL_DATA();
                        didetail.Size = IntPtr.Size == 8 ? 8 : (4 + Marshal.SystemDefaultCharSize);
                        if (NativeMethods.SetupDiGetDeviceInterfaceDetail(devInfo, ref did, ref didetail,
                            Marshal.SizeOf(didetail) - (int)Marshal.OffsetOf(didetail.GetType(), "DevicePath"),
                            IntPtr.Zero, IntPtr.Zero))
                        {
                            paths.Add(didetail.DevicePath);
                        }
                    }
                }
                finally
                {
                    NativeMethods.SetupDiDestroyDeviceInfoList(devInfo);
                }
            }

            return paths.Cast<object>().ToArray();
        }
        protected override object[] Refresh()
        {
            var paths = new List <string> ();

            Guid hidGuid;

            NativeMethods.HidD_GetHidGuid(out hidGuid);
            NativeMethods.HDEVINFO devInfo = NativeMethods.SetupDiGetClassDevs(hidGuid, null, IntPtr.Zero,
                                                                               /*NativeMethods.DIGCF.AllClasses |*/ NativeMethods.DIGCF.DeviceInterface | NativeMethods.DIGCF.Present);

            if (devInfo.IsValid)
            {
                try {
                    NativeMethods.SP_DEVICE_INTERFACE_DATA did = new NativeMethods.SP_DEVICE_INTERFACE_DATA();
                    did.Size = Marshal.SizeOf(did);

                    for (int i = 0; NativeMethods.SetupDiEnumDeviceInterfaces(devInfo, IntPtr.Zero, hidGuid, i, ref did); i++)
                    {
                        NativeMethods.SP_DEVICE_INTERFACE_DETAIL_DATA didetail = new NativeMethods.SP_DEVICE_INTERFACE_DETAIL_DATA();
                        didetail.Size = IntPtr.Size == 8 ? 8 : (4 + Marshal.SystemDefaultCharSize);
                        if (NativeMethods.SetupDiGetDeviceInterfaceDetail(devInfo, ref did, ref didetail,
                                                                          Marshal.SizeOf(didetail) - (int)Marshal.OffsetOf(didetail.GetType(), "DevicePath"),
                                                                          IntPtr.Zero, IntPtr.Zero))
                        {
                            paths.Add(didetail.DevicePath);
                        }
                    }
                } finally {
                    NativeMethods.SetupDiDestroyDeviceInfoList(devInfo);
                }
            }

            return(paths.Cast <object> ().ToArray());
        }
Example #3
0
        public static bool SetupDiGetDeviceInterfaceDetail(HDEVINFO deviceInfoSet,
                                                           ref SP_DEVICE_INTERFACE_DATA deviceInterfaceData,
                                                           out SP_DEVICE_INTERFACE_DETAIL_DATA deviceInterfaceDetailData)
        {
            deviceInterfaceDetailData = new NativeMethods.SP_DEVICE_INTERFACE_DETAIL_DATA();

            deviceInterfaceDetailData.Size = IntPtr.Size == 8 ? 8 : (4 + Marshal.SystemDefaultCharSize);

            if (NativeMethods.SetupDiGetDeviceInterfaceDetail(deviceInfoSet,
                                                              ref deviceInterfaceData, ref deviceInterfaceDetailData,
                                                              Marshal.SizeOf(deviceInterfaceDetailData) - 4, IntPtr.Zero, IntPtr.Zero))
            {
                return(true);
            }
            else
            {
                deviceInterfaceDetailData = default(SP_DEVICE_INTERFACE_DETAIL_DATA);
                return(false);
            }
        }