示例#1
0
        private static IEnumerable <DeviceInfo> EnumerateDevices()
        {
            var devices       = new List <DeviceInfo>();
            var hidClass      = HidClassGuid;
            var deviceInfoSet = NativeMethods.SetupDiGetClassDevs(ref hidClass, null, 0, NativeMethods.DigcfPresent | NativeMethods.DigcfDeviceinterface);

            if (deviceInfoSet.ToInt64() != NativeMethods.InvalidHandleValue)
            {
                var deviceInfoData = CreateDeviceInfoData();
                var deviceIndex    = 0;

                while (NativeMethods.SetupDiEnumDeviceInfo(deviceInfoSet, deviceIndex, ref deviceInfoData))
                {
                    deviceIndex += 1;

                    var deviceInterfaceData = new NativeMethods.SpDeviceInterfaceData();
                    deviceInterfaceData.cbSize = Marshal.SizeOf(deviceInterfaceData);
                    var deviceInterfaceIndex = 0;

                    while (NativeMethods.SetupDiEnumDeviceInterfaces(deviceInfoSet, ref deviceInfoData, ref hidClass, deviceInterfaceIndex, ref deviceInterfaceData))
                    {
                        deviceInterfaceIndex++;
                        var devicePath  = GetDevicePath(deviceInfoSet, deviceInterfaceData);
                        var description = GetBusReportedDeviceDescription(deviceInfoSet, ref deviceInfoData) ??
                                          GetDeviceDescription(deviceInfoSet, ref deviceInfoData);
                        devices.Add(new DeviceInfo {
                            Path = devicePath, Description = description
                        });
                    }
                }
                NativeMethods.SetupDiDestroyDeviceInfoList(deviceInfoSet);
            }
            return(devices);
        }
示例#2
0
        private static string GetDevicePath(IntPtr deviceInfoSet, NativeMethods.SpDeviceInterfaceData deviceInterfaceData)
        {
            var bufferSize      = 0;
            var interfaceDetail = new NativeMethods.SpDeviceInterfaceDetailData {
                Size = IntPtr.Size == 4 ? 4 + Marshal.SystemDefaultCharSize : 8
            };

            NativeMethods.SetupDiGetDeviceInterfaceDetailBuffer(deviceInfoSet, ref deviceInterfaceData, IntPtr.Zero, 0, ref bufferSize, IntPtr.Zero);

            return(NativeMethods.SetupDiGetDeviceInterfaceDetail(deviceInfoSet, ref deviceInterfaceData, ref interfaceDetail, bufferSize, ref bufferSize, IntPtr.Zero) ? interfaceDetail.DevicePath : null);
        }
示例#3
0
        private static IEnumerable<DeviceInfo> EnumerateDevices()
        {
            var devices = new List<DeviceInfo>();
            var hidClass = HidClassGuid;
            var deviceInfoSet = NativeMethods.SetupDiGetClassDevs(
                                                                  ref hidClass, null, 0,
                                                                  NativeMethods.DigcfPresent |
                                                                  NativeMethods.DigcfDeviceinterface);

            if(deviceInfoSet.ToInt64() != NativeMethods.InvalidHandleValue) {
                var deviceInfoData = CreateDeviceInfoData();
                var deviceIndex = 0;

                while(NativeMethods.SetupDiEnumDeviceInfo(deviceInfoSet, deviceIndex, ref deviceInfoData)) {
                    deviceIndex += 1;

                    var deviceInterfaceData = new NativeMethods.SpDeviceInterfaceData();
                    deviceInterfaceData.cbSize = Marshal.SizeOf(deviceInterfaceData);
                    var deviceInterfaceIndex = 0;

                    while(NativeMethods.SetupDiEnumDeviceInterfaces(
                                                                    deviceInfoSet, ref deviceInfoData, ref hidClass,
                                                                    deviceInterfaceIndex, ref deviceInterfaceData)) {
                        deviceInterfaceIndex++;
                        var devicePath = GetDevicePath(deviceInfoSet, deviceInterfaceData);
                        var description = GetBusReportedDeviceDescription(deviceInfoSet, ref deviceInfoData) ??
                                          GetDeviceDescription(deviceInfoSet, ref deviceInfoData);
                        devices.Add(
                                    new DeviceInfo {
                                                       Path = devicePath,
                                                       Description = description
                                                   });
                    }
                }
                NativeMethods.SetupDiDestroyDeviceInfoList(deviceInfoSet);
            }
            return devices;
        }