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()); }
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); } }