HidLibrary.NativeMethods.SetupDiEnumDeviceInterfaces C# (CSharp) 메소드

SetupDiEnumDeviceInterfaces() 개인적인 메소드

private SetupDiEnumDeviceInterfaces ( IntPtr deviceInfoSet, SP_DEVINFO_DATA &deviceInfoData, System.Guid &interfaceClassGuid, int memberIndex, SP_DEVICE_INTERFACE_DATA &deviceInterfaceData ) : bool
deviceInfoSet System.IntPtr
deviceInfoData SP_DEVINFO_DATA
interfaceClassGuid System.Guid
memberIndex int
deviceInterfaceData SP_DEVICE_INTERFACE_DATA
리턴 bool
        internal static extern bool SetupDiEnumDeviceInterfaces(IntPtr deviceInfoSet, ref SP_DEVINFO_DATA deviceInfoData, ref Guid interfaceClassGuid, int memberIndex, ref SP_DEVICE_INTERFACE_DATA deviceInterfaceData);

Usage Example

예제 #1
0
        private static IEnumerable <string> EnumerateHidDevices()
        {
            var hidClass      = HidClassGuid;
            var deviceInfoSet = NativeMethods.SetupDiGetClassDevs(ref hidClass, null, 0, NativeMethods.DIGCF_PRESENT | NativeMethods.DIGCF_DEVICEINTERFACE);

            if (deviceInfoSet.ToInt64() != NativeMethods.INVALID_HANDLE_VALUE)
            {
                var devices        = new List <string>();
                var deviceInfoData = CreateDeviceInfoData();
                var deviceIndex    = 0;

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

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

                    while (NativeMethods.SetupDiEnumDeviceInterfaces(deviceInfoSet, 0, ref hidClass, deviceInterfaceIndex, ref deviceInterfaceData))
                    {
                        deviceInterfaceIndex++;
                        var devicePath = GetDevicePath(deviceInfoSet, deviceInterfaceData);
                        if (devices.Any(x => x == devicePath))
                        {
                            continue;
                        }
                        devices.Add(devicePath);
                    }
                }
                NativeMethods.SetupDiDestroyDeviceInfoList(deviceInfoSet);

                foreach (string devicePath in devices)
                {
                    yield return(devicePath);
                }
            }
        }